summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2017-10-31 16:54:18 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-10-31 16:54:18 -0700
commit5954c329156a3fdedf2c6dceaf723d6a0baba599 (patch)
treecaaba64664ecb2258425c782400311afc40235ec
parentd4cc71806589379af6135c54c8b358c706eb84a7 (diff)
parentf4f6d3c0b02ede4283553dd2bdaa335204aed5f7 (diff)
Merge "block: Fix bdi assignment to bdev inode when racing with disk delete"
-rw-r--r--fs/block_dev.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/fs/block_dev.c b/fs/block_dev.c
index d3c296d4eb25..41f112beeefc 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1221,8 +1221,6 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
bdev->bd_disk = disk;
bdev->bd_queue = disk->queue;
bdev->bd_contains = bdev;
- if (bdev->bd_bdi == &noop_backing_dev_info)
- bdev->bd_bdi = bdi_get(disk->queue->backing_dev_info);
bdev->bd_inode->i_flags = disk->fops->direct_access ? S_DAX : 0;
if (!partno) {
@@ -1294,6 +1292,9 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
(bdev->bd_part->nr_sects % (PAGE_SIZE / 512)))
bdev->bd_inode->i_flags &= ~S_DAX;
}
+
+ if (bdev->bd_bdi == &noop_backing_dev_info)
+ bdev->bd_bdi = bdi_get(disk->queue->backing_dev_info);
} else {
if (bdev->bd_contains == bdev) {
ret = 0;
@@ -1325,8 +1326,6 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
bdev->bd_disk = NULL;
bdev->bd_part = NULL;
bdev->bd_queue = NULL;
- bdi_put(bdev->bd_bdi);
- bdev->bd_bdi = &noop_backing_dev_info;
if (bdev != bdev->bd_contains)
__blkdev_put(bdev->bd_contains, mode, 1);
bdev->bd_contains = NULL;