diff options
| author | Linux Build Service Account <lnxbuild@quicinc.com> | 2017-10-31 16:54:18 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-10-31 16:54:18 -0700 |
| commit | 5954c329156a3fdedf2c6dceaf723d6a0baba599 (patch) | |
| tree | caaba64664ecb2258425c782400311afc40235ec | |
| parent | d4cc71806589379af6135c54c8b358c706eb84a7 (diff) | |
| parent | f4f6d3c0b02ede4283553dd2bdaa335204aed5f7 (diff) | |
Merge "block: Fix bdi assignment to bdev inode when racing with disk delete"
| -rw-r--r-- | fs/block_dev.c | 7 |
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; |
