Re: BISECTED REGRESSION: 2.6.26-rc2: FUSE changes break mount of ntfs-3g
From: Miklos Szeredi
Date: Mon May 19 2008 - 15:33:01 EST
> > Thanks. I've tried to reproduce this bug, but was unable to.
> >
> > That patch looks OK to me, however there's something very weird going
> > on if sysfs_add_one() gets called with an already existing name.
> >
> > Could you please post the full dmesg output? That should include a
> > line like
> >
> > sysfs: duplicate filename 'foobar' can not be created
> >
> > What are the exact commands that you perform (or contents of
> > /etc/fstab, etc. that might be relevant) to tirgger this bug?
> >
>
> I think you were unable to reproduce it because i just figured out
> that it only occurs on a raid-0 partition managed by dmraid.
> Ex:
>
> Mounting the non-raid:
> /dev/sdb3 10913 18242 58878225 7 HPFS/NTFS
> root@ops-desktop:~# mount /dev/sdb3 /next
> root@ops-desktop:~#
>
> The raid-0:
> /dev/mapper/isw_fjcgajage_raid3 4346 29841
> 204796620 7 HPFS/NTFS
> root@ops-desktop:~# mount /dev/mapper/isw_fjcgajage_raid3 /new
> fuse: mount failed: Cannot allocate memory
>
> NOTE that I've tried mounting other raid-0 NTFS partitions. Same
> failure occurred. So it doesn't seem to be isolated to one partition.
> RAID is the only common thing.
>
> I've attached the full dmesg. Hope it helps.
Thanks!
The problem seems to be that if a device isn't partitioned (and the
raid-0 device isn't), then fuse will register its own BDI with the
same name as the one belonging to the underlying device.
Here's a patch that should fix it. Can you please confirm?
Thanks,
Miklos
Subject: fuse: fix bdi naming conflict
From: Miklos Szeredi <mszeredi@xxxxxxx>
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: Miklos Szeredi <mszeredi@xxxxxxx>
---
Documentation/ABI/testing/sysfs-class-bdi | 4 ++++
fs/fuse/inode.c | 7 ++++++-
2 files changed, 10 insertions(+), 1 deletion(-)
Index: linux-2.6/fs/fuse/inode.c
===================================================================
--- linux-2.6.orig/fs/fuse/inode.c 2008-05-16 16:34:31.000000000 +0200
+++ linux-2.6/fs/fuse/inode.c 2008-05-19 20:54:53.000000000 +0200
@@ -488,7 +488,12 @@ static struct fuse_conn *new_conn(struct
err = bdi_init(&fc->bdi);
if (err)
goto error_kfree;
- err = bdi_register_dev(&fc->bdi, fc->dev);
+ 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;
/*
Index: linux-2.6/Documentation/ABI/testing/sysfs-class-bdi
===================================================================
--- linux-2.6.orig/Documentation/ABI/testing/sysfs-class-bdi 2008-05-14 12:48:03.000000000 +0200
+++ linux-2.6/Documentation/ABI/testing/sysfs-class-bdi 2008-05-19 20:59:59.000000000 +0200
@@ -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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/