lkml.org 
[lkml]   [2019]   [Jan]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 90/99] loop: Push loop_ctl_mutex down to loop_change_fd()
    Date
    4.19-stable review patch.  If anyone has any objections, please let me know.

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

    From: Jan Kara <jack@suse.cz>

    commit c371077000f4138ee3c15fbed50101ff24bdc91d upstream.

    Push loop_ctl_mutex down to loop_change_fd(). We will need this to be
    able to call loop_reread_partitions() without loop_ctl_mutex.

    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/block/loop.c | 22 +++++++++++-----------
    1 file changed, 11 insertions(+), 11 deletions(-)

    --- a/drivers/block/loop.c
    +++ b/drivers/block/loop.c
    @@ -692,19 +692,22 @@ static int loop_change_fd(struct loop_de
    struct file *file, *old_file;
    int error;

    + error = mutex_lock_killable_nested(&loop_ctl_mutex, 1);
    + if (error)
    + return error;
    error = -ENXIO;
    if (lo->lo_state != Lo_bound)
    - goto out;
    + goto out_unlock;

    /* the loop device has to be read-only */
    error = -EINVAL;
    if (!(lo->lo_flags & LO_FLAGS_READ_ONLY))
    - goto out;
    + goto out_unlock;

    error = -EBADF;
    file = fget(arg);
    if (!file)
    - goto out;
    + goto out_unlock;

    error = loop_validate_file(file, bdev);
    if (error)
    @@ -731,11 +734,13 @@ static int loop_change_fd(struct loop_de
    fput(old_file);
    if (lo->lo_flags & LO_FLAGS_PARTSCAN)
    loop_reread_partitions(lo, bdev);
    + mutex_unlock(&loop_ctl_mutex);
    return 0;

    - out_putf:
    +out_putf:
    fput(file);
    - out:
    +out_unlock:
    + mutex_unlock(&loop_ctl_mutex);
    return error;
    }

    @@ -1470,12 +1475,7 @@ static int lo_ioctl(struct block_device
    case LOOP_SET_FD:
    return loop_set_fd(lo, mode, bdev, arg);
    case LOOP_CHANGE_FD:
    - err = mutex_lock_killable_nested(&loop_ctl_mutex, 1);
    - if (err)
    - return err;
    - err = loop_change_fd(lo, bdev, arg);
    - mutex_unlock(&loop_ctl_mutex);
    - break;
    + return loop_change_fd(lo, bdev, arg);
    case LOOP_CLR_FD:
    return loop_clr_fd(lo);
    case LOOP_SET_STATUS:

    \
     
     \ /
      Last update: 2019-01-21 15:04    [W:4.041 / U:0.388 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site