lkml.org 
[lkml]   [2023]   [May]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 22/24] mtd: block2mtd: factor the early block device open logic into a helper
    Date
    Simply add_device a bit by splitting out the cumbersome early boot logic
    into a separate helper.

    Signed-off-by: Christoph Hellwig <hch@lst.de>
    ---
    drivers/mtd/devices/block2mtd.c | 53 +++++++++++++++++++--------------
    1 file changed, 30 insertions(+), 23 deletions(-)

    diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c
    index 4c21e9f13bead5..182eed68c75634 100644
    --- a/drivers/mtd/devices/block2mtd.c
    +++ b/drivers/mtd/devices/block2mtd.c
    @@ -215,34 +215,18 @@ static void block2mtd_free_device(struct block2mtd_dev *dev)
    kfree(dev);
    }

    -
    -static struct block2mtd_dev *add_device(char *devname, int erase_size,
    - char *label, int timeout)
    +static struct block_device *mdtblock_early_get_bdev(const char *devname,
    + fmode_t mode, int timeout, struct block2mtd_dev *dev)
    {
    + struct block_device *bdev = ERR_PTR(-ENODEV);
    #ifndef MODULE
    int i;
    -#endif
    - const fmode_t mode = FMODE_READ | FMODE_WRITE | FMODE_EXCL;
    - struct block_device *bdev;
    - struct block2mtd_dev *dev;
    - char *name;
    -
    - if (!devname)
    - return NULL;
    -
    - dev = kzalloc(sizeof(struct block2mtd_dev), GFP_KERNEL);
    - if (!dev)
    - return NULL;

    - /* Get a handle on the device */
    - bdev = blkdev_get_by_path(devname, mode, dev);
    -
    -#ifndef MODULE
    /*
    * We might not have the root device mounted at this point.
    * Try to resolve the device name by other means.
    */
    - for (i = 0; IS_ERR(bdev) && i <= timeout; i++) {
    + for (i = 0; i <= timeout; i++) {
    dev_t devt;

    if (i)
    @@ -254,12 +238,35 @@ static struct block2mtd_dev *add_device(char *devname, int erase_size,
    msleep(1000);
    wait_for_device_probe();

    - if (early_lookup_bdev(devname, &devt))
    - continue;
    - bdev = blkdev_get_by_dev(devt, mode, dev);
    + if (!early_lookup_bdev(devname, &devt)) {
    + bdev = blkdev_get_by_dev(devt, mode, dev);
    + if (!IS_ERR(bdev))
    + break;
    + }
    }
    #endif
    + return bdev;
    +}
    +
    +static struct block2mtd_dev *add_device(char *devname, int erase_size,
    + char *label, int timeout)
    +{
    + const fmode_t mode = FMODE_READ | FMODE_WRITE | FMODE_EXCL;
    + struct block_device *bdev;
    + struct block2mtd_dev *dev;
    + char *name;

    + if (!devname)
    + return NULL;
    +
    + dev = kzalloc(sizeof(struct block2mtd_dev), GFP_KERNEL);
    + if (!dev)
    + return NULL;
    +
    + /* Get a handle on the device */
    + bdev = blkdev_get_by_path(devname, mode, dev);
    + if (IS_ERR(bdev))
    + bdev = mdtblock_early_get_bdev(devname, mode, timeout, dev);
    if (IS_ERR(bdev)) {
    pr_err("error: cannot open device %s\n", devname);
    goto err_free_block2mtd;
    --
    2.39.2
    \
     
     \ /
      Last update: 2023-05-23 09:49    [W:4.447 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site