Skip to content
  • Anand Jain's avatar
    96c2e067
    btrfs: skip devices without magic signature when mounting · 96c2e067
    Anand Jain authored
    
    
    Many things can happen after the device is scanned and before the device
    is mounted.  One such thing is losing the BTRFS_MAGIC on the device.
    If it happens we still won't free that device from the memory and cause
    the userland confusion.
    
    For example: As the BTRFS_IOC_DEV_INFO still carries the device path
    which does not have the BTRFS_MAGIC, 'btrfs fi show' still lists
    device which does not belong to the filesystem anymore:
    
      $ mkfs.btrfs -fq -draid1 -mraid1 /dev/sda /dev/sdb
      $ wipefs -a /dev/sdb
      # /dev/sdb does not contain magic signature
      $ mount -o degraded /dev/sda /btrfs
      $ btrfs fi show -m
      Label: none  uuid: 470ec6fb-646b-4464-b3cb-df1b26c527bd
    	  Total devices 2 FS bytes used 128.00KiB
    	  devid    1 size 3.00GiB used 571.19MiB path /dev/sda
    	  devid    2 size 3.00GiB used 571.19MiB path /dev/sdb
    
    We need to distinguish the missing signature and invalid superblock, so
    add a specific error code ENODATA for that. This also fixes failure of
    fstest btrfs/198.
    
    CC: stable@vger.kernel.org # 4.19+
    Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarAnand Jain <anand.jain@oracle.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    96c2e067
    btrfs: skip devices without magic signature when mounting
    Anand Jain authored
    
    
    Many things can happen after the device is scanned and before the device
    is mounted.  One such thing is losing the BTRFS_MAGIC on the device.
    If it happens we still won't free that device from the memory and cause
    the userland confusion.
    
    For example: As the BTRFS_IOC_DEV_INFO still carries the device path
    which does not have the BTRFS_MAGIC, 'btrfs fi show' still lists
    device which does not belong to the filesystem anymore:
    
      $ mkfs.btrfs -fq -draid1 -mraid1 /dev/sda /dev/sdb
      $ wipefs -a /dev/sdb
      # /dev/sdb does not contain magic signature
      $ mount -o degraded /dev/sda /btrfs
      $ btrfs fi show -m
      Label: none  uuid: 470ec6fb-646b-4464-b3cb-df1b26c527bd
    	  Total devices 2 FS bytes used 128.00KiB
    	  devid    1 size 3.00GiB used 571.19MiB path /dev/sda
    	  devid    2 size 3.00GiB used 571.19MiB path /dev/sdb
    
    We need to distinguish the missing signature and invalid superblock, so
    add a specific error code ENODATA for that. This also fixes failure of
    fstest btrfs/198.
    
    CC: stable@vger.kernel.org # 4.19+
    Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
    Signed-off-by: default avatarAnand Jain <anand.jain@oracle.com>
    Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
Loading