lkml.org 
[lkml]   [1997]   [Oct]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: eject /dev/cdrom --> oops. (a better patch)
Date
From

whawes@star.net said:
> Perhaps I've missed something, but in looking at the 2.1.60 do_mount
> source I don't see any cases where you get a partial vfsmount
> structure.

I'm using 2.1.59-vger-vs-972010

do_mount calls add_vfsmnt, but if it then fails to read the super_block, it'll
jump directly to dput_and_out without calling remove_vfsmnt again. This leaves
the half-made vfsmnt entry in the table, which causes the later oops when the
table is scanned.

If this is fixed already, then perhaps I should ditch the CVS series and go
back to 2.1.60. I tried that the other day, though, and it didn't even boot;
it just rebooted halfway through the init sequence. I decided to leave it
until the 2.1.x and CVS trees were vaguely related to each other before trying
to switch back.


Extract from super.c:

if ((vfsmnt = lookup_vfsmnt(dev)) == (struct vfsmount *) NULL)
vfsmnt = add_vfsmnt(dev, dev_name, dir_name);

if (vfsmnt) {
/*
* Check whether to read the super block
*/
sb = get_super(dev);
if (!sb || !sb->s_root) {
error = -EINVAL;
sb = read_super(dev,type,flags,data,0);
if (!sb)
goto dput_and_out;
}
< ... >

dput_and_out:
dput(dir_d);
#ifdef PATCHED_BY_DAVE
if (vfsmnt) /* If I hadn't put this in, */
remove_vfsmnt(dev); /* the half-initialised vfsmnt */
#endif /* entry would be left in the table. */
out:
up(&mount_sem);
return error;



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