lkml.org 
[lkml]   [2014]   [Jan]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 125/144] GFS2: dont hold s_umount over blkdev_put
    Date
    3.12-stable review patch.  If anyone has any objections, please let me know.

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

    From: Steven Whitehouse <swhiteho@redhat.com>

    commit dfe5b9ad83a63180f358b27d1018649a27b394a9 upstream.

    This is a GFS2 version of Tejun's patch:
    4f331f01b9c43bf001d3ffee578a97a1e0633eac
    vfs: don't hold s_umount over close_bdev_exclusive() call

    In this case its blkdev_put itself that is the issue and this
    patch uses the same solution of dropping and retaking s_umount.

    Reported-by: Tejun Heo <tj@kernel.org>
    Reported-by: Al Viro <viro@ZenIV.linux.org.uk>
    Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/gfs2/ops_fstype.c | 12 +++++++++++-
    1 file changed, 11 insertions(+), 1 deletion(-)

    --- a/fs/gfs2/ops_fstype.c
    +++ b/fs/gfs2/ops_fstype.c
    @@ -1366,8 +1366,18 @@ static struct dentry *gfs2_mount(struct
    if (IS_ERR(s))
    goto error_bdev;

    - if (s->s_root)
    + if (s->s_root) {
    + /*
    + * s_umount nests inside bd_mutex during
    + * __invalidate_device(). blkdev_put() acquires
    + * bd_mutex and can't be called under s_umount. Drop
    + * s_umount temporarily. This is safe as we're
    + * holding an active reference.
    + */
    + up_write(&s->s_umount);
    blkdev_put(bdev, mode);
    + down_write(&s->s_umount);
    + }

    memset(&args, 0, sizeof(args));
    args.ar_quota = GFS2_QUOTA_DEFAULT;



    \
     
     \ /
      Last update: 2014-01-07 02:01    [W:4.104 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site