lkml.org 
[lkml]   [2008]   [May]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRe: BISECTED REGRESSION: 2.6.26-rc2: FUSE changes break mount of ntfs-3g
From
Date
> > 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@suse.cz>

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@suse.cz>
---
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



\
 
 \ /
  Last update: 2008-05-19 21:35    [W:0.038 / U:0.036 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site