Module Name: src Committed By: hannken Date: Sun May 7 08:22:40 UTC 2017
Modified Files: src/sys/fs/union: union_vnops.c Log Message: Move v_writecount adjustment from revoke to reclaim. To generate a diff of this commit: cvs rdiff -u -r1.67 -r1.68 src/sys/fs/union/union_vnops.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/fs/union/union_vnops.c diff -u src/sys/fs/union/union_vnops.c:1.67 src/sys/fs/union/union_vnops.c:1.68 --- src/sys/fs/union/union_vnops.c:1.67 Wed Apr 26 03:02:48 2017 +++ src/sys/fs/union/union_vnops.c Sun May 7 08:22:40 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: union_vnops.c,v 1.67 2017/04/26 03:02:48 riastradh Exp $ */ +/* $NetBSD: union_vnops.c,v 1.68 2017/05/07 08:22:40 hannken Exp $ */ /* * Copyright (c) 1992, 1993, 1994, 1995 @@ -72,7 +72,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.67 2017/04/26 03:02:48 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.68 2017/05/07 08:22:40 hannken Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1064,13 +1064,8 @@ union_revoke(void *v) } */ *ap = v; struct vnode *vp = ap->a_vp; - if (UPPERVP(vp)) { - mutex_enter(UPPERVP(vp)->v_interlock); - KASSERT(vp->v_interlock == UPPERVP(vp)->v_interlock); - UPPERVP(vp)->v_writecount -= vp->v_writecount; - mutex_exit(UPPERVP(vp)->v_interlock); + if (UPPERVP(vp)) VOP_REVOKE(UPPERVP(vp), ap->a_flags); - } if (LOWERVP(vp)) VOP_REVOKE(LOWERVP(vp), ap->a_flags); vgone(vp); /* XXXAD?? */ @@ -1585,8 +1580,17 @@ union_reclaim(void *v) struct vop_reclaim_args /* { struct vnode *a_vp; } */ *ap = v; + struct vnode *vp = ap->a_vp; + struct vnode *uvp = UPPERVP(vp); + + if (uvp != NULL) { + mutex_enter(uvp->v_interlock); + KASSERT(vp->v_interlock == uvp->v_interlock); + uvp->v_writecount -= vp->v_writecount; + mutex_exit(uvp->v_interlock); + } - union_freevp(ap->a_vp); + union_freevp(vp); return (0); }