Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 03fb0bce authored by Miklos Szeredi's avatar Miklos Szeredi Committed by Linus Torvalds
Browse files

fuse: fix bdi naming conflict



Fuse allocates a separate bdi for each filesystem, and registers them
in sysfs with "MAJOR:MINOR" of sb->s_dev (st_dev).  This works fine for
anon devices normally used by fuse, but can conflict with an already
registered BDI for "fuseblk" filesystems, where sb->s_dev represents a
real block device.  In particularl this happens if a non-partitioned
device is being mounted.

Fix by registering with a different name for "fuseblk" filesystems.

Thanks to Ioan Ionita for the bug report.

Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
Reported-by: default avatarIoan Ionita <opslynx@gmail.com>
Tested-by: default avatarIoan Ionita <opslynx@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 42172d75
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -14,6 +14,10 @@ MAJOR:MINOR
	non-block filesystems which provide their own BDI, such as NFS
	and FUSE.

MAJOR:MINOR-fuseblk

	Value of st_dev on fuseblk filesystems.

default

	The default backing dev, used for non-block device backed
+6 −1
Original line number Diff line number Diff line
@@ -488,7 +488,12 @@ static struct fuse_conn *new_conn(struct super_block *sb)
		err = bdi_init(&fc->bdi);
		if (err)
			goto error_kfree;
		if (sb->s_bdev) {
			err = bdi_register(&fc->bdi, NULL, "%u:%u-fuseblk",
					   MAJOR(fc->dev), MINOR(fc->dev));
		} else {
			err = bdi_register_dev(&fc->bdi, fc->dev);
		}
		if (err)
			goto error_bdi_destroy;
		/*