Module Name: src
Committed By: riastradh
Date: Wed Apr 26 03:02:49 UTC 2017
Modified Files:
src/external/cddl/osnet/dist/uts/common/fs/zfs: zfs_vnops.c
src/lib/libp2k: p2k.c
src/sys/coda: coda_vnops.c
src/sys/compat/svr4: svr4_stream.c
src/sys/fs/msdosfs: msdosfs_vnops.c
src/sys/fs/nilfs: nilfs_vnops.c
src/sys/fs/puffs: puffs_vnops.c
src/sys/fs/smbfs: smbfs_vnops.c
src/sys/fs/sysvbfs: sysvbfs_vnops.c
src/sys/fs/tmpfs: tmpfs_vnops.c
src/sys/fs/udf: udf_vnops.c
src/sys/fs/union: union_vnops.c
src/sys/fs/unionfs: unionfs_vnops.c
src/sys/fs/v7fs: v7fs_vnops.c
src/sys/kern: vfs_syscalls.c vnode_if.src
src/sys/miscfs/deadfs: dead_vnops.c
src/sys/miscfs/genfs: layer_vnops.c
src/sys/nfs: nfs_serv.c nfs_vnops.c
src/sys/rump/librump/rumpvfs: rumpfs.c
src/sys/ufs/chfs: chfs_vnops.c
src/sys/ufs/ext2fs: ext2fs_vnops.c
src/sys/ufs/lfs: lfs_vnops.c ulfs_vnops.c
src/sys/ufs/ufs: ufs_vnops.c
Log Message:
Change VOP_REMOVE and VOP_RMDIR to preserve lock/ref on dvp.
No change to vp -- the plan is to replace the node by the
componentname in the vop parameters, and let all directory vops do
lookups internally.
Proposed on tech-kern with no objections:
https://mail-index.netbsd.org/tech-kern/2017/04/17/msg021825.html
To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 \
src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
cvs rdiff -u -r1.69 -r1.70 src/lib/libp2k/p2k.c
cvs rdiff -u -r1.104 -r1.105 src/sys/coda/coda_vnops.c
cvs rdiff -u -r1.87 -r1.88 src/sys/compat/svr4/svr4_stream.c
cvs rdiff -u -r1.97 -r1.98 src/sys/fs/msdosfs/msdosfs_vnops.c
cvs rdiff -u -r1.34 -r1.35 src/sys/fs/nilfs/nilfs_vnops.c
cvs rdiff -u -r1.209 -r1.210 src/sys/fs/puffs/puffs_vnops.c
cvs rdiff -u -r1.93 -r1.94 src/sys/fs/smbfs/smbfs_vnops.c
cvs rdiff -u -r1.61 -r1.62 src/sys/fs/sysvbfs/sysvbfs_vnops.c
cvs rdiff -u -r1.131 -r1.132 src/sys/fs/tmpfs/tmpfs_vnops.c
cvs rdiff -u -r1.103 -r1.104 src/sys/fs/udf/udf_vnops.c
cvs rdiff -u -r1.66 -r1.67 src/sys/fs/union/union_vnops.c
cvs rdiff -u -r1.10 -r1.11 src/sys/fs/unionfs/unionfs_vnops.c
cvs rdiff -u -r1.24 -r1.25 src/sys/fs/v7fs/v7fs_vnops.c
cvs rdiff -u -r1.512 -r1.513 src/sys/kern/vfs_syscalls.c
cvs rdiff -u -r1.73 -r1.74 src/sys/kern/vnode_if.src
cvs rdiff -u -r1.60 -r1.61 src/sys/miscfs/deadfs/dead_vnops.c
cvs rdiff -u -r1.62 -r1.63 src/sys/miscfs/genfs/layer_vnops.c
cvs rdiff -u -r1.172 -r1.173 src/sys/nfs/nfs_serv.c
cvs rdiff -u -r1.309 -r1.310 src/sys/nfs/nfs_vnops.c
cvs rdiff -u -r1.147 -r1.148 src/sys/rump/librump/rumpvfs/rumpfs.c
cvs rdiff -u -r1.31 -r1.32 src/sys/ufs/chfs/chfs_vnops.c
cvs rdiff -u -r1.125 -r1.126 src/sys/ufs/ext2fs/ext2fs_vnops.c
cvs rdiff -u -r1.313 -r1.314 src/sys/ufs/lfs/lfs_vnops.c
cvs rdiff -u -r1.47 -r1.48 src/sys/ufs/lfs/ulfs_vnops.c
cvs rdiff -u -r1.236 -r1.237 src/sys/ufs/ufs/ufs_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/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.24 src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.25
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c:1.24 Tue Apr 11 14:25:01 2017
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c Wed Apr 26 03:02:47 2017
@@ -4975,7 +4975,7 @@ zfs_netbsd_create(void *v)
static int
zfs_netbsd_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -5002,13 +5002,6 @@ zfs_netbsd_remove(void *v)
0);
KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE);
-
- /*
- * Unlock and release dvp because the VOP_REMOVE protocol is insane.
- */
- VOP_UNLOCK(dvp);
- VN_RELE(dvp);
-
return (error);
}
@@ -5048,7 +5041,7 @@ zfs_netbsd_mkdir(void *v)
static int
zfs_netbsd_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -5075,12 +5068,6 @@ zfs_netbsd_rmdir(void *v)
NULL, 0);
KASSERT(VOP_ISLOCKED(dvp) == LK_EXCLUSIVE);
-
- /*
- * Unlock and release dvp because the VOP_RMDIR protocol is insane.
- */
- VOP_UNLOCK(dvp);
- VN_RELE(dvp);
return error;
}
Index: src/lib/libp2k/p2k.c
diff -u src/lib/libp2k/p2k.c:1.69 src/lib/libp2k/p2k.c:1.70
--- src/lib/libp2k/p2k.c:1.69 Tue Apr 11 14:25:02 2017
+++ src/lib/libp2k/p2k.c Wed Apr 26 03:02:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: p2k.c,v 1.69 2017/04/11 14:25:02 riastradh Exp $ */
+/* $NetBSD: p2k.c,v 1.70 2017/04/26 03:02:48 riastradh Exp $ */
/*
* Copyright (c) 2007, 2008, 2009 Antti Kantee. All Rights Reserved.
@@ -1026,8 +1026,11 @@ do_nukenode(struct p2k_node *p2n_dir, st
RUMP_VOP_LOCK(vp, LK_EXCLUSIVE);
rump_pub_vp_incref(vp);
rv = nukefn(dvp, vp, cn);
- assert(RUMP_VOP_ISLOCKED(dvp) == 0);
+ assert(dvp != vp);
+ assert(RUMP_VOP_ISLOCKED(dvp) == LK_EXCLUSIVE);
assert(RUMP_VOP_ISLOCKED(vp) == 0);
+ rump_pub_vp_rele(dvp);
+ RUMP_VOP_UNLOCK(dvp);
freecn(cn);
return rv;
Index: src/sys/coda/coda_vnops.c
diff -u src/sys/coda/coda_vnops.c:1.104 src/sys/coda/coda_vnops.c:1.105
--- src/sys/coda/coda_vnops.c:1.104 Tue Apr 11 14:24:59 2017
+++ src/sys/coda/coda_vnops.c Wed Apr 26 03:02:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: coda_vnops.c,v 1.104 2017/04/11 14:24:59 riastradh Exp $ */
+/* $NetBSD: coda_vnops.c,v 1.105 2017/04/26 03:02:48 riastradh Exp $ */
/*
*
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.104 2017/04/11 14:24:59 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: coda_vnops.c,v 1.105 2017/04/26 03:02:48 riastradh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1071,7 +1071,7 @@ int
coda_remove(void *v)
{
/* true args */
- struct vop_remove_args *ap = v;
+ struct vop_remove_v2_args *ap = v;
vnode_t *dvp = ap->a_dvp;
struct cnode *cp = VTOC(dvp);
vnode_t *vp = ap->a_vp;
@@ -1124,14 +1124,13 @@ coda_remove(void *v)
CODADEBUG(CODA_REMOVE, myprintf(("in remove result %d\n",error)); )
/*
- * Unlock parent and child (avoiding double if ".").
+ * Unlock and release child (avoiding double if ".").
*/
if (dvp == vp) {
vrele(vp);
} else {
vput(vp);
}
- vput(dvp);
return(error);
}
@@ -1377,7 +1376,7 @@ int
coda_rmdir(void *v)
{
/* true args */
- struct vop_rmdir_args *ap = v;
+ struct vop_rmdir_v2_args *ap = v;
vnode_t *dvp = ap->a_dvp;
struct cnode *dcp = VTOC(dvp);
vnode_t *vp = ap->a_vp;
@@ -1429,8 +1428,7 @@ coda_rmdir(void *v)
CODADEBUG(CODA_RMDIR, myprintf(("in rmdir result %d\n", error)); )
exit:
- /* vput both vnodes */
- vput(dvp);
+ /* unlock and release child */
if (dvp == vp) {
vrele(vp);
} else {
Index: src/sys/compat/svr4/svr4_stream.c
diff -u src/sys/compat/svr4/svr4_stream.c:1.87 src/sys/compat/svr4/svr4_stream.c:1.88
--- src/sys/compat/svr4/svr4_stream.c:1.87 Tue Sep 13 07:01:08 2016
+++ src/sys/compat/svr4/svr4_stream.c Wed Apr 26 03:02:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: svr4_stream.c,v 1.87 2016/09/13 07:01:08 martin Exp $ */
+/* $NetBSD: svr4_stream.c,v 1.88 2017/04/26 03:02:48 riastradh Exp $ */
/*-
* Copyright (c) 1994, 2008 The NetBSD Foundation, Inc.
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: svr4_stream.c,v 1.87 2016/09/13 07:01:08 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: svr4_stream.c,v 1.88 2017/04/26 03:02:48 riastradh Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -328,6 +328,7 @@ clean_pipe(struct lwp *l, const char *pa
goto bad;
error = VOP_REMOVE(nd.ni_dvp, nd.ni_vp, &nd.ni_cnd);
+ vput(nd.ni_dvp);
pathbuf_destroy(pb);
return error;
Index: src/sys/fs/msdosfs/msdosfs_vnops.c
diff -u src/sys/fs/msdosfs/msdosfs_vnops.c:1.97 src/sys/fs/msdosfs/msdosfs_vnops.c:1.98
--- src/sys/fs/msdosfs/msdosfs_vnops.c:1.97 Wed Mar 1 10:41:28 2017
+++ src/sys/fs/msdosfs/msdosfs_vnops.c Wed Apr 26 03:02:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: msdosfs_vnops.c,v 1.97 2017/03/01 10:41:28 hannken Exp $ */
+/* $NetBSD: msdosfs_vnops.c,v 1.98 2017/04/26 03:02:48 riastradh Exp $ */
/*-
* Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank.
@@ -48,7 +48,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: msdosfs_vnops.c,v 1.97 2017/03/01 10:41:28 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: msdosfs_vnops.c,v 1.98 2017/04/26 03:02:48 riastradh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -715,7 +715,7 @@ msdosfs_update(struct vnode *vp, const s
int
msdosfs_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -739,7 +739,7 @@ msdosfs_remove(void *v)
else
vput(ap->a_vp); /* causes msdosfs_inactive() to be called
* via vrele() */
- vput(ap->a_dvp);
+
return (error);
}
@@ -1266,7 +1266,7 @@ bad2:
int
msdosfs_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -1283,8 +1283,7 @@ msdosfs_rmdir(void *v)
* No rmdir "." please.
*/
if (dp == ip) {
- vrele(dvp);
- vput(vp);
+ vrele(vp);
return (EINVAL);
}
/*
@@ -1316,8 +1315,6 @@ msdosfs_rmdir(void *v)
*/
VN_KNOTE(dvp, NOTE_WRITE | NOTE_LINK);
cache_purge(dvp);
- vput(dvp);
- dvp = NULL;
/*
* Truncate the directory that is being deleted.
*/
@@ -1325,8 +1322,6 @@ msdosfs_rmdir(void *v)
cache_purge(vp);
out:
VN_KNOTE(vp, NOTE_DELETE);
- if (dvp)
- vput(dvp);
vput(vp);
return (error);
}
Index: src/sys/fs/nilfs/nilfs_vnops.c
diff -u src/sys/fs/nilfs/nilfs_vnops.c:1.34 src/sys/fs/nilfs/nilfs_vnops.c:1.35
--- src/sys/fs/nilfs/nilfs_vnops.c:1.34 Tue Apr 11 14:24:59 2017
+++ src/sys/fs/nilfs/nilfs_vnops.c Wed Apr 26 03:02:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: nilfs_vnops.c,v 1.34 2017/04/11 14:24:59 riastradh Exp $ */
+/* $NetBSD: nilfs_vnops.c,v 1.35 2017/04/26 03:02:48 riastradh Exp $ */
/*
* Copyright (c) 2008, 2009 Reinoud Zandijk
@@ -28,7 +28,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: nilfs_vnops.c,v 1.34 2017/04/11 14:24:59 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nilfs_vnops.c,v 1.35 2017/04/26 03:02:48 riastradh Exp $");
#endif /* not lint */
@@ -1404,7 +1404,7 @@ out_unlocked:
int
nilfs_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -1435,7 +1435,6 @@ nilfs_remove(void *v)
vrele(vp);
else
vput(vp);
- vput(dvp);
return error;
}
@@ -1445,7 +1444,7 @@ nilfs_remove(void *v)
int
nilfs_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -1462,8 +1461,7 @@ nilfs_rmdir(void *v)
/* don't allow '.' to be deleted */
if (dir_node == nilfs_node) {
- vrele(dvp);
- vput(vp);
+ vrele(vp);
return EINVAL;
}
@@ -1472,7 +1470,6 @@ nilfs_rmdir(void *v)
refcnt = 2; /* XXX */
if (refcnt > 1) {
/* NOT empty */
- vput(dvp);
vput(vp);
return ENOTEMPTY;
}
@@ -1486,8 +1483,7 @@ nilfs_rmdir(void *v)
}
DPRINTFIF(NODE, error, ("\tgot error removing file\n"));
- /* unput the nodes and exit */
- vput(dvp);
+ /* put the node and exit */
vput(vp);
return error;
Index: src/sys/fs/puffs/puffs_vnops.c
diff -u src/sys/fs/puffs/puffs_vnops.c:1.209 src/sys/fs/puffs/puffs_vnops.c:1.210
--- src/sys/fs/puffs/puffs_vnops.c:1.209 Tue Apr 11 14:24:59 2017
+++ src/sys/fs/puffs/puffs_vnops.c Wed Apr 26 03:02:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: puffs_vnops.c,v 1.209 2017/04/11 14:24:59 riastradh Exp $ */
+/* $NetBSD: puffs_vnops.c,v 1.210 2017/04/26 03:02:48 riastradh Exp $ */
/*
* Copyright (c) 2005, 2006, 2007 Antti Kantee. All Rights Reserved.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.209 2017/04/11 14:24:59 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: puffs_vnops.c,v 1.210 2017/04/26 03:02:48 riastradh Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -1829,7 +1829,7 @@ callremove(struct puffs_mount *pmp, puff
int
puffs_vnop_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
const struct vnodeop_desc *a_desc;
struct vnode *a_dvp;
struct vnode *a_vp;
@@ -1853,7 +1853,8 @@ puffs_vnop_remove(void *v)
PUFFS_VN_REMOVE, VPTOPNC(dvp));
puffs_msg_enqueue(pmp, park_remove);
- REFPN_AND_UNLOCKVP(dvp, dpn);
+ vref(dvp); /* hang onto caller's reference at end */
+ REFPN(dpn);
if (dvp == vp)
REFPN(pn);
else
@@ -1952,7 +1953,7 @@ callrmdir(struct puffs_mount *pmp, puffs
int
puffs_vnop_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
const struct vnodeop_desc *a_desc;
struct vnode *a_dvp;
struct vnode *a_vp;
@@ -1975,7 +1976,9 @@ puffs_vnop_rmdir(void *v)
PUFFS_VN_RMDIR, VPTOPNC(dvp));
puffs_msg_enqueue(pmp, park_rmdir);
- REFPN_AND_UNLOCKVP(dvp, dpn);
+ vref(dvp); /* hang onto caller's reference at end */
+ KASSERTMSG((dvp != vp), "rmdir .");
+ REFPN(dpn);
REFPN_AND_UNLOCKVP(vp, pn);
error = puffs_msg_wait2(pmp, park_rmdir, dpn, pn);
Index: src/sys/fs/smbfs/smbfs_vnops.c
diff -u src/sys/fs/smbfs/smbfs_vnops.c:1.93 src/sys/fs/smbfs/smbfs_vnops.c:1.94
--- src/sys/fs/smbfs/smbfs_vnops.c:1.93 Sun Dec 21 10:48:53 2014
+++ src/sys/fs/smbfs/smbfs_vnops.c Wed Apr 26 03:02:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: smbfs_vnops.c,v 1.93 2014/12/21 10:48:53 hannken Exp $ */
+/* $NetBSD: smbfs_vnops.c,v 1.94 2017/04/26 03:02:48 riastradh Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.93 2014/12/21 10:48:53 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbfs_vnops.c,v 1.94 2017/04/26 03:02:48 riastradh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -618,7 +618,7 @@ smbfs_create(void *v)
int
smbfs_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnodeop_desc *a_desc;
struct vnode * a_dvp;
struct vnode * a_vp;
@@ -648,7 +648,6 @@ smbfs_remove(void *v)
vrele(vp);
else
vput(vp);
- vput(dvp);
return (error);
}
@@ -822,7 +821,7 @@ smbfs_mkdir(void *v)
int
smbfs_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -837,8 +836,7 @@ smbfs_rmdir(void *v)
int error;
if (dvp == vp) {
- vrele(dvp);
- vput(dvp);
+ vrele(vp);
return (EINVAL);
}
@@ -853,7 +851,6 @@ smbfs_rmdir(void *v)
cache_purge(dvp);
cache_purge(vp);
vput(vp);
- vput(dvp);
return (error);
}
Index: src/sys/fs/sysvbfs/sysvbfs_vnops.c
diff -u src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.61 src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.62
--- src/sys/fs/sysvbfs/sysvbfs_vnops.c:1.61 Tue Apr 11 14:25:00 2017
+++ src/sys/fs/sysvbfs/sysvbfs_vnops.c Wed Apr 26 03:02:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: sysvbfs_vnops.c,v 1.61 2017/04/11 14:25:00 riastradh Exp $ */
+/* $NetBSD: sysvbfs_vnops.c,v 1.62 2017/04/26 03:02:48 riastradh Exp $ */
/*-
* Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vnops.c,v 1.61 2017/04/11 14:25:00 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sysvbfs_vnops.c,v 1.62 2017/04/26 03:02:48 riastradh Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -508,7 +508,7 @@ sysvbfs_write(void *arg)
int
sysvbfs_remove(void *arg)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnodeop_desc *a_desc;
struct vnode * a_dvp;
struct vnode * a_vp;
@@ -523,8 +523,10 @@ sysvbfs_remove(void *arg)
DPRINTF("%s: delete %s\n", __func__, ap->a_cnp->cn_nameptr);
- if (vp->v_type == VDIR)
+ if (vp->v_type == VDIR) {
+ vrele(vp);
return EPERM;
+ }
if ((err = bfs_file_delete(bfs, ap->a_cnp->cn_nameptr, true)) != 0)
DPRINTF("%s: bfs_file_delete failed.\n", __func__);
@@ -535,7 +537,6 @@ sysvbfs_remove(void *arg)
vrele(vp);
else
vput(vp);
- vput(dvp);
if (err == 0) {
bnode->removed = 1;
Index: src/sys/fs/tmpfs/tmpfs_vnops.c
diff -u src/sys/fs/tmpfs/tmpfs_vnops.c:1.131 src/sys/fs/tmpfs/tmpfs_vnops.c:1.132
--- src/sys/fs/tmpfs/tmpfs_vnops.c:1.131 Tue Apr 11 14:25:00 2017
+++ src/sys/fs/tmpfs/tmpfs_vnops.c Wed Apr 26 03:02:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: tmpfs_vnops.c,v 1.131 2017/04/11 14:25:00 riastradh Exp $ */
+/* $NetBSD: tmpfs_vnops.c,v 1.132 2017/04/26 03:02:48 riastradh Exp $ */
/*
* Copyright (c) 2005, 2006, 2007 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.131 2017/04/11 14:25:00 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tmpfs_vnops.c,v 1.132 2017/04/26 03:02:48 riastradh Exp $");
#include <sys/param.h>
#include <sys/dirent.h>
@@ -652,7 +652,7 @@ tmpfs_fsync(void *v)
int
tmpfs_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -716,12 +716,11 @@ tmpfs_remove(void *v)
tmpfs_update(dvp, TMPFS_UPDATE_MTIME | TMPFS_UPDATE_CTIME);
error = 0;
out:
- /* Drop the references and unlock the vnodes. */
- vput(vp);
+ /* Drop the reference and unlock the node. */
if (dvp == vp) {
- vrele(dvp);
+ vrele(vp);
} else {
- vput(dvp);
+ vput(vp);
}
return error;
}
@@ -813,7 +812,7 @@ tmpfs_mkdir(void *v)
int
tmpfs_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -898,8 +897,8 @@ tmpfs_rmdir(void *v)
KASSERT(node->tn_size == 0);
KASSERT(node->tn_links == 0);
out:
- /* Release the nodes. */
- vput(dvp);
+ /* Release the node. */
+ KASSERT(dvp != vp);
vput(vp);
return error;
}
Index: src/sys/fs/udf/udf_vnops.c
diff -u src/sys/fs/udf/udf_vnops.c:1.103 src/sys/fs/udf/udf_vnops.c:1.104
--- src/sys/fs/udf/udf_vnops.c:1.103 Tue Apr 11 14:25:00 2017
+++ src/sys/fs/udf/udf_vnops.c Wed Apr 26 03:02:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_vnops.c,v 1.103 2017/04/11 14:25:00 riastradh Exp $ */
+/* $NetBSD: udf_vnops.c,v 1.104 2017/04/26 03:02:48 riastradh Exp $ */
/*
* Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -32,7 +32,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.103 2017/04/11 14:25:00 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_vnops.c,v 1.104 2017/04/26 03:02:48 riastradh Exp $");
#endif /* not lint */
@@ -1941,7 +1941,7 @@ udf_readlink(void *v)
int
udf_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -1972,7 +1972,6 @@ udf_remove(void *v)
vrele(vp);
else
vput(vp);
- vput(dvp);
return error;
}
@@ -1982,7 +1981,7 @@ udf_remove(void *v)
int
udf_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -1999,8 +1998,7 @@ udf_rmdir(void *v)
/* don't allow '.' to be deleted */
if (dir_node == udf_node) {
- vrele(dvp);
- vput(vp);
+ vrele(vp);
return EINVAL;
}
@@ -2017,7 +2015,6 @@ udf_rmdir(void *v)
dirhash_put(udf_node->dir_hash);
if (!isempty) {
- vput(dvp);
vput(vp);
return ENOTEMPTY;
}
@@ -2040,8 +2037,7 @@ udf_rmdir(void *v)
}
DPRINTFIF(NODE, error, ("\tgot error removing dir\n"));
- /* unput the nodes and exit */
- vput(dvp);
+ /* put the node and exit */
vput(vp);
return error;
Index: src/sys/fs/union/union_vnops.c
diff -u src/sys/fs/union/union_vnops.c:1.66 src/sys/fs/union/union_vnops.c:1.67
--- src/sys/fs/union/union_vnops.c:1.66 Mon Apr 17 08:32:01 2017
+++ src/sys/fs/union/union_vnops.c Wed Apr 26 03:02:48 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: union_vnops.c,v 1.66 2017/04/17 08:32:01 hannken Exp $ */
+/* $NetBSD: union_vnops.c,v 1.67 2017/04/26 03:02:48 riastradh Exp $ */
/*
* Copyright (c) 1992, 1993, 1994, 1995
@@ -72,7 +72,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.66 2017/04/17 08:32:01 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: union_vnops.c,v 1.67 2017/04/26 03:02:48 riastradh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1153,7 +1153,7 @@ union_seek(void *v)
int
union_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -1170,24 +1170,18 @@ union_remove(void *v)
struct vnode *dvp = dun->un_uppervp;
struct vnode *vp = un->un_uppervp;
- /*
- * Account for VOP_REMOVE to vrele dvp and vp.
- * Note: VOP_REMOVE will unlock dvp and vp.
- */
- vref(dvp);
+ /* Account for VOP_REMOVE to vrele vp. */
vref(vp);
if (union_dowhiteout(un, cnp->cn_cred))
cnp->cn_flags |= DOWHITEOUT;
error = VOP_REMOVE(dvp, vp, cnp);
if (!error)
union_removed_upper(un);
- vrele(ap->a_dvp);
vrele(ap->a_vp);
} else {
error = union_mkwhiteout(
MOUNTTOUNIONMOUNT(UNIONTOV(dun)->v_mount),
dun->un_uppervp, ap->a_cnp, un);
- vput(ap->a_dvp);
vput(ap->a_vp);
}
@@ -1417,7 +1411,7 @@ union_mkdir(void *v)
int
union_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -1432,7 +1426,6 @@ union_rmdir(void *v)
error = union_check_rmdir(un, cnp->cn_cred);
if (error) {
- vput(ap->a_dvp);
vput(ap->a_vp);
return error;
}
@@ -1441,24 +1434,18 @@ union_rmdir(void *v)
struct vnode *dvp = dun->un_uppervp;
struct vnode *vp = un->un_uppervp;
- /*
- * Account for VOP_RMDIR to vrele dvp and vp.
- * Note: VOP_RMDIR will unlock dvp and vp.
- */
- vref(dvp);
+ /* Account for VOP_RMDIR to vrele vp. */
vref(vp);
if (union_dowhiteout(un, cnp->cn_cred))
cnp->cn_flags |= DOWHITEOUT;
error = VOP_RMDIR(dvp, vp, ap->a_cnp);
if (!error)
union_removed_upper(un);
- vrele(ap->a_dvp);
vrele(ap->a_vp);
} else {
error = union_mkwhiteout(
MOUNTTOUNIONMOUNT(UNIONTOV(dun)->v_mount),
dun->un_uppervp, ap->a_cnp, un);
- vput(ap->a_dvp);
vput(ap->a_vp);
}
Index: src/sys/fs/unionfs/unionfs_vnops.c
diff -u src/sys/fs/unionfs/unionfs_vnops.c:1.10 src/sys/fs/unionfs/unionfs_vnops.c:1.11
--- src/sys/fs/unionfs/unionfs_vnops.c:1.10 Tue Apr 11 14:25:00 2017
+++ src/sys/fs/unionfs/unionfs_vnops.c Wed Apr 26 03:02:48 2017
@@ -857,7 +857,7 @@ unionfs_fsync(void *v)
static int
unionfs_remove(void *v)
{
- struct vop_remove_args *ap = v;
+ struct vop_remove_v2_args *ap = v;
int error;
struct unionfs_node *dunp;
struct unionfs_node *unp;
@@ -877,8 +877,10 @@ unionfs_remove(void *v)
lvp = unp->un_lowervp;
cnp = ap->a_cnp;
- if (udvp == NULLVP)
+ if (udvp == NULLVP) {
+ vput(ap->a_vp);
return (EROFS);
+ }
if (uvp != NULLVP) {
ump = MOUNTTOUNIONFSMOUNT(ap->a_vp->v_mount);
@@ -1206,7 +1208,7 @@ unionfs_mkdir(void *v)
static int
unionfs_rmdir(void *v)
{
- struct vop_rmdir_args *ap = v;
+ struct vop_rmdir_v2_args *ap = v;
int error;
struct unionfs_node *dunp;
struct unionfs_node *unp;
@@ -1226,8 +1228,10 @@ unionfs_rmdir(void *v)
uvp = unp->un_uppervp;
lvp = unp->un_lowervp;
- if (udvp == NULLVP)
+ if (udvp == NULLVP) {
+ vput(ap->a_vp);
return (EROFS);
+ }
if (udvp == uvp)
return (EOPNOTSUPP);
Index: src/sys/fs/v7fs/v7fs_vnops.c
diff -u src/sys/fs/v7fs/v7fs_vnops.c:1.24 src/sys/fs/v7fs/v7fs_vnops.c:1.25
--- src/sys/fs/v7fs/v7fs_vnops.c:1.24 Tue Apr 11 14:25:00 2017
+++ src/sys/fs/v7fs/v7fs_vnops.c Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: v7fs_vnops.c,v 1.24 2017/04/11 14:25:00 riastradh Exp $ */
+/* $NetBSD: v7fs_vnops.c,v 1.25 2017/04/26 03:02:49 riastradh Exp $ */
/*-
* Copyright (c) 2004, 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.24 2017/04/11 14:25:00 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: v7fs_vnops.c,v 1.25 2017/04/26 03:02:49 riastradh Exp $");
#if defined _KERNEL_OPT
#include "opt_v7fs.h"
#endif
@@ -680,7 +680,7 @@ v7fs_fsync(void *v)
int
v7fs_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnodeop_desc *a_desc;
struct vnode * a_dvp;
struct vnode * a_vp;
@@ -717,7 +717,6 @@ out:
vrele(vp); /* v_usecount-- of unlocked vp */
else
vput(vp); /* unlock vp and then v_usecount-- */
- vput(dvp);
return error;
}
@@ -865,7 +864,7 @@ v7fs_mkdir(void *v)
int
v7fs_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -895,7 +894,6 @@ v7fs_rmdir(void *v)
uvm_vnp_setsize(dvp, v7fs_inode_filesize(&parent_node->inode));
out:
vput(vp);
- vput(dvp);
return error;
}
Index: src/sys/kern/vfs_syscalls.c
diff -u src/sys/kern/vfs_syscalls.c:1.512 src/sys/kern/vfs_syscalls.c:1.513
--- src/sys/kern/vfs_syscalls.c:1.512 Mon Apr 17 08:32:01 2017
+++ src/sys/kern/vfs_syscalls.c Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls.c,v 1.512 2017/04/17 08:32:01 hannken Exp $ */
+/* $NetBSD: vfs_syscalls.c,v 1.513 2017/04/26 03:02:49 riastradh Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.512 2017/04/17 08:32:01 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.513 2017/04/26 03:02:49 riastradh Exp $");
#ifdef _KERNEL_OPT
#include "opt_fileassoc.h"
@@ -2696,6 +2696,7 @@ do_sys_unlinkat(struct lwp *l, int fdat,
goto abort;
} else {
error = VOP_RMDIR(nd.ni_dvp, nd.ni_vp, &nd.ni_cnd);
+ vput(nd.ni_dvp);
goto out;
}
}
@@ -2719,6 +2720,7 @@ do_sys_unlinkat(struct lwp *l, int fdat,
(void)fileassoc_file_delete(vp);
#endif /* FILEASSOC */
error = VOP_REMOVE(nd.ni_dvp, nd.ni_vp, &nd.ni_cnd);
+ vput(nd.ni_dvp);
goto out;
abort:
Index: src/sys/kern/vnode_if.src
diff -u src/sys/kern/vnode_if.src:1.73 src/sys/kern/vnode_if.src:1.74
--- src/sys/kern/vnode_if.src:1.73 Sun Apr 16 16:48:08 2017
+++ src/sys/kern/vnode_if.src Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-# $NetBSD: vnode_if.src,v 1.73 2017/04/16 16:48:08 riastradh Exp $
+# $NetBSD: vnode_if.src,v 1.74 2017/04/26 03:02:49 riastradh Exp $
#
# Copyright (c) 1992, 1993
# The Regents of the University of California. All rights reserved.
@@ -269,13 +269,14 @@ vop_seek {
};
#
-#% remove dvp L U U
+#% remove dvp L L L
#% remove vp L U U
#
#! remove cnp DELETE, LOCKPARENT | LOCKLEAF
#
vop_remove {
- IN LOCKED=YES WILLPUT struct vnode *dvp;
+ VERSION 2
+ IN LOCKED=YES struct vnode *dvp;
IN LOCKED=YES WILLPUT struct vnode *vp;
IN struct componentname *cnp;
};
@@ -326,13 +327,14 @@ vop_mkdir {
};
#
-#% rmdir dvp L U U
+#% rmdir dvp L L L
#% rmdir vp L U U
#
#! rmdir cnp DELETE, LOCKPARENT | LOCKLEAF
#
vop_rmdir {
- IN LOCKED=YES WILLPUT struct vnode *dvp;
+ VERSION 2
+ IN LOCKED=YES struct vnode *dvp;
IN LOCKED=YES WILLPUT struct vnode *vp;
IN struct componentname *cnp;
};
Index: src/sys/miscfs/deadfs/dead_vnops.c
diff -u src/sys/miscfs/deadfs/dead_vnops.c:1.60 src/sys/miscfs/deadfs/dead_vnops.c:1.61
--- src/sys/miscfs/deadfs/dead_vnops.c:1.60 Tue Apr 11 14:25:00 2017
+++ src/sys/miscfs/deadfs/dead_vnops.c Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: dead_vnops.c,v 1.60 2017/04/11 14:25:00 riastradh Exp $ */
+/* $NetBSD: dead_vnops.c,v 1.61 2017/04/26 03:02:49 riastradh Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dead_vnops.c,v 1.60 2017/04/11 14:25:00 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dead_vnops.c,v 1.61 2017/04/26 03:02:49 riastradh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -234,13 +234,12 @@ dead_poll(void *v)
int
dead_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
} */ *ap = v;
- vput(ap->a_dvp);
vput(ap->a_vp);
return EIO;
@@ -286,13 +285,12 @@ dead_rename(void *v)
int
dead_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
} */ *ap = v;
- vput(ap->a_dvp);
vput(ap->a_vp);
return EIO;
Index: src/sys/miscfs/genfs/layer_vnops.c
diff -u src/sys/miscfs/genfs/layer_vnops.c:1.62 src/sys/miscfs/genfs/layer_vnops.c:1.63
--- src/sys/miscfs/genfs/layer_vnops.c:1.62 Tue Apr 11 14:25:00 2017
+++ src/sys/miscfs/genfs/layer_vnops.c Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: layer_vnops.c,v 1.62 2017/04/11 14:25:00 riastradh Exp $ */
+/* $NetBSD: layer_vnops.c,v 1.63 2017/04/26 03:02:49 riastradh Exp $ */
/*
* Copyright (c) 1999 National Aeronautics & Space Administration
@@ -170,7 +170,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: layer_vnops.c,v 1.62 2017/04/11 14:25:00 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: layer_vnops.c,v 1.63 2017/04/26 03:02:49 riastradh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -609,8 +609,8 @@ layer_inactive(void *v)
int
layer_remove(void *v)
{
- struct vop_remove_args /* {
- struct vonde *a_dvp;
+ struct vop_remove_v2_args /* {
+ struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
} */ *ap = v;
@@ -660,7 +660,7 @@ layer_rename(void *v)
int
layer_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
Index: src/sys/nfs/nfs_serv.c
diff -u src/sys/nfs/nfs_serv.c:1.172 src/sys/nfs/nfs_serv.c:1.173
--- src/sys/nfs/nfs_serv.c:1.172 Tue Apr 21 03:19:03 2015
+++ src/sys/nfs/nfs_serv.c Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: nfs_serv.c,v 1.172 2015/04/21 03:19:03 riastradh Exp $ */
+/* $NetBSD: nfs_serv.c,v 1.173 2017/04/26 03:02:49 riastradh Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -55,7 +55,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_serv.c,v 1.172 2015/04/21 03:19:03 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_serv.c,v 1.173 2017/04/26 03:02:49 riastradh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1859,6 +1859,7 @@ out:
nqsrv_getl(nd.ni_dvp, ND_WRITE);
nqsrv_getl(vp, ND_WRITE);
error = VOP_REMOVE(nd.ni_dvp, nd.ni_vp, &nd.ni_cnd);
+ vput(nd.ni_dvp);
} else {
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
if (nd.ni_dvp == vp)
@@ -2601,6 +2602,7 @@ out:
nqsrv_getl(nd.ni_dvp, ND_WRITE);
nqsrv_getl(vp, ND_WRITE);
error = VOP_RMDIR(nd.ni_dvp, nd.ni_vp, &nd.ni_cnd);
+ vput(nd.ni_dvp);
} else {
VOP_ABORTOP(nd.ni_dvp, &nd.ni_cnd);
if (nd.ni_dvp == nd.ni_vp)
Index: src/sys/nfs/nfs_vnops.c
diff -u src/sys/nfs/nfs_vnops.c:1.309 src/sys/nfs/nfs_vnops.c:1.310
--- src/sys/nfs/nfs_vnops.c:1.309 Tue Jan 19 10:56:59 2016
+++ src/sys/nfs/nfs_vnops.c Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: nfs_vnops.c,v 1.309 2016/01/19 10:56:59 hannken Exp $ */
+/* $NetBSD: nfs_vnops.c,v 1.310 2017/04/26 03:02:49 riastradh Exp $ */
/*
* Copyright (c) 1989, 1993
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.309 2016/01/19 10:56:59 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfs_vnops.c,v 1.310 2017/04/26 03:02:49 riastradh Exp $");
#ifdef _KERNEL_OPT
#include "opt_nfs.h"
@@ -1738,7 +1738,7 @@ again:
int
nfs_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnodeop_desc *a_desc;
struct vnode * a_dvp;
struct vnode * a_vp;
@@ -1790,7 +1790,6 @@ nfs_remove(void *v)
vrele(vp);
else
vput(vp);
- vput(dvp);
return (error);
}
@@ -2265,7 +2264,7 @@ nfs_mkdir(void *v)
int
nfs_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -2288,8 +2287,7 @@ nfs_rmdir(void *v)
struct nfsnode *dnp;
if (dvp == vp) {
- vrele(dvp);
- vput(dvp);
+ vrele(vp);
return (EINVAL);
}
nfsstats.rpccnt[NFSPROC_RMDIR]++;
@@ -2311,7 +2309,6 @@ nfs_rmdir(void *v)
VN_KNOTE(vp, NOTE_DELETE);
cache_purge(vp);
vput(vp);
- vput(dvp);
/*
* Kludge: Map ENOENT => 0 assuming that you have a reply to a retry.
*/
Index: src/sys/rump/librump/rumpvfs/rumpfs.c
diff -u src/sys/rump/librump/rumpvfs/rumpfs.c:1.147 src/sys/rump/librump/rumpvfs/rumpfs.c:1.148
--- src/sys/rump/librump/rumpvfs/rumpfs.c:1.147 Mon Apr 17 08:32:01 2017
+++ src/sys/rump/librump/rumpvfs/rumpfs.c Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpfs.c,v 1.147 2017/04/17 08:32:01 hannken Exp $ */
+/* $NetBSD: rumpfs.c,v 1.148 2017/04/26 03:02:49 riastradh Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Antti Kantee. All Rights Reserved.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.147 2017/04/17 08:32:01 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rumpfs.c,v 1.148 2017/04/26 03:02:49 riastradh Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@@ -983,7 +983,7 @@ rump_vop_mkdir(void *v)
static int
rump_vop_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -1015,16 +1015,14 @@ rump_vop_rmdir(void *v)
rn->rn_va.va_nlink = 0;
out:
- vput(dvp);
vput(vp);
-
return rv;
}
static int
rump_vop_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -1043,9 +1041,7 @@ rump_vop_remove(void *v)
rn->rn_flags |= RUMPNODE_CANRECLAIM;
rn->rn_va.va_nlink = 0;
- vput(dvp);
vput(vp);
-
return rv;
}
Index: src/sys/ufs/chfs/chfs_vnops.c
diff -u src/sys/ufs/chfs/chfs_vnops.c:1.31 src/sys/ufs/chfs/chfs_vnops.c:1.32
--- src/sys/ufs/chfs/chfs_vnops.c:1.31 Tue Apr 11 14:25:01 2017
+++ src/sys/ufs/chfs/chfs_vnops.c Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: chfs_vnops.c,v 1.31 2017/04/11 14:25:01 riastradh Exp $ */
+/* $NetBSD: chfs_vnops.c,v 1.32 2017/04/26 03:02:49 riastradh Exp $ */
/*-
* Copyright (c) 2010 Department of Software Engineering,
@@ -1032,9 +1032,9 @@ chfs_fsync(void *v)
int
chfs_remove(void *v)
{
- struct vnode *dvp = ((struct vop_remove_args *) v)->a_dvp;
- struct vnode *vp = ((struct vop_remove_args *) v)->a_vp;
- struct componentname *cnp = (((struct vop_remove_args *) v)->a_cnp);
+ struct vnode *dvp = ((struct vop_remove_v2_args *) v)->a_dvp;
+ struct vnode *vp = ((struct vop_remove_v2_args *) v)->a_vp;
+ struct componentname *cnp = (((struct vop_remove_v2_args *) v)->a_cnp);
dbg("remove\n");
KASSERT(VOP_ISLOCKED(dvp));
@@ -1056,7 +1056,6 @@ chfs_remove(void *v)
parent, cnp->cn_nameptr, cnp->cn_namelen);
out:
- vput(dvp);
vput(vp);
return error;
@@ -1195,9 +1194,9 @@ chfs_mkdir(void *v)
int
chfs_rmdir(void *v)
{
- struct vnode *dvp = ((struct vop_rmdir_args *) v)->a_dvp;
- struct vnode *vp = ((struct vop_rmdir_args *) v)->a_vp;
- struct componentname *cnp = ((struct vop_rmdir_args *) v)->a_cnp;
+ struct vnode *dvp = ((struct vop_rmdir_v2_args *) v)->a_dvp;
+ struct vnode *vp = ((struct vop_rmdir_v2_args *) v)->a_vp;
+ struct componentname *cnp = ((struct vop_rmdir_v2_args *) v)->a_cnp;
dbg("rmdir()\n");
KASSERT(VOP_ISLOCKED(dvp));
@@ -1226,7 +1225,6 @@ chfs_rmdir(void *v)
parent, cnp->cn_nameptr, cnp->cn_namelen);
out:
- vput(dvp);
vput(vp);
return error;
Index: src/sys/ufs/ext2fs/ext2fs_vnops.c
diff -u src/sys/ufs/ext2fs/ext2fs_vnops.c:1.125 src/sys/ufs/ext2fs/ext2fs_vnops.c:1.126
--- src/sys/ufs/ext2fs/ext2fs_vnops.c:1.125 Mon Aug 15 18:38:10 2016
+++ src/sys/ufs/ext2fs/ext2fs_vnops.c Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ext2fs_vnops.c,v 1.125 2016/08/15 18:38:10 jdolecek Exp $ */
+/* $NetBSD: ext2fs_vnops.c,v 1.126 2017/04/26 03:02:49 riastradh Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1993
@@ -65,7 +65,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.125 2016/08/15 18:38:10 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_vnops.c,v 1.126 2017/04/26 03:02:49 riastradh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -556,7 +556,7 @@ ext2fs_chown(struct vnode *vp, uid_t uid
int
ext2fs_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -590,7 +590,6 @@ ext2fs_remove(void *v)
vrele(vp);
else
vput(vp);
- vput(dvp);
return error;
}
@@ -787,7 +786,7 @@ out:
int
ext2fs_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -810,8 +809,7 @@ ext2fs_rmdir(void *v)
* No rmdir "." please.
*/
if (dp == ip) {
- vrele(dvp);
- vput(vp);
+ vrele(vp);
return EINVAL;
}
/*
@@ -845,8 +843,6 @@ ext2fs_rmdir(void *v)
dp->i_flag |= IN_CHANGE;
VN_KNOTE(dvp, NOTE_WRITE | NOTE_LINK);
cache_purge(dvp);
- vput(dvp);
- dvp = NULL;
/*
* Truncate inode. The only stuff left
* in the directory is "." and "..". The
@@ -863,8 +859,6 @@ ext2fs_rmdir(void *v)
cache_purge(ITOV(ip));
out:
VN_KNOTE(vp, NOTE_DELETE);
- if (dvp)
- vput(dvp);
vput(vp);
return error;
}
Index: src/sys/ufs/lfs/lfs_vnops.c
diff -u src/sys/ufs/lfs/lfs_vnops.c:1.313 src/sys/ufs/lfs/lfs_vnops.c:1.314
--- src/sys/ufs/lfs/lfs_vnops.c:1.313 Tue Apr 11 14:25:01 2017
+++ src/sys/ufs/lfs/lfs_vnops.c Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_vnops.c,v 1.313 2017/04/11 14:25:01 riastradh Exp $ */
+/* $NetBSD: lfs_vnops.c,v 1.314 2017/04/26 03:02:49 riastradh Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -125,7 +125,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.313 2017/04/11 14:25:01 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vnops.c,v 1.314 2017/04/26 03:02:49 riastradh Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -1083,7 +1083,7 @@ out:
int
lfs_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -1104,7 +1104,6 @@ lfs_remove(void *v)
vrele(vp);
else
vput(vp);
- vput(dvp);
return error;
}
error = ulfs_remove(ap);
@@ -1127,7 +1126,7 @@ lfs_remove(void *v)
int
lfs_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnodeop_desc *a_desc;
struct vnode *a_dvp;
struct vnode *a_vp;
@@ -1145,10 +1144,9 @@ lfs_rmdir(void *v)
ip = VTOI(vp);
if ((error = lfs_set_dirop(ap->a_dvp, ap->a_vp)) != 0) {
if (ap->a_dvp == vp)
- vrele(ap->a_dvp);
+ vrele(vp);
else
- vput(ap->a_dvp);
- vput(vp);
+ vput(vp);
return error;
}
error = ulfs_rmdir(ap);
Index: src/sys/ufs/lfs/ulfs_vnops.c
diff -u src/sys/ufs/lfs/ulfs_vnops.c:1.47 src/sys/ufs/lfs/ulfs_vnops.c:1.48
--- src/sys/ufs/lfs/ulfs_vnops.c:1.47 Tue Apr 11 05:48:04 2017
+++ src/sys/ufs/lfs/ulfs_vnops.c Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ulfs_vnops.c,v 1.47 2017/04/11 05:48:04 riastradh Exp $ */
+/* $NetBSD: ulfs_vnops.c,v 1.48 2017/04/26 03:02:49 riastradh Exp $ */
/* from NetBSD: ufs_vnops.c,v 1.232 2016/05/19 18:32:03 riastradh Exp */
/*-
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ulfs_vnops.c,v 1.47 2017/04/11 05:48:04 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ulfs_vnops.c,v 1.48 2017/04/26 03:02:49 riastradh Exp $");
#if defined(_KERNEL_OPT)
#include "opt_lfs.h"
@@ -500,7 +500,7 @@ ulfs_chown(struct vnode *vp, uid_t uid,
int
ulfs_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -536,7 +536,6 @@ ulfs_remove(void *v)
vrele(vp);
else
vput(vp);
- vput(dvp);
return (error);
}
@@ -667,7 +666,7 @@ ulfs_whiteout(void *v)
int
ulfs_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -697,10 +696,9 @@ ulfs_rmdir(void *v)
*/
if (dp == ip || vp->v_mountedhere != NULL) {
if (dp == ip)
- vrele(dvp);
+ vrele(vp);
else
- vput(dvp);
- vput(vp);
+ vput(vp);
return (EINVAL);
}
@@ -752,7 +750,6 @@ ulfs_rmdir(void *v)
out:
VN_KNOTE(vp, NOTE_DELETE);
vput(vp);
- vput(dvp);
return (error);
}
Index: src/sys/ufs/ufs/ufs_vnops.c
diff -u src/sys/ufs/ufs/ufs_vnops.c:1.236 src/sys/ufs/ufs/ufs_vnops.c:1.237
--- src/sys/ufs/ufs/ufs_vnops.c:1.236 Sat Mar 18 05:39:06 2017
+++ src/sys/ufs/ufs/ufs_vnops.c Wed Apr 26 03:02:49 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ufs_vnops.c,v 1.236 2017/03/18 05:39:06 riastradh Exp $ */
+/* $NetBSD: ufs_vnops.c,v 1.237 2017/04/26 03:02:49 riastradh Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.236 2017/03/18 05:39:06 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_vnops.c,v 1.237 2017/04/26 03:02:49 riastradh Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ffs.h"
@@ -714,7 +714,7 @@ ufs_chown(struct vnode *vp, uid_t uid, g
int
ufs_remove(void *v)
{
- struct vop_remove_args /* {
+ struct vop_remove_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -752,7 +752,6 @@ ufs_remove(void *v)
vrele(vp);
else
vput(vp);
- vput(dvp);
return (error);
}
@@ -1047,7 +1046,7 @@ ufs_mkdir(void *v)
int
ufs_rmdir(void *v)
{
- struct vop_rmdir_args /* {
+ struct vop_rmdir_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
@@ -1073,10 +1072,9 @@ ufs_rmdir(void *v)
*/
if (dp == ip || vp->v_mountedhere != NULL) {
if (dp == ip)
- vrele(dvp);
+ vrele(vp);
else
- vput(dvp);
- vput(vp);
+ vput(vp);
return (EINVAL);
}
@@ -1138,7 +1136,6 @@ ufs_rmdir(void *v)
out:
VN_KNOTE(vp, NOTE_DELETE);
vput(vp);
- vput(dvp);
return (error);
}