mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-29 17:32:43 +00:00
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:
parent
ef0e77e33a
commit
93d71a483c
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=24974
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user