diff options
author | Jan Kara <jack@suse.cz> | 2017-04-12 12:24:29 +0200 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2017-04-20 20:09:55 +0200 |
commit | 13eec2363ef07c40dec84662ad17148f7a333a21 (patch) | |
tree | 6f59d9873290e05e088431317ca93c9a0186a89c | |
parent | fs: Provide infrastructure for dynamic BDIs in filesystems (diff) | |
download | linux-13eec2363ef07c40dec84662ad17148f7a333a21.tar.xz linux-13eec2363ef07c40dec84662ad17148f7a333a21.zip |
fs: Get proper reference for s_bdi
So far we just relied on block device to hold a bdi reference for us
while the filesystem is mounted. While that works perfectly fine, it is
a bit awkward that we have a pointer to a refcounted structure in the
superblock without proper reference. So make s_bdi hold a proper
reference to block device's BDI. No filesystem using mount_bdev()
actually changes s_bdi so this is safe and will make bdev filesystems
work the same way as filesystems needing to set up their private bdi.
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r-- | fs/super.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/fs/super.c b/fs/super.c index 0f51a437c269..e267d3a00144 100644 --- a/fs/super.c +++ b/fs/super.c @@ -1054,12 +1054,9 @@ static int set_bdev_super(struct super_block *s, void *data) { s->s_bdev = data; s->s_dev = s->s_bdev->bd_dev; + s->s_bdi = bdi_get(s->s_bdev->bd_bdi); + s->s_iflags |= SB_I_DYNBDI; - /* - * We set the bdi here to the queue backing, file systems can - * overwrite this in ->fill_super() - */ - s->s_bdi = bdev_get_queue(s->s_bdev)->backing_dev_info; return 0; } |