[PATCH] linux: add in labels for block2mtd
Daniel Golle
daniel at makrotopia.org
Tue Nov 29 07:32:50 PST 2022
On Tue, Nov 29, 2022 at 10:23:48AM -0500, Peter Naulls wrote:
>
> This backports the upstream label feature in block2mtd to the 5.10.x kernel
> in 22.03:
>
> https://github.com/torvalds/linux/blob/master/drivers/mtd/devices/block2mtd.c
Where are we using block2mtd and why?
I'm not against backporting this, but I don't understand why it is
needed or where we are even using block2mtd.
> --- a/drivers/mtd/devices/block2mtd.c 2022-11-29 07:35:32.382695321 -0500
> +++ b/drivers/mtd/devices/block2mtd.c 2022-11-29 08:04:27.406754981 -0500
> @@ -31,6 +31,9 @@
> #include <linux/slab.h>
> #include <linux/major.h>
>
> +/* Maximum number of comma-separated items in the 'block2mtd=' parameter */
> +#define BLOCK2MTD_PARAM_MAX_COUNT 3
> +
> /* Info for the block device */
> struct block2mtd_dev {
> struct list_head list;
> @@ -214,7 +217,7 @@
>
>
> static struct block2mtd_dev *add_device(char *devname, int erase_size,
> - int timeout)
> + char *label, int timeout)
> {
> #ifndef MODULE
> int i;
> @@ -278,7 +281,10 @@
>
> /* Setup the MTD structure */
> /* make the name contain the block device in */
> - name = kasprintf(GFP_KERNEL, "block2mtd: %s", devname);
> + if (!label)
> + name = kasprintf(GFP_KERNEL, "block2mtd: %s", devname);
> + else
> + name = kstrdup(label, GFP_KERNEL);
> if (!name)
> goto err_destroy_mutex;
>
> @@ -305,7 +311,7 @@
> list_add(&dev->list, &blkmtd_device_list);
> pr_info("mtd%d: [%s] erase_size = %dKiB [%d]\n",
> dev->mtd.index,
> - dev->mtd.name + strlen("block2mtd: "),
> + label ? label : dev->mtd.name + strlen("block2mtd: "),
> dev->mtd.erasesize >> 10, dev->mtd.erasesize);
> return dev;
>
> @@ -381,8 +387,9 @@
> /* 80 for device, 12 for erase size, 80 for name, 8 for timeout */
> char buf[80 + 12 + 80 + 8];
> char *str = buf;
> - char *token[2];
> + char *token[BLOCK2MTD_PARAM_MAX_COUNT];
> char *name;
> + char *label = NULL;
> size_t erase_size = PAGE_SIZE;
> unsigned long timeout = MTD_DEFAULT_TIMEOUT;
> int i, ret;
> @@ -395,7 +402,7 @@
> strcpy(str, val);
> kill_final_newline(str);
>
> - for (i = 0; i < 2; i++)
> + for (i = 0; i < BLOCK2MTD_PARAM_MAX_COUNT; i++)
> token[i] = strsep(&str, ",");
>
> if (str) {
> @@ -414,7 +421,8 @@
> return 0;
> }
>
> - if (token[1]) {
> + /* Optional argument when custom label is used */
> + if (token[1] && strlen(token[1])) {
> ret = parse_num(&erase_size, token[1]);
> if (ret) {
> pr_err("illegal erase size\n");
> @@ -422,7 +430,12 @@
> }
> }
>
> - add_device(name, erase_size, timeout);
> + if (token[2]) {
> + label = token[2];
> + pr_info("Using custom MTD label '%s' for dev %s\n", label, name);
> + }
> +
> + add_device(name, erase_size, label, timeout);
>
> return 0;
> }
> @@ -448,7 +461,7 @@
> the device (even kmalloc() fails). Deter that work to
> block2mtd_setup2(). */
>
> - strlcpy(block2mtd_paramline, val, sizeof(block2mtd_paramline));
> + strscpy(block2mtd_paramline, val, sizeof(block2mtd_paramline));
>
> return 0;
> #endif
> @@ -456,7 +469,7 @@
>
>
> module_param_call(block2mtd, block2mtd_setup, NULL, NULL, 0200);
> -MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>]\"");
> +MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,[<erasesize>][,<label>]]\"");
>
> static int __init block2mtd_init(void)
> {
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list