lkml.org 
[lkml]   [2023]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH v4 4/8] mtd: ubi: block: use notifier to create ubiblock
    ----- Ursprüngliche Mail -----
    > Von: "Daniel Golle" <daniel@makrotopia.org>
    > An: "Randy Dunlap" <rdunlap@infradead.org>, "Miquel Raynal" <miquel.raynal@bootlin.com>, "richard" <richard@nod.at>,
    > "Vignesh Raghavendra" <vigneshr@ti.com>, "Rob Herring" <robh+dt@kernel.org>, "Krzysztof Kozlowski"
    > <krzysztof.kozlowski+dt@linaro.org>, "Conor Dooley" <conor+dt@kernel.org>, "Daniel Golle" <daniel@makrotopia.org>,
    > "linux-mtd" <linux-mtd@lists.infradead.org>, "devicetree" <devicetree@vger.kernel.org>, "linux-kernel"
    > <linux-kernel@vger.kernel.org>
    > Gesendet: Freitag, 11. August 2023 03:37:31
    > Betreff: [PATCH v4 4/8] mtd: ubi: block: use notifier to create ubiblock

    > Use UBI_VOLUME_ADDED notification to create ubiblock device specified
    > on kernel cmdline or module parameter.
    > This makes thing more simple and has the advantage that ubiblock devices

    *things

    > on volumes which are not present at the time the ubi module is probed
    > will still be created.
    >
    > Suggested-by: Zhihao Cheng <chengzhihao1@huawei.com>
    > Signed-off-by: Daniel Golle <daniel@makrotopia.org>
    > ---
    > drivers/mtd/ubi/block.c | 152 ++++++++++++++++++++++------------------
    > 1 file changed, 84 insertions(+), 68 deletions(-)
    >
    > diff --git a/drivers/mtd/ubi/block.c b/drivers/mtd/ubi/block.c
    > index 69fa6fecb8494..e0618bbde3613 100644
    > --- a/drivers/mtd/ubi/block.c
    > +++ b/drivers/mtd/ubi/block.c
    > @@ -33,6 +33,7 @@
    > #include <linux/kernel.h>
    > #include <linux/list.h>
    > #include <linux/mutex.h>
    > +#include <linux/namei.h>
    > #include <linux/slab.h>
    > #include <linux/mtd/ubi.h>
    > #include <linux/blkdev.h>
    > @@ -65,10 +66,10 @@ struct ubiblock_pdu {
    > };
    >
    > /* Numbers of elements set in the @ubiblock_param array */
    > -static int ubiblock_devs __initdata;
    > +static int ubiblock_devs;
    >
    > /* MTD devices specification parameters */
    > -static struct ubiblock_param ubiblock_param[UBIBLOCK_MAX_DEVICES] __initdata;
    > +static struct ubiblock_param ubiblock_param[UBIBLOCK_MAX_DEVICES];
    >
    > struct ubiblock {
    > struct ubi_volume_desc *desc;
    > @@ -532,6 +533,85 @@ static int ubiblock_resize(struct ubi_volume_info *vi)
    > return 0;
    > }
    >
    > +static bool
    > +match_volume_desc(struct ubi_volume_info *vi, const char *name, int ubi_num,
    > int vol_id)
    > +{
    > + int err, len;
    > + struct path path;
    > + struct kstat stat;
    > +
    > + if (ubi_num == -1) {
    > + /* No ubi num, name must be a vol device path */
    > + err = kern_path(name, LOOKUP_FOLLOW, &path);
    > + if (err)
    > + return false;
    > +
    > + err = vfs_getattr(&path, &stat, STATX_TYPE, AT_STATX_SYNC_AS_STAT);
    > + path_put(&path);
    > + if (err)
    > + return false;
    > +
    > + if (!S_ISCHR(stat.mode))
    > + return false;
    > +
    > + if (vi->ubi_num != ubi_major2num(MAJOR(stat.rdev)))
    > + return false;
    > +
    > + if (vi->vol_id != MINOR(stat.rdev) - 1)
    > + return false;
    > +

    This is more or less an open coded ubi_open_volume_path().
    Please either split or adopt ubi_open_volume_path() to fit your use case.

    > + return true;
    > + }
    > +
    > + if (vol_id == -1) {
    > + if (vi->ubi_num != ubi_num)
    > + return false;
    > +
    > + len = strnlen(name, UBI_VOL_NAME_MAX + 1);
    > + if (len < 1 || vi->name_len != len)
    > + return false;
    > +
    > + if (strcmp(name, vi->name))
    > + return false;
    > +
    > + return true;
    > + }

    Same for ubi_open_volume_nm().

    Thanks,
    //richard

    \
     
     \ /
      Last update: 2023-10-03 20:46    [W:7.524 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site