Loading block/blk-core.c +3 −5 Original line number Diff line number Diff line Loading @@ -110,14 +110,12 @@ void blk_queue_congestion_threshold(struct request_queue *q) * @bdev: device * * Locates the passed device's request queue and returns the address of its * backing_dev_info. This function can only be called if @bdev is opened * and the return value is never NULL. * backing_dev_info. The return value is never NULL however we may return * &noop_backing_dev_info if the bdev is not currently open. */ struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev) { struct request_queue *q = bdev_get_queue(bdev); return q->backing_dev_info; return bdev->bd_bdi; } EXPORT_SYMBOL(blk_get_backing_dev_info); Loading fs/block_dev.c +7 −0 Original line number Diff line number Diff line Loading @@ -628,6 +628,8 @@ static void bdev_evict_inode(struct inode *inode) spin_lock(&bdev_lock); list_del_init(&bdev->bd_list); spin_unlock(&bdev_lock); if (bdev->bd_bdi != &noop_backing_dev_info) bdi_put(bdev->bd_bdi); } static const struct super_operations bdev_sops = { Loading Loading @@ -730,6 +732,7 @@ struct block_device *bdget(dev_t dev) bdev->bd_contains = NULL; bdev->bd_super = NULL; bdev->bd_inode = inode; bdev->bd_bdi = &noop_backing_dev_info; bdev->bd_block_size = i_blocksize(inode); bdev->bd_part_count = 0; bdev->bd_invalidated = 0; Loading Loading @@ -1285,6 +1288,8 @@ 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); if (!partno) { ret = -ENXIO; Loading Loading @@ -1380,6 +1385,8 @@ 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; Loading include/linux/fs.h +1 −0 Original line number Diff line number Diff line Loading @@ -475,6 +475,7 @@ struct block_device { int bd_invalidated; struct gendisk * bd_disk; struct request_queue * bd_queue; struct backing_dev_info *bd_bdi; struct list_head bd_list; /* * Private data. You must have bd_claim'ed the block_device Loading Loading
block/blk-core.c +3 −5 Original line number Diff line number Diff line Loading @@ -110,14 +110,12 @@ void blk_queue_congestion_threshold(struct request_queue *q) * @bdev: device * * Locates the passed device's request queue and returns the address of its * backing_dev_info. This function can only be called if @bdev is opened * and the return value is never NULL. * backing_dev_info. The return value is never NULL however we may return * &noop_backing_dev_info if the bdev is not currently open. */ struct backing_dev_info *blk_get_backing_dev_info(struct block_device *bdev) { struct request_queue *q = bdev_get_queue(bdev); return q->backing_dev_info; return bdev->bd_bdi; } EXPORT_SYMBOL(blk_get_backing_dev_info); Loading
fs/block_dev.c +7 −0 Original line number Diff line number Diff line Loading @@ -628,6 +628,8 @@ static void bdev_evict_inode(struct inode *inode) spin_lock(&bdev_lock); list_del_init(&bdev->bd_list); spin_unlock(&bdev_lock); if (bdev->bd_bdi != &noop_backing_dev_info) bdi_put(bdev->bd_bdi); } static const struct super_operations bdev_sops = { Loading Loading @@ -730,6 +732,7 @@ struct block_device *bdget(dev_t dev) bdev->bd_contains = NULL; bdev->bd_super = NULL; bdev->bd_inode = inode; bdev->bd_bdi = &noop_backing_dev_info; bdev->bd_block_size = i_blocksize(inode); bdev->bd_part_count = 0; bdev->bd_invalidated = 0; Loading Loading @@ -1285,6 +1288,8 @@ 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); if (!partno) { ret = -ENXIO; Loading Loading @@ -1380,6 +1385,8 @@ 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; Loading
include/linux/fs.h +1 −0 Original line number Diff line number Diff line Loading @@ -475,6 +475,7 @@ struct block_device { int bd_invalidated; struct gendisk * bd_disk; struct request_queue * bd_queue; struct backing_dev_info *bd_bdi; struct list_head bd_list; /* * Private data. You must have bd_claim'ed the block_device Loading