From 38c898a1b6e2e714a859371ae6f91fe947715105 Mon Sep 17 00:00:00 2001 From: Thomas Lamprecht Date: Tue, 9 Nov 2021 12:53:44 +0100 Subject: [PATCH] Revert "block: remove the -ERESTARTSYS handling in blkdev_get_by_dev" Signed-off-by: Thomas Lamprecht Tested-by: Stoiko Ivanov --- ...ove-the-ERESTARTSYS-handling-in-blkd.patch | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 patches/kernel/0009-Revert-block-remove-the-ERESTARTSYS-handling-in-blkd.patch diff --git a/patches/kernel/0009-Revert-block-remove-the-ERESTARTSYS-handling-in-blkd.patch b/patches/kernel/0009-Revert-block-remove-the-ERESTARTSYS-handling-in-blkd.patch new file mode 100644 index 0000000..03d3b25 --- /dev/null +++ b/patches/kernel/0009-Revert-block-remove-the-ERESTARTSYS-handling-in-blkd.patch @@ -0,0 +1,40 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Thomas Lamprecht +Date: Tue, 9 Nov 2021 12:01:12 +0100 +Subject: [PATCH] Revert "block: remove the -ERESTARTSYS handling in + blkdev_get_by_dev" + +This reverts commit a8ed1a0607cfa5478ff6009539f44790c4d0956d. + +It breaks ZFS sometimes: +https://github.com/openzfs/zfs/issues/12301#issuecomment-873303739 + +Signed-off-by: Thomas Lamprecht +--- + fs/block_dev.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/fs/block_dev.c b/fs/block_dev.c +index e4a80bd4ddf1..4a14d28dd923 100644 +--- a/fs/block_dev.c ++++ b/fs/block_dev.c +@@ -1436,6 +1436,10 @@ struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode, void *holder) + if (ret) + return ERR_PTR(ret); + ++ /* ++ * If we lost a race with 'disk' being deleted, try again. See md.c. ++ */ ++retry: + bdev = blkdev_get_no_open(dev); + if (!bdev) + return ERR_PTR(-ENXIO); +@@ -1482,6 +1486,8 @@ struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode, void *holder) + disk_unblock_events(disk); + put_blkdev: + blkdev_put_no_open(bdev); ++ if (ret == -ERESTARTSYS) ++ goto retry; + return ERR_PTR(ret); + } + EXPORT_SYMBOL(blkdev_get_by_dev); -- 2.39.2