Patchwork ubifs: allow more than one volume to be mounted

login
register
mail settings
Submitter Daniel Mack
Date July 2, 2009, 3:15 p.m.
Message ID <1246547747-13366-1-git-send-email-daniel@caiaq.de>
Download mbox | patch
Permalink /patch/29405/
State New
Headers show

Comments

Daniel Mack - July 2, 2009, 3:15 p.m.
UBIFS uses a bdi device per volume, but does not care to hand out unique
names to each of them. This causes an error when trying to mount more
than one volumes.

[  239.277407] kobject_add_internal failed for ubifs with -EEXIST, don't try to register things with the same name in the same directory.
[  239.289618] [<c002a45c>] (unwind_backtrace+0x0/0xdc) from [<c0160628>] (kobject_add_internal+0x188/0x1b8)
[  239.299445] [<c0160628>] (kobject_add_internal+0x188/0x1b8) from [<c01607d8>] (kobject_add+0x48/0x5c)
[  239.308896] [<c01607d8>] (kobject_add+0x48/0x5c) from [<c019d96c>] (device_add+0xac/0x510)
[  239.317392] [<c019d96c>] (device_add+0xac/0x510) from [<c019de58>] (device_create_vargs+0x70/0xa4)
[  239.326589] [<c019de58>] (device_create_vargs+0x70/0xa4) from [<c0073138>] (bdi_register+0x44/0x64)
[  239.335854] [<c0073138>] (bdi_register+0x44/0x64) from [<c01249f0>] (ubifs_get_sb+0x3c8/0x10cc)
[  239.344769] [<c01249f0>] (ubifs_get_sb+0x3c8/0x10cc) from [<c008b054>] (vfs_kern_mount+0x50/0xa8)
[  239.353867] [<c008b054>] (vfs_kern_mount+0x50/0xa8) from [<c008b0f0>] (do_kern_mount+0x34/0xd0)
[  239.362799] [<c008b0f0>] (do_kern_mount+0x34/0xd0) from [<c009f7b4>] (do_mount+0x644/0x6b4)
[  239.371377] [<c009f7b4>] (do_mount+0x644/0x6b4) from [<c009f8a8>] (sys_mount+0x84/0xcc)
[  239.379538] [<c009f8a8>] (sys_mount+0x84/0xcc) from [<c0025e80>] (ret_fast_syscall+0x0/0x2c)

Append the UBI volume and device ID to avoid that.

Signed-off-by: Daniel Mack <daniel@caiaq.de>
Cc: Artem Bityutskiy <dedekind@infradead.org>
Cc: Adrian Hunter <ext-adrian.hunter@nokia.com>
Cc: linux-mtd@lists.infradead.org
---
 fs/ubifs/super.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
Artem Bityutskiy - July 2, 2009, 3:17 p.m.
Daniel Mack wrote:
> UBIFS uses a bdi device per volume, but does not care to hand out unique
> names to each of them. This causes an error when trying to mount more
> than one volumes.
> 
> [  239.277407] kobject_add_internal failed for ubifs with -EEXIST, don't try to register things with the same name in the same directory.
> [  239.289618] [<c002a45c>] (unwind_backtrace+0x0/0xdc) from [<c0160628>] (kobject_add_internal+0x188/0x1b8)
> [  239.299445] [<c0160628>] (kobject_add_internal+0x188/0x1b8) from [<c01607d8>] (kobject_add+0x48/0x5c)
> [  239.308896] [<c01607d8>] (kobject_add+0x48/0x5c) from [<c019d96c>] (device_add+0xac/0x510)
> [  239.317392] [<c019d96c>] (device_add+0xac/0x510) from [<c019de58>] (device_create_vargs+0x70/0xa4)
> [  239.326589] [<c019de58>] (device_create_vargs+0x70/0xa4) from [<c0073138>] (bdi_register+0x44/0x64)
> [  239.335854] [<c0073138>] (bdi_register+0x44/0x64) from [<c01249f0>] (ubifs_get_sb+0x3c8/0x10cc)
> [  239.344769] [<c01249f0>] (ubifs_get_sb+0x3c8/0x10cc) from [<c008b054>] (vfs_kern_mount+0x50/0xa8)
> [  239.353867] [<c008b054>] (vfs_kern_mount+0x50/0xa8) from [<c008b0f0>] (do_kern_mount+0x34/0xd0)
> [  239.362799] [<c008b0f0>] (do_kern_mount+0x34/0xd0) from [<c009f7b4>] (do_mount+0x644/0x6b4)
> [  239.371377] [<c009f7b4>] (do_mount+0x644/0x6b4) from [<c009f8a8>] (sys_mount+0x84/0xcc)
> [  239.379538] [<c009f8a8>] (sys_mount+0x84/0xcc) from [<c0025e80>] (ret_fast_syscall+0x0/0x2c)
> 
> Append the UBI volume and device ID to avoid that.
> 
> Signed-off-by: Daniel Mack <daniel@caiaq.de>
> Cc: Artem Bityutskiy <dedekind@infradead.org>
> Cc: Adrian Hunter <ext-adrian.hunter@nokia.com>
> Cc: linux-mtd@lists.infradead.org

