From patchwork Tue Dec 20 18:42:15 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Dunn X-Patchwork-Id: 132495 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:4978:20e::2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 2E4ACB7050 for ; Wed, 21 Dec 2011 05:45:45 +1100 (EST) Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1Rd4g9-0001MJ-Pu; Tue, 20 Dec 2011 18:44:45 +0000 Received: from smtp.newsguy.com ([74.209.136.69]) by merlin.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1Rd4g7-0001Lk-Dn for linux-mtd@lists.infradead.org; Tue, 20 Dec 2011 18:44:44 +0000 Received: from localhost.localdomain (0.sub-166-250-2.myvzw.com [166.250.2.0]) by smtp.newsguy.com (8.14.3/8.14.3) with ESMTP id pBKIhZkV050770 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 20 Dec 2011 10:44:26 -0800 (PST) (envelope-from mikedunn@newsguy.com) From: Mike Dunn To: linux-mtd@lists.infradead.org Subject: [PATCH 1/2] MTD: pass driver methods through partition wrappers on unpartitioned devices Date: Tue, 20 Dec 2011 10:42:15 -0800 Message-Id: <1324406536-18250-2-git-send-email-mikedunn@newsguy.com> X-Mailer: git-send-email 1.7.3.4 In-Reply-To: <1324406536-18250-1-git-send-email-mikedunn@newsguy.com> References: <1324406536-18250-1-git-send-email-mikedunn@newsguy.com> To: linux-mtd@lists.infradead.org X-Spam-Note: CRM114 invocation failed X-Spam-Score: -4.5 (----) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-4.5 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_PASS SPF: sender matches SPF record -2.6 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Cc: Thomas Petazzoni , Lars-Peter Clausen , Mike Dunn , Scott Branden , Wan ZongShun , Artem Bityutskiy , Dmitry Eremin-Solenikov , Robert Jarzmik , Manuel Lauss , Haojian Zhuang , Kyungmin Park , Vimal Singh , Ralf Baechle , Jiandong Zheng , Andres Salomon , Olof Johansson , Jamie Iles , Brian Norris , David Woodhouse X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: linux-mtd-bounces@lists.infradead.org Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Ensure driver methods always go through the wrapper functions in the partitioning code by creating a single "partition" on otherwise unpartitioned devices. Tested with nandsim, onenand_sim, and the diskonchip g4 nand driver (currently out-of-tree). Signed-off-by: Mike Dunn --- drivers/mtd/mtdcore.c | 17 ++++++++++++++--- drivers/mtd/mtdpart.c | 10 +++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c index b01993e..4ac1962 100644 --- a/drivers/mtd/mtdcore.c +++ b/drivers/mtd/mtdcore.c @@ -477,10 +477,21 @@ int mtd_device_parse_register(struct mtd_info *mtd, const char **types, if (err > 0) { err = add_mtd_partitions(mtd, real_parts, err); kfree(real_parts); + } else if (err == 0) { - err = add_mtd_device(mtd); - if (err == 1) - err = -ENODEV; + /* + * For unpartitioned devices, create a single "partition" that + * spans the entire device, so that driver methods go through + * partition wrappers in all cases. + */ + struct mtd_partition single_part = { + .name = (char *)mtd->name, + .offset = 0, + .size = mtd->size, + .mask_flags = 0, + .ecclayout = mtd->ecclayout, + }; + err = add_mtd_partitions(mtd, &single_part, 1); } return err; diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index a0bd2de..81975a5 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c @@ -665,9 +665,11 @@ int add_mtd_partitions(struct mtd_info *master, { struct mtd_part *slave; uint64_t cur_offset = 0; - int i; + int i, ret; - printk(KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts, master->name); + if (nbparts > 1) + printk(KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", + nbparts, master->name); for (i = 0; i < nbparts; i++) { slave = allocate_partition(master, parts + i, i, cur_offset); @@ -678,7 +680,9 @@ int add_mtd_partitions(struct mtd_info *master, list_add(&slave->list, &mtd_partitions); mutex_unlock(&mtd_partitions_mutex); - add_mtd_device(&slave->mtd); + ret = add_mtd_device(&slave->mtd); + if (ret == 1) + return -ENODEV; cur_offset = slave->offset + slave->mtd.size; }