mtd: cmdlinepart: allow small partitions
PATCH 1/2 mtd: cmdlinepart: allow small partitions
I'm not sure why we have a PAGE_SIZE restriction on this partition parser.
If we really wanted the restriction, I would expect it to be a restriction for *all* parsers, so we'd move it to the MTD core
At any rate, while small partitions may not be useful (they'll often be smaller than the eraseblock size and therefore can only be used read-only), they still have use as a read-only partition.
This restriction is especially annoying because it aborts the entire MTD's cmdline parsing, leaving it unpartitioned.
So, let's kill the restriction and only check for zero-sized partitions, which I expect we don't want to allow.
---
Anyone know a good reason why this restriction should be here?
drivers/mtd/cmdlinepart.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
drivers/mtd/cmdlinepart.c +2 -3
@@ -115,9 +115,8 @@ static struct mtd_partition * newpart(char *s, s++; }else { size =memparse (s, &s); -if (size <PAGE_SIZE ) { - printk(KERN_ERR ERRP "partition size too small (%llx)\n", - size); +if (!size) { + printk(KERN_ERR ERRP "partition has size 0\n");return ERR_PTR (-EINVAL ); } }
Signature · 1 line
1.9.1
PATCH 2/2 mtd: cmdlinepart: convert printk() to pr_*()
This driver uses some custom macros for printing. Let's use the standard pr_fmt()/pr_{err,warn}().
--- drivers/mtd/cmdlinepart.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-)
drivers/mtd/cmdlinepart.c +11 -14
@@ -48,6 +48,8 @@* edb7312-nor:256k(ARMboot)ro,-(root);edb7312-nand:-(home) */ +#define pr_fmt (fmt) "mtd: " fmt +#include <linux/kernel.h> #include <linux/slab.h> #include <linux/mtd/mtd.h>
@@ -55,9 +57,6 @@#include <linux/module.h> #include <linux/err.h> -/* error message prefix */ -#define ERRP "mtd: " -/* debug macro */ #if 0 #define dbg (x) do { printk("DEBUG-CMDLINE-PART: "); printk x; } while(0)
@@ -116,7 +115,7 @@ static struct mtd_partition * newpart(char *s, }else { size =memparse (s, &s);if (!size) { - printk(KERN_ERR ERRP "partition has size 0\n"); +pr_err ("partition has size 0\n" );return ERR_PTR (-EINVAL ); } }
@@ -141,7 +140,7 @@ static struct mtd_partition * newpart(char *s, name = ++s; p =strchr (name, delim);if (!p) { - printk(KERN_ERR ERRP "no closing %c found in partition name\n", delim); +pr_err ("no closing %c found in partition name\n" , delim);return ERR_PTR (-EINVAL ); } name_len = p - name;
@@ -169,7 +168,7 @@ static struct mtd_partition * newpart(char *s,/* test if more partitions are following */ if (*s ==',' ) {if (size ==SIZE_REMAINING ) { - printk(KERN_ERR ERRP "no partitions allowed after a fill-up partition\n"); +pr_err ("no partitions allowed after a fill-up partition\n" );return ERR_PTR (-EINVAL ); }/* more partitions follow, parse them */
@@ -236,7 +235,7 @@ static int mtdpart_setup_real(char *s)/* fetch <mtd-id> */ p =strchr (s,':' );if (!p) { - printk(KERN_ERR ERRP "no mtd-id\n"); +pr_err ("no mtd-id\n" );return -EINVAL ; } mtd_id_len = p - mtd_id;
@@ -288,7 +287,7 @@ static int mtdpart_setup_real(char *s)/* does another spec follow? */ if (*s !=';' ) { - printk(KERN_ERR ERRP "bad character after partition (%c)\n", *s); +pr_err ("bad character after partition (%c)\n" , *s);return -EINVAL ; } s++;
@@ -342,17 +341,15 @@ static int parse_cmdline_partitions(struct mtd_info *master, part->parts[i].size = master->size - offset;if (offset + part->parts[i].size > master->size) { - printk(KERN_WARNING ERRP -"%s: partitioning exceeds flash size, truncating\n" , - part->mtd_id); +pr_warn ("%s: partitioning exceeds flash size, truncating\n" , + part->mtd_id); part->parts[i].size = master->size - offset; } offset += part->parts[i].size;if (part->parts[i].size ==0 ) { - printk(KERN_WARNING ERRP -"%s: skipping zero sized partition\n" , - part->mtd_id); +pr_warn ("%s: skipping zero sized partition\n" , + part->mtd_id); part->num_parts--;memmove (&part->parts[i], &part->parts[i +1 ],sizeof (*part->parts) * (part->num_parts - i));
Signature · 1 line
1.9.1
Quoted 13 lines · Brian Norris
I'm not sure why we have a
PAGE_SIZErestriction on this partition parser.If we really wanted the restriction, I would expect it to be a restriction for *all* parsers, so we'd move it to the MTD core
At any rate, while small partitions may not be useful (they'll often be smaller than the eraseblock size and therefore can only be used read-only), they still have use as a read-only partition.
This restriction is especially annoying because it aborts the entire MTD's cmdline parsing, leaving it unpartitioned.
Quoted 6 lines
So, let's kill the restriction and only check for zero-sized partitions, which I expect we don't want to allow.
Signed-off-by Brian Norris <[email protected]>---
Anyone know a good reason why this restriction should be here?
No comments :)
Applied both