• Anand Jain's avatar
    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
disk-io.c 128 KB