Undo previous commit to avoid panic, and fix order of argument of

VOP_LINK().  The reason of strange behavior was wrong order of the
argument, that is, the operation

	# ln foo bar

in a union fs tried to do

	# ln bar foo

in ufs layer.

Now we can make a link in a union fs.
This commit is contained in:
KATO Takenori 1997-04-16 03:08:34 +00:00
parent ef0e77e33a
commit 93d71a483c
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=24974
2 changed files with 4 additions and 30 deletions

View File

@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* @(#)union_vnops.c 8.32 (Berkeley) 6/23/95
* $Id: union_vnops.c,v 1.23 1997/04/14 05:13:55 kato Exp $
* $Id: union_vnops.c,v 1.24 1997/04/15 12:56:57 kato Exp $
*/
#include <sys/param.h>
@ -1058,7 +1058,6 @@ union_link(ap)
struct union_node *un;
struct vnode *vp;
struct vnode *tdvp;
int isvnunlocked = 0;
un = VTOUNION(ap->a_tdvp);
@ -1097,19 +1096,7 @@ union_link(ap)
un->un_flags |= UN_KLOCK;
vput(ap->a_tdvp);
/*
* XXX -- This is a quick-hack to avoid panic. Problem still remains!
* The process which access the union filesystem will be hang-up after
* making link in the union fs.
*/
if (VOP_ISLOCKED(tdvp) && (tdvp->v_op != union_vnodeop_p)) {
isvnunlocked = 1;
VOP_UNLOCK(tdvp, 0, p);
}
error = VOP_LINK(vp, tdvp, cnp);
if (isvnunlocked)
vn_lock(tdvp, LK_EXCLUSIVE | LK_RETRY, p);
return error;
return (VOP_LINK(tdvp, vp, cnp));
}
int

View File

@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* @(#)union_vnops.c 8.32 (Berkeley) 6/23/95
* $Id: union_vnops.c,v 1.23 1997/04/14 05:13:55 kato Exp $
* $Id: union_vnops.c,v 1.24 1997/04/15 12:56:57 kato Exp $
*/
#include <sys/param.h>
@ -1058,7 +1058,6 @@ union_link(ap)
struct union_node *un;
struct vnode *vp;
struct vnode *tdvp;
int isvnunlocked = 0;
un = VTOUNION(ap->a_tdvp);
@ -1097,19 +1096,7 @@ union_link(ap)
un->un_flags |= UN_KLOCK;
vput(ap->a_tdvp);
/*
* XXX -- This is a quick-hack to avoid panic. Problem still remains!
* The process which access the union filesystem will be hang-up after
* making link in the union fs.
*/
if (VOP_ISLOCKED(tdvp) && (tdvp->v_op != union_vnodeop_p)) {
isvnunlocked = 1;
VOP_UNLOCK(tdvp, 0, p);
}
error = VOP_LINK(vp, tdvp, cnp);
if (isvnunlocked)
vn_lock(tdvp, LK_EXCLUSIVE | LK_RETRY, p);
return error;
return (VOP_LINK(tdvp, vp, cnp));
}
int