]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commit
btrfs: skip devices without magic signature when mounting
authorAnand Jain <anand.jain@oracle.com>
Wed, 30 Sep 2020 13:09:52 +0000 (21:09 +0800)
committerDavid Sterba <dsterba@suse.com>
Wed, 7 Oct 2020 10:17:59 +0000 (12:17 +0200)
commit96c2e067ed3e3e004580a643c76f58729206b829
treeb5a7bb05bc4a213bf74aef1d33b4e00b2041e472
parent572c83acdcdafeb04e70aa46be1fa539310be20c
btrfs: skip devices without magic signature when mounting

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: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c
fs/btrfs/volumes.c