Update of /cvsroot/libsysio/libsysio/src
In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv26562/src
Modified Files:
init.c inode.c mount.c namei.c
Log Message:
In do_mnt(), must put the directory being covered whether the mount
succeded or not. Fixed.
Index: init.c
===================================================================
RCS file: /cvsroot/libsysio/libsysio/src/init.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -w -b -B -p -r1.43 -r1.44
--- init.c 6 Dec 2008 18:30:49 -0000 1.43
+++ init.c 6 Dec 2008 21:56:25 -0000 1.44
@@ -573,6 +573,7 @@ do_mnt(char *args)
char *ty, *name;
unsigned long flags;
struct pnode *dir;
+ int err;
len = strlen(args);
if (_sysio_get_args(args, v) - args != (ssize_t )len ||
@@ -606,13 +607,14 @@ do_mnt(char *args)
if (!(dir = _sysio_cwd) && !(dir = _sysio_root))
return -ENOENT;
P_GET(dir);
- return _sysio_mount(dir,
+ err = _sysio_mount(dir,
ty,
v[1].ovi_value,
name,
flags,
v[3].ovi_value);
P_PUT(dir);
+ return err;
}
Index: inode.c
===================================================================
RCS file: /cvsroot/libsysio/libsysio/src/inode.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -w -b -B -p -r1.46 -r1.47
--- inode.c 26 Jul 2008 01:31:40 -0000 1.46
+++ inode.c 6 Dec 2008 21:56:25 -0000 1.47
@@ -603,7 +603,7 @@ _sysio_pb_gone(struct pnode_base *pb)
if (ino) {
I_RELE(ino);
- if (!ino->i_ref)
+ if (!(ino->i_ref || ino->i_immune))
_sysio_i_gone(ino);
else
I_UNLOCK(ino);
Index: mount.c
===================================================================
RCS file: /cvsroot/libsysio/libsysio/src/mount.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -w -b -B -p -r1.31 -r1.32
--- mount.c 18 Jun 2008 15:50:39 -0000 1.31
+++ mount.c 6 Dec 2008 21:56:25 -0000 1.32
@@ -398,7 +398,6 @@ _sysio_mount(struct pnode *cwd,
tocover,
&mnt);
}
- if (err)
P_PUT(tocover);
return err;
}
@@ -746,6 +745,7 @@ _sysio_automount(struct pnode *mntpno)
err = parse_automount_spec(buf, &fstype, &source, &opts);
if (err)
goto out;
+ flags = 0;
if (opts)
opts = parse_opts(opts, &flags);
Index: namei.c
===================================================================
RCS file: /cvsroot/libsysio/libsysio/src/namei.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -w -b -B -p -r1.32 -r1.33
--- namei.c 4 Nov 2008 22:04:47 -0000 1.32
+++ namei.c 6 Dec 2008 21:56:25 -0000 1.33
@@ -355,9 +355,9 @@ _sysio_path_walk(struct pnode *parent, s
NULL,
NULL,
1);
- assert(!err || (err && !pno));
}
if (!err && (err = _sysio_automount(pno)) == 0) {
+ struct pnode *covered;
/*
* All went well. Need to switch
* parent pno and ino to the
@@ -371,8 +371,10 @@ _sysio_path_walk(struct pnode *parent, s
* The alternative could get us into an
* infinite loop.
*/
- nd->nd_pno = nd->nd_pno->p_cover;
+ covered = nd->nd_pno;
+ nd->nd_pno = covered->p_cover;
P_GET(nd->nd_pno);
+ P_PUT(covered);
ino = nd->nd_pno->p_base->pb_ino;
assert(ino);
|