diff options
author | daichi <daichi@FreeBSD.org> | 2012-05-01 07:46:30 +0000 |
---|---|---|
committer | daichi <daichi@FreeBSD.org> | 2012-05-01 07:46:30 +0000 |
commit | 83abcd3986f8b19722ed1891b1aed45f7e85396e (patch) | |
tree | a8b6599b58915fdd3333fa7572c0b2dd8a81f43d /sys/fs/unionfs/union_vfsops.c | |
parent | 168204e4cfa31cedc08fc18e0a71d7c1183405a4 (diff) | |
download | FreeBSD-src-83abcd3986f8b19722ed1891b1aed45f7e85396e.zip FreeBSD-src-83abcd3986f8b19722ed1891b1aed45f7e85396e.tar.gz |
- fixed a vnode lock hang-up issue.
- fixed an incorrect lock status issue.
- fixed an incorrect lock issue of unionfs root vnode removed.
(pointed out by keith)
- fixed an infinity loop issue.
(pointed out by dumbbell)
- changed to do LK_RELEASE expressly when unlocked.
Submitted by: ozawa@ongs.co.jp
Diffstat (limited to 'sys/fs/unionfs/union_vfsops.c')
-rw-r--r-- | sys/fs/unionfs/union_vfsops.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/sys/fs/unionfs/union_vfsops.c b/sys/fs/unionfs/union_vfsops.c index 3c37d8f..936df4c 100644 --- a/sys/fs/unionfs/union_vfsops.c +++ b/sys/fs/unionfs/union_vfsops.c @@ -1,8 +1,8 @@ /*- * Copyright (c) 1994, 1995 The Regents of the University of California. * Copyright (c) 1994, 1995 Jan-Simon Pendry. - * Copyright (c) 2005, 2006 Masanori Ozawa <ozawa@ongs.co.jp>, ONGS Inc. - * Copyright (c) 2006 Daichi Goto <daichi@freebsd.org> + * Copyright (c) 2005, 2006, 2012 Masanori Ozawa <ozawa@ongs.co.jp>, ONGS Inc. + * Copyright (c) 2006, 2012 Daichi Goto <daichi@freebsd.org> * All rights reserved. * * This code is derived from software donated to Berkeley by @@ -165,7 +165,7 @@ unionfs_domount(struct mount *mp) uid = va.va_uid; gid = va.va_gid; } - VOP_UNLOCK(mp->mnt_vnodecovered, 0); + VOP_UNLOCK(mp->mnt_vnodecovered, LK_RELEASE); if (error) return (error); @@ -250,7 +250,7 @@ unionfs_domount(struct mount *mp) * Save reference */ if (below) { - VOP_UNLOCK(upperrootvp, 0); + VOP_UNLOCK(upperrootvp, LK_RELEASE); vn_lock(lowerrootvp, LK_EXCLUSIVE | LK_RETRY); ump->um_lowervp = upperrootvp; ump->um_uppervp = lowerrootvp; @@ -281,7 +281,7 @@ unionfs_domount(struct mount *mp) /* * Unlock the node */ - VOP_UNLOCK(ump->um_uppervp, 0); + VOP_UNLOCK(ump->um_uppervp, LK_RELEASE); /* * Get the unionfs root vnode. |