RE: [RESEND PATCH] block: cmdline-parser: add support for hidden disk space

From: Caizhiyong
Date: Mon Sep 28 2015 - 06:50:40 EST


Dear Shawn Lin:

The cmdline-parser is support skip some reserve disk space, or hidden some disk space.

See Documentation/block/cmdline-partition.txt

blkdevparts=<blkdev-def>[;<blkdev-def>]
<blkdev-def> := <blkdev-id>:<partdef>[,<partdef>]
<partdef> := <size>[@<offset>](part-name)

The "offset" is next partition start address, If your bootargs is 'blkdevparts=mmcblk0:1G(data0),1G@2G(data1),-;', you will reserve 1G between mmcblk0p1 and mmcblk0p2;

Looking forward to your feedback.
Best regards.
Cai Zhiyong.
http://www.huawei.com

> -----Original Message-----
> From: Shawn Lin [mailto:shawn.lin@xxxxxxxxxxxxxx]
> Sent: Monday, September 28, 2015 5:51 PM
> To: Jens Axboe
> Cc: Caizhiyong; linux-kernel@xxxxxxxxxxxxxxx; Shawn Lin
> Subject: [RESEND PATCH] block: cmdline-parser: add support for hidden disk
> space
>
> cmdline-partition now only support continuous disk space taken from
> cmdline. When we need to reserve a disk space, for instance, 100m between
> mmcblk0p1 and mmcblk0p2 for special use and wouldn't let kernel space
> realize this "disk hole", we add this patch to ship adding this kind of
> "disk hole" into the partition table. For any such cases, simply append
> "hidden" to the end of subpart which is need to be reserved.
>
> Signed-off-by: Shawn Lin <shawn.lin@xxxxxxxxxxxxxx>
>
> ---
>
> block/cmdline-parser.c | 12 +++++++++++-
> include/linux/cmdline-parser.h | 1 +
> 2 files changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/block/cmdline-parser.c b/block/cmdline-parser.c
> index 9dbc67e..fcca57d 100644
> --- a/block/cmdline-parser.c
> +++ b/block/cmdline-parser.c
> @@ -68,6 +68,11 @@ static int parse_subpart(struct cmdline_subpart
> **subpart, char *partdef)
> partdef += 2;
> }
>
> + if (!strncmp(partdef, "hidden", 6)) {
> + new_subpart->flags |= PF_HIDDEN;
> + partdef += 6;
> + }
> +
> *subpart = new_subpart;
> return 0;
> fail:
> @@ -128,7 +133,9 @@ static int parse_parts(struct cmdline_parts **parts,
> const char *bdevdef)
> if (ret)
> goto fail;
>
> - newparts->nr_subparts++;
> + if (!((*next_subpart)->flags & PF_HIDDEN))
> + newparts->nr_subparts++;
> +
> next_subpart = &(*next_subpart)->next_subpart;
> }
>
> @@ -245,6 +252,9 @@ int cmdline_parts_set(struct cmdline_parts *parts,
> sector_t disk_size,
>
> from += subpart->size;
>
> + if (subpart->flags & PF_HIDDEN)
> + continue;
> +
> if (add_part(slot, subpart, param))
> break;
> }
> diff --git a/include/linux/cmdline-parser.h b/include/linux/cmdline-parser.h
> index 2e6dce6..7c1cb3c 100644
> --- a/include/linux/cmdline-parser.h
> +++ b/include/linux/cmdline-parser.h
> @@ -14,6 +14,7 @@
> /* partition flags */
> #define PF_RDONLY 0x01 /* Device is read only */
> #define PF_POWERUP_LOCK 0x02 /* Always locked after reset
> */
> +#define PF_HIDDEN 0x04 /* Hidden from partition
> table */
>
> struct cmdline_subpart {
> char name[BDEVNAME_SIZE]; /* partition name, such as 'rootfs' */
> --
> 2.3.7
>

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/