aboutsummaryrefslogtreecommitdiff
path: root/sys/miscfs
diff options
context:
space:
mode:
authorDavid Greenman <dg@FreeBSD.org>1994-11-04 14:41:46 +0000
committerDavid Greenman <dg@FreeBSD.org>1994-11-04 14:41:46 +0000
commitc4a7b7e10c58e63f816f0da1d58e781f579c9dc4 (patch)
tree197d8d9c92571dc00690e6311677dbdc96f0ead0 /sys/miscfs
parent610fae39e91ad30d4643b626e06664356d5b9f8c (diff)
Notes
Diffstat (limited to 'sys/miscfs')
-rw-r--r--sys/miscfs/union/union_vfsops.c4
-rw-r--r--sys/miscfs/union/union_vnops.c12
2 files changed, 11 insertions, 5 deletions
diff --git a/sys/miscfs/union/union_vfsops.c b/sys/miscfs/union/union_vfsops.c
index 580941e876b73..393fe9d1dfe3c 100644
--- a/sys/miscfs/union/union_vfsops.c
+++ b/sys/miscfs/union/union_vfsops.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* @(#)union_vfsops.c 8.7 (Berkeley) 3/5/94
- * $Id: union_vfsops.c,v 1.5 1994/09/22 19:38:20 wollman Exp $
+ * $Id: union_vfsops.c,v 1.6 1994/10/10 07:55:47 phk Exp $
*/
/*
@@ -257,6 +257,8 @@ union_mount(mp, path, data, ndp, p)
(void) copyinstr(args.target, cp, len - 1, &size);
bzero(cp + size, len - size);
+ (void)union_statfs(mp, &mp->mnt_stat, p);
+
#ifdef UNION_DIAGNOSTIC
printf("union_mount: from %s, on %s\n",
mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntonname);
diff --git a/sys/miscfs/union/union_vnops.c b/sys/miscfs/union/union_vnops.c
index decf8f3adf1e9..df1935b1651ed 100644
--- a/sys/miscfs/union/union_vnops.c
+++ b/sys/miscfs/union/union_vnops.c
@@ -35,7 +35,7 @@
* SUCH DAMAGE.
*
* @(#)union_vnops.c 8.6 (Berkeley) 2/17/94
- * $Id: union_vnops.c,v 1.6 1994/10/06 21:06:49 davidg Exp $
+ * $Id: union_vnops.c,v 1.7 1994/10/10 07:55:48 phk Exp $
*/
#include <sys/param.h>
@@ -53,8 +53,13 @@
#include <sys/queue.h>
#include <miscfs/union/union.h>
+/* FIXUP throws the lock on the uppervp vnode if the union_node is already
+ * locked and the uppervp vnode is not. Before, this was thrown regardless
+ * of the state of the union_node which resulted in locked vnodes which
+ * were never unlocked (since the union would never be unlocked).
+ */
#define FIXUP(un) { \
- if (((un)->un_flags & UN_ULOCK) == 0) { \
+ if (((un)->un_flags & (UN_LOCKED|UN_ULOCK)) == UN_LOCKED) { \
union_fixup(un); \
} \
}
@@ -1136,7 +1141,6 @@ union_symlink(ap)
int
union_readdir(ap)
struct vop_readdir_args /* {
- struct vnodeop_desc *a_desc;
struct vnode *a_vp;
struct uio *a_uio;
struct ucred *a_cred;
@@ -1147,7 +1151,7 @@ union_readdir(ap)
if (un->un_uppervp) {
FIXUP(un);
- error = VOP_READDIR(un->un_uppervp, ap->a_uio, ap->a_cred);
+ error = VOP_READDIR(un->un_uppervp, ap->a_uio, ap->a_cred, NULL, NULL, NULL);
}
return (error);