• Josef Bacik's avatar
    btrfs: do not initialize dev replace for bad dev root · 3cb89497
    Josef Bacik authored
    While helping Neal fix his broken file system I added a debug patch to
    catch if we were calling btrfs_search_slot with a NULL root, and this
    stack trace popped:
    
      we tried to search with a NULL root
      CPU: 0 PID: 1760 Comm: mount Not tainted 5.11.0-155.nealbtrfstest.1.fc34.x86_64 #1
      Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 07/22/2020
      Call Trace:
       dump_stack+0x6b/0x83
       btrfs_search_slot.cold+0x11/0x1b
       ? btrfs_init_dev_replace+0x36/0x450
       btrfs_init_dev_replace+0x71/0x450
       open_ctree+0x1054/0x1610
       btrfs_mount_root.cold+0x13/0xfa
       legacy_get_tree+0x27/0x40
       vfs_get_tree+0x25/0xb0
       vfs_kern_mount.part.0+0x71/0xb0
       btrfs_mount+0x131/0x3d0
       ? legacy_get_tree+0x27/0x40
       ? btrfs_show_options+0x640/0x640
       legacy_get_tree+0x27/0x40
       vfs_get_tree+0x25/0xb0
       path_mount+0x441/0xa80
       __x64_sys_mount+0xf4/0x130
       do_syscall_64+0x33/0x40
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
      RIP: 0033:0x7f644730352e
    
    Fix this by not starting the device replace stuff if we do not have a
    NULL dev root.
    Reported-by: default avatarNeal Gompa <ngompa13@gmail.com>
    CC: stable@vger.kernel.org # 5.11+
    Signed-off-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    3cb89497
dev-replace.c 38.4 KB