• Omar Sandoval's avatar
    Btrfs: lock superblock before remounting for rw subvol · 773cd04e
    Omar Sandoval authored
    Since commit 0723a047 ("btrfs: allow mounting btrfs subvolumes with
    different ro/rw options"), when mounting a subvolume read/write when
    another subvolume has previously been mounted read-only, we first do a
    remount. However, this should be done with the superblock locked, as per
    sync_filesystem():
    
    	/*
    	 * We need to be protected against the filesystem going from
    	 * r/o to r/w or vice versa.
    	 */
    	WARN_ON(!rwsem_is_locked(&sb->s_umount));
    
    This WARN_ON can easily be hit with:
    
    mkfs.btrfs -f /dev/vdb
    mount /dev/vdb /mnt
    btrfs subvol create /mnt/vol1
    btrfs subvol create /mnt/vol2
    umount /mnt
    mount -oro,subvol=/vol1 /dev/vdb /mnt
    mount -orw,subvol=/vol2 /dev/vdb /mnt2
    
    Fixes: 0723a047 ("btrfs: allow mounting btrfs subvolumes with different ro/rw options")
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.cz>
    Signed-off-by: default avatarOmar Sandoval <osandov@osandov.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    773cd04e
super.c 56.8 KB