Thanks, I'll look at this tomorrow and try to sent it to Linus
ASAP.
Daniel Mack - July 2, 2009, 3:27 p.m.
On Thu, Jul 02, 2009 at 06:17:45PM +0300, Artem Bityutskiy wrote:
> Daniel Mack wrote:
>> UBIFS uses a bdi device per volume, but does not care to hand out unique
>> names to each of them. This causes an error when trying to mount more
>> than one volumes.
>>
>> [  239.277407] kobject_add_internal failed for ubifs with -EEXIST, don't try to register things with the same name in the same directory.
>> [  239.289618] [<c002a45c>] (unwind_backtrace+0x0/0xdc) from [<c0160628>] (kobject_add_internal+0x188/0x1b8)
>> [  239.299445] [<c0160628>] (kobject_add_internal+0x188/0x1b8) from [<c01607d8>] (kobject_add+0x48/0x5c)
>> [  239.308896] [<c01607d8>] (kobject_add+0x48/0x5c) from [<c019d96c>] (device_add+0xac/0x510)
>> [  239.317392] [<c019d96c>] (device_add+0xac/0x510) from [<c019de58>] (device_create_vargs+0x70/0xa4)
>> [  239.326589] [<c019de58>] (device_create_vargs+0x70/0xa4) from [<c0073138>] (bdi_register+0x44/0x64)
>> [  239.335854] [<c0073138>] (bdi_register+0x44/0x64) from [<c01249f0>] (ubifs_get_sb+0x3c8/0x10cc)
>> [  239.344769] [<c01249f0>] (ubifs_get_sb+0x3c8/0x10cc) from [<c008b054>] (vfs_kern_mount+0x50/0xa8)
>> [  239.353867] [<c008b054>] (vfs_kern_mount+0x50/0xa8) from [<c008b0f0>] (do_kern_mount+0x34/0xd0)
>> [  239.362799] [<c008b0f0>] (do_kern_mount+0x34/0xd0) from [<c009f7b4>] (do_mount+0x644/0x6b4)
>> [  239.371377] [<c009f7b4>] (do_mount+0x644/0x6b4) from [<c009f8a8>] (sys_mount+0x84/0xcc)
>> [  239.379538] [<c009f8a8>] (sys_mount+0x84/0xcc) from [<c0025e80>] (ret_fast_syscall+0x0/0x2c)
>>
>> Append the UBI volume and device ID to avoid that.
>>
>> Signed-off-by: Daniel Mack <daniel@caiaq.de>
>> Cc: Artem Bityutskiy <dedekind@infradead.org>
>> Cc: Adrian Hunter <ext-adrian.hunter@nokia.com>
>> Cc: linux-mtd@lists.infradead.org
>
> Thanks, I'll look at this tomorrow and try to sent it to Linus
> ASAP.

Btw - Adrian Hunter's email in MAINTAINERS seems to be outdated:

