lkml.org 
[lkml]   [2002]   [Aug]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectSemaphore block in fs/super.c mount_root
Date
I have been trying to get a jffs2 file system to mount as root with kernel
2.4.18.
If I mount it as a "normal" mount point everything is OK, but if I use it as
a root device it blocks forever.
I have traced it down to the function mount_root in fs/super.c where I can
see that there is an up_read(&sb->s_umount) (line 1061) when we get the
super block directly just before the goto mount_it.
But where my jffs2 superblock gets read (line 1073) there is no such
up_read() and by tracing the calls from blkdev_put() (line 1077) I'll find
an down_read(&s->s_umount) in the function get_super() (line 518 same file).

By putting in an up_read(&sb->s_umount) just before blkdev_put() solves my
problem.
Do I need to increase the sb->s_active as well ???

Just wantet to point this out in case this is a bug.
BTW the down_write() just before the goto mount_it; has no effect as the
first statement after the label is up_write() on the same semapohre

Hereis a list of the relevant part of super.c with my alteration:
from line 1056:
sb = get_super(ROOT_DEV);
if (sb) {
/* FIXME */
p = (char *)sb->s_type->name;
atomic_inc(&sb->s_active);
up_read(&sb->s_umount);
down_write(&sb->s_umount);
goto mount_it;
}
for (p = fs_names; *p; p += strlen(p)+1) {
struct file_system_type * fs_type = get_fs_type(p);
if (!fs_type)
continue;
atomic_inc(&bdev->bd_count);
retval = blkdev_get(bdev, mode, 0, BDEV_FS);
if (retval)
goto Eio;
sb = read_super(ROOT_DEV, bdev, fs_type,
root_mountflags, root_mount_data);
put_filesystem(fs_type);
if (sb) {
up_read(&sb->s_umount); //This works
for jffs2
blkdev_put(bdev, BDEV_FS);
goto mount_it;
}
}

Best regards
Gusti
--
Agust Karlsson mailto:gusti@pallas.dk
Pallas Informatik A/S http://www.pallas.dk
Allerød Stationsvej 2D Tel.: +45 48 10 24 10
DK-3450 Allerød Fax.: +45 48 10 24 01


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:28    [W:0.480 / U:0.144 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site