lkml.org 
[lkml]   [2018]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.16 139/410] ubi: Fix race condition between ubi volume creation and udev
    3.16.57-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Clay McClure <clay@daemons.net>

    commit a51a0c8d213594bc094cb8e54aad0cb6d7f7b9a6 upstream.

    Similar to commit 714fb87e8bc0 ("ubi: Fix race condition between ubi
    device creation and udev"), we should make the volume active before
    registering it.

    Signed-off-by: Clay McClure <clay@daemons.net>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    [bwh: Backported to 3.16: adjust context]
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    drivers/mtd/ubi/vmt.c | 15 ++++++++++-----
    1 file changed, 10 insertions(+), 5 deletions(-)

    --- a/drivers/mtd/ubi/vmt.c
    +++ b/drivers/mtd/ubi/vmt.c
    @@ -308,6 +308,12 @@ int ubi_create_volume(struct ubi_device
    vol->last_eb_bytes = vol->usable_leb_size;
    }

    + /* Make volume "available" before it becomes accessible via sysfs */
    + spin_lock(&ubi->volumes_lock);
    + ubi->volumes[vol_id] = vol;
    + ubi->vol_count += 1;
    + spin_unlock(&ubi->volumes_lock);
    +
    /* Register character device for the volume */
    cdev_init(&vol->cdev, &ubi_vol_cdev_operations);
    vol->cdev.owner = THIS_MODULE;
    @@ -350,11 +356,6 @@ int ubi_create_volume(struct ubi_device
    if (err)
    goto out_sysfs;

    - spin_lock(&ubi->volumes_lock);
    - ubi->volumes[vol_id] = vol;
    - ubi->vol_count += 1;
    - spin_unlock(&ubi->volumes_lock);
    -
    ubi_volume_notify(ubi, vol, UBI_VOLUME_ADDED);
    self_check_volumes(ubi);
    return err;
    @@ -374,6 +375,10 @@ out_sysfs:
    out_cdev:
    cdev_del(&vol->cdev);
    out_mapping:
    + spin_lock(&ubi->volumes_lock);
    + ubi->volumes[vol_id] = NULL;
    + ubi->vol_count -= 1;
    + spin_unlock(&ubi->volumes_lock);
    if (do_free)
    kfree(vol->eba_tbl);
    out_acc:
    \
     
     \ /
      Last update: 2018-06-07 17:08    [W:2.355 / U:0.352 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site