<ext-adrian.hunter@nokia.com>: host mx1.nokia.com[192.100.122.228] said:
550 5.1.1 <ext-adrian.hunter@nokia.com>... User unknown (in reply to RCPT TO command)
Artem Bityutskiy - July 2, 2009, 3:34 p.m.
On Thu, 2009-07-02 at 17:27 +0200, Daniel Mack wrote:
> On Thu, Jul 02, 2009 at 06:17:45PM +0300, Artem Bityutskiy wrote:
> > Daniel Mack wrote:
> >> UBIFS uses a bdi device per volume, but does not care to hand out unique
> >> names to each of them. This causes an error when trying to mount more
> >> than one volumes.
> >>
> >> [  239.277407] kobject_add_internal failed for ubifs with -EEXIST, don't try to register things with the same name in the same directory.
> >> [  239.289618] [<c002a45c>] (unwind_backtrace+0x0/0xdc) from [<c0160628>] (kobject_add_internal+0x188/0x1b8)
> >> [  239.299445] [<c0160628>] (kobject_add_internal+0x188/0x1b8) from [<c01607d8>] (kobject_add+0x48/0x5c)
> >> [  239.308896] [<c01607d8>] (kobject_add+0x48/0x5c) from [<c019d96c>] (device_add+0xac/0x510)
> >> [  239.317392] [<c019d96c>] (device_add+0xac/0x510) from [<c019de58>] (device_create_vargs+0x70/0xa4)
> >> [  239.326589] [<c019de58>] (device_create_vargs+0x70/0xa4) from [<c0073138>] (bdi_register+0x44/0x64)
> >> [  239.335854] [<c0073138>] (bdi_register+0x44/0x64) from [<c01249f0>] (ubifs_get_sb+0x3c8/0x10cc)
> >> [  239.344769] [<c01249f0>] (ubifs_get_sb+0x3c8/0x10cc) from [<c008b054>] (vfs_kern_mount+0x50/0xa8)
> >> [  239.353867] [<c008b054>] (vfs_kern_mount+0x50/0xa8) from [<c008b0f0>] (do_kern_mount+0x34/0xd0)
> >> [  239.362799] [<c008b0f0>] (do_kern_mount+0x34/0xd0) from [<c009f7b4>] (do_mount+0x644/0x6b4)
> >> [  239.371377] [<c009f7b4>] (do_mount+0x644/0x6b4) from [<c009f8a8>] (sys_mount+0x84/0xcc)
> >> [  239.379538] [<c009f8a8>] (sys_mount+0x84/0xcc) from [<c0025e80>] (ret_fast_syscall+0x0/0x2c)
> >>
> >> Append the UBI volume and device ID to avoid that.
> >>
> >> Signed-off-by: Daniel Mack <daniel@caiaq.de>
> >> Cc: Artem Bityutskiy <dedekind@infradead.org>
> >> Cc: Adrian Hunter <ext-adrian.hunter@nokia.com>
> >> Cc: linux-mtd@lists.infradead.org
> >
> > Thanks, I'll look at this tomorrow and try to sent it to Linus
> > ASAP.
> 
> Btw - Adrian Hunter's email in MAINTAINERS seems to be outdated:
> 
> <ext-adrian.hunter@nokia.com>: host mx1.nokia.com[192.100.122.228] said:
> 550 5.1.1 <ext-adrian.hunter@nokia.com>... User unknown (in reply to RCPT TO command)

Ok, I'll fix that too, thanks. Nowadays it is: adrian.hunter@nokia.com
Artem Bityutskiy - July 3, 2009, 6:48 a.m.
On Thu, 2009-07-02 at 17:15 +0200, Daniel Mack wrote:
> UBIFS uses a bdi device per volume, but does not care to hand out unique
> names to each of them. This causes an error when trying to mount more
> than one volumes.

I've simplified your patch a little and pushed to ubifs-2.6.git. Also
amended the MAINTAINERS file:

http://git.infradead.org/ubifs-2.6.git?a=commit;h=72093a661c0bd06d4843ac0ef8b909645483031b
http://git.infradead.org/ubifs-2.6.git?a=commit;h=42feebfc9af4ab505cacb0ea20bef35957ef2676

I'll send this fix to Linus in few days.

Patch

diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
index 79fad43..fca5ebe 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -1910,6 +1910,7 @@  static struct ubi_volume_desc *open_ubi(const char *name, int mode)
 static int ubifs_fill_super(struct super_block *sb, void *data, int silent)
 {
 	struct ubi_volume_desc *ubi = sb->s_fs_info;
+	struct ubi_volume_info ubi_info;
 	struct ubifs_info *c;
 	struct inode *root;
 	int err;
@@ -1975,7 +1976,9 @@  static int ubifs_fill_super(struct super_block *sb, void *data, int silent)
 	err  = bdi_init(&c->bdi);
 	if (err)
 		goto out_close;
-	err = bdi_register(&c->bdi, NULL, "ubifs");
+	ubi_get_volume_info(ubi, &ubi_info);
+	err = bdi_register(&c->bdi, NULL, "ubifs_%d_%d",
+					ubi_info.ubi_num, ubi_info.vol_id);
 	if (err)
 		goto out_bdi;