lkml.org 
[lkml]   [2018]   [May]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 33/87] btrfs: fix crash when trying to resume balance without the resume flag
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

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

    From: Anand Jain <anand.jain@oracle.com>

    commit 02ee654d3a04563c67bfe658a05384548b9bb105 upstream.

    We set the BTRFS_BALANCE_RESUME flag in the btrfs_recover_balance()
    only, which isn't called during the remount. So when resuming from
    the paused balance we hit the bug:

    kernel: kernel BUG at fs/btrfs/volumes.c:3890!
    ::
    kernel: balance_kthread+0x51/0x60 [btrfs]
    kernel: kthread+0x111/0x130
    ::
    kernel: RIP: btrfs_balance+0x12e1/0x1570 [btrfs] RSP: ffffba7d0090bde8

    Reproducer:
    On a mounted filesystem:

    btrfs balance start --full-balance /btrfs
    btrfs balance pause /btrfs
    mount -o remount,ro /dev/sdb /btrfs
    mount -o remount,rw /dev/sdb /btrfs

    To fix this set the BTRFS_BALANCE_RESUME flag in
    btrfs_resume_balance_async().

    CC: stable@vger.kernel.org # 4.4+
    Signed-off-by: Anand Jain <anand.jain@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/btrfs/volumes.c | 9 +++++++++
    1 file changed, 9 insertions(+)

    --- a/fs/btrfs/volumes.c
    +++ b/fs/btrfs/volumes.c
    @@ -3966,6 +3966,15 @@ int btrfs_resume_balance_async(struct bt
    return 0;
    }

    + /*
    + * A ro->rw remount sequence should continue with the paused balance
    + * regardless of who pauses it, system or the user as of now, so set
    + * the resume flag.
    + */
    + spin_lock(&fs_info->balance_lock);
    + fs_info->balance_ctl->flags |= BTRFS_BALANCE_RESUME;
    + spin_unlock(&fs_info->balance_lock);
    +
    tsk = kthread_run(balance_kthread, fs_info, "btrfs-balance");
    return PTR_ERR_OR_ZERO(tsk);
    }

    \
     
     \ /
      Last update: 2018-05-22 00:32    [W:4.104 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site