lkml.org 
[lkml]   [2020]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6/8] bdi: remove bdi_register_owner
    Date
    Split out a new bdi_set_owner helper to set the owner, and move the policy
    for creating the bdi name back into genhd.c, where it belongs.

    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    block/genhd.c | 8 +++++---
    include/linux/backing-dev.h | 2 +-
    mm/backing-dev.c | 12 ++----------
    3 files changed, 8 insertions(+), 14 deletions(-)

    diff --git a/block/genhd.c b/block/genhd.c
    index 06b642b23a07..7d10cfc38c70 100644
    --- a/block/genhd.c
    +++ b/block/genhd.c
    @@ -840,13 +840,15 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
    disk->flags |= GENHD_FL_SUPPRESS_PARTITION_INFO;
    disk->flags |= GENHD_FL_NO_PART_SCAN;
    } else {
    + struct backing_dev_info *bdi = disk->queue->backing_dev_info;
    + struct device *dev = disk_to_dev(disk);
    int ret;

    /* Register BDI before referencing it from bdev */
    - disk_to_dev(disk)->devt = devt;
    - ret = bdi_register_owner(disk->queue->backing_dev_info,
    - disk_to_dev(disk));
    + dev->devt = devt;
    + ret = bdi_register(bdi, "%u:%u", MAJOR(devt), MINOR(devt));
    WARN_ON(ret);
    + bdi_set_owner(bdi, dev);
    blk_register_region(disk_devt(disk), disk->minors, NULL,
    exact_match, exact_lock, disk);
    }
    diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h
    index c9ad5c3b7b4b..4098ed6ba6b4 100644
    --- a/include/linux/backing-dev.h
    +++ b/include/linux/backing-dev.h
    @@ -33,7 +33,7 @@ int bdi_register(struct backing_dev_info *bdi, const char *fmt, ...);
    __printf(2, 0)
    int bdi_register_va(struct backing_dev_info *bdi, const char *fmt,
    va_list args);
    -int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner);
    +void bdi_set_owner(struct backing_dev_info *bdi, struct device *owner);
    void bdi_unregister(struct backing_dev_info *bdi);

    struct backing_dev_info *bdi_alloc_node(gfp_t gfp_mask, int node_id);
    diff --git a/mm/backing-dev.c b/mm/backing-dev.c
    index eb6b51e49d11..bb993f99d424 100644
    --- a/mm/backing-dev.c
    +++ b/mm/backing-dev.c
    @@ -977,20 +977,12 @@ int bdi_register(struct backing_dev_info *bdi, const char *fmt, ...)
    }
    EXPORT_SYMBOL(bdi_register);

    -int bdi_register_owner(struct backing_dev_info *bdi, struct device *owner)
    +void bdi_set_owner(struct backing_dev_info *bdi, struct device *owner)
    {
    - int rc;
    -
    - rc = bdi_register(bdi, "%u:%u", MAJOR(owner->devt), MINOR(owner->devt));
    - if (rc)
    - return rc;
    - /* Leaking owner reference... */
    - WARN_ON(bdi->owner);
    + WARN_ON_ONCE(bdi->owner);
    bdi->owner = owner;
    get_device(owner);
    - return 0;
    }
    -EXPORT_SYMBOL(bdi_register_owner);

    /*
    * Remove bdi from bdi_list, and ensure that it is no longer visible
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-04-16 18:57    [W:2.967 / U:0.428 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site