summary refs log tree commit diff
path: root/fs/fuse/inode.c
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2017-05-16 12:22:22 +0200
committerJens Axboe <axboe@fb.com>2017-05-17 08:10:57 -0600
commit69c8ebf83213e6165b13d94ec599b861467ee2dc (patch)
tree60335bc4dc45207799d302bc098a3d34b71911e3 /fs/fuse/inode.c
parentd3f7c35c1ab33e6aa035407fed38d9149858bed7 (diff)
downloadlinux-69c8ebf83213e6165b13d94ec599b861467ee2dc.tar.gz
fuseblk: Fix warning in super_setup_bdi_name()
Commit 5f7f7543f52e "fuse: Convert to separately allocated bdi" didn't
properly handle fuseblk filesystem. When fuse_bdi_init() is called for
that filesystem type, sb->s_bdi is already initialized (by
set_bdev_super()) to point to block device's bdi and consequently
super_setup_bdi_name() complains about this fact when reseting bdi to
the private one.

Fix the problem by properly dropping bdi reference in fuse_bdi_init()
before creating a private bdi in super_setup_bdi_name().

Fixes: 5f7f7543f52e ("fuse: Convert to separately allocated bdi")
Reported-by: Rakesh Pandit <rakesh@tuxera.com>
Tested-by: Rakesh Pandit <rakesh@tuxera.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'fs/fuse/inode.c')
-rw-r--r--fs/fuse/inode.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
index 73cf05135252..9da1a61276d1 100644
--- a/fs/fuse/inode.c
+++ b/fs/fuse/inode.c
@@ -972,8 +972,15 @@ static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb)
 	int err;
 	char *suffix = "";
 
-	if (sb->s_bdev)
+	if (sb->s_bdev) {
 		suffix = "-fuseblk";
+		/*
+		 * sb->s_bdi points to blkdev's bdi however we want to redirect
+		 * it to our private bdi...
+		 */
+		bdi_put(sb->s_bdi);
+		sb->s_bdi = &noop_backing_dev_info;
+	}
 	err = super_setup_bdi_name(sb, "%u:%u%s", MAJOR(fc->dev),
 				   MINOR(fc->dev), suffix);
 	if (err)