On Mon, Apr 03, 2023 at 01:46:08PM +0800, Anand Jain wrote: > commit 50d281fc434cb8e2497f5e70a309ccca6b1a09f0 upstream. > > This fixes mkfs/mount/check failures due to race with systemd-udevd > scan. > > During the device scan initiated by systemd-udevd, other user space > EXCL operations such as mkfs, mount, or check may get blocked and result > in a "Device or resource busy" error. This is because the device > scan process opens the device with the EXCL flag in the kernel. > > Two reports were received: > > - btrfs/179 test case, where the fsck command failed with the -EBUSY > error > > - LTP pwritev03 test case, where mkfs.vfs failed with > the -EBUSY error, when mkfs.vfs tried to overwrite old btrfs filesystem > on the device. > > In both cases, fsck and mkfs (respectively) were racing with a > systemd-udevd device scan, and systemd-udevd won, resulting in the > -EBUSY error for fsck and mkfs. > > Reproducing the problem has been difficult because there is a very > small window during which these userspace threads can race to > acquire the exclusive device open. Even on the system where the problem > was observed, the problem occurrences were anywhere between 10 to 400 > iterations and chances of reproducing decreases with debug printk()s. > > However, an exclusive device open is unnecessary for the scan process, > as there are no write operations on the device during scan. Furthermore, > during the mount process, the superblock is re-read in the below > function call chain: > > btrfs_mount_root > btrfs_open_devices > open_fs_devices > btrfs_open_one_device > btrfs_get_bdev_and_sb > > So, to fix this issue, removes the FMODE_EXCL flag from the scan > operation, and add a comment. > > The case where mkfs may still write to the device and a scan is running, > the btrfs signature is not written at that time so scan will not > recognize such device. > > Reported-by: Sherry Yang <sherry.yang@xxxxxxxxxx> > Reported-by: kernel test robot <oliver.sang@xxxxxxxxx> > Link: https://lore.kernel.org/oe-lkp/202303170839.fdf23068-oliver.sang@xxxxxxxxx > CC: stable@xxxxxxxxxxxxxxx # 5.4+ > Signed-off-by: Anand Jain <anand.jain@xxxxxxxxxx> > Reviewed-by: David Sterba <dsterba@xxxxxxxx> > Signed-off-by: David Sterba <dsterba@xxxxxxxx> > Signed-off-by: Anand Jain <anand.jain@xxxxxxxxxx> > --- > > The upstream commit 50d281fc434cb8e2497f5e70a309ccca6b1a09f0 can be > applied without conflict to LTS stable-5.15.y and stable-6.1.y. However, > on LTS stable-5.4.y and stable-5.15.y, a conflict fix is required since > the zoned device support commits are not present in these versions. This > patch resolves the conflicts. Now queued up, thanks. greg k-h