Module Name:    src
Committed By:   hannken
Date:           Thu Feb  6 10:57:12 UTC 2014

Modified Files:
        src/sys/miscfs/genfs: genfs_rename.c
        src/sys/ufs/lfs: lfs_rename.c
        src/sys/ufs/ufs: ufs_rename.c

Log Message:
Move fstrans_start()/fstrans_done() into genfs_insane_rename() to protect
the complete rename operation like we do for all other vnode operations.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/miscfs/genfs/genfs_rename.c
cvs rdiff -u -r1.5 -r1.6 src/sys/ufs/lfs/lfs_rename.c
cvs rdiff -u -r1.9 -r1.10 src/sys/ufs/ufs/ufs_rename.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/miscfs/genfs/genfs_rename.c
diff -u src/sys/miscfs/genfs/genfs_rename.c:1.1 src/sys/miscfs/genfs/genfs_rename.c:1.2
--- src/sys/miscfs/genfs/genfs_rename.c:1.1	Tue May  8 23:53:26 2012
+++ src/sys/miscfs/genfs/genfs_rename.c	Thu Feb  6 10:57:12 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfs_rename.c,v 1.1 2012/05/08 23:53:26 riastradh Exp $	*/
+/*	$NetBSD: genfs_rename.c,v 1.2 2014/02/06 10:57:12 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_rename.c,v 1.1 2012/05/08 23:53:26 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_rename.c,v 1.2 2014/02/06 10:57:12 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/kauth.h>
@@ -45,6 +45,7 @@ __KERNEL_RCSID(0, "$NetBSD: genfs_rename
 #include <sys/namei.h>
 #include <sys/stat.h>
 #include <sys/vnode.h>
+#include <sys/fstrans.h>
 #include <sys/types.h>
 
 #include <miscfs/genfs/genfs.h>
@@ -176,6 +177,7 @@ genfs_insane_rename(void *v,
 	struct componentname *fcnp = ap->a_fcnp;
 	struct vnode *tdvp = ap->a_tdvp;
 	struct vnode *tvp = ap->a_tvp;
+	struct mount *mp = fdvp->v_mount;
 	struct componentname *tcnp = ap->a_tcnp;
 	kauth_cred_t cred;
 	int error;
@@ -194,6 +196,8 @@ genfs_insane_rename(void *v,
 	KASSERT(fdvp->v_type == VDIR);
 	KASSERT(tdvp->v_type == VDIR);
 
+	fstrans_start(mp, FSTRANS_SHARED);
+
 	cred = fcnp->cn_cred;
 
 	/*
@@ -228,6 +232,8 @@ genfs_insane_rename(void *v,
 	vrele(fdvp);
 	vrele(tdvp);
 
+	fstrans_done(mp);
+
 	return error;
 }
 

Index: src/sys/ufs/lfs/lfs_rename.c
diff -u src/sys/ufs/lfs/lfs_rename.c:1.5 src/sys/ufs/lfs/lfs_rename.c:1.6
--- src/sys/ufs/lfs/lfs_rename.c:1.5	Tue Jan 28 13:12:22 2014
+++ src/sys/ufs/lfs/lfs_rename.c	Thu Feb  6 10:57:12 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_rename.c,v 1.5 2014/01/28 13:12:22 martin Exp $	*/
+/*	$NetBSD: lfs_rename.c,v 1.6 2014/02/06 10:57:12 hannken Exp $	*/
 /*  from NetBSD: ufs_rename.c,v 1.6 2013/01/22 09:39:18 dholland Exp  */
 
 /*-
@@ -89,7 +89,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_rename.c,v 1.5 2014/01/28 13:12:22 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_rename.c,v 1.6 2014/02/06 10:57:12 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -108,7 +108,6 @@ __KERNEL_RCSID(0, "$NetBSD: lfs_rename.c
 #include <sys/signalvar.h>
 #include <sys/kauth.h>
 #include <sys/syslog.h>
-#include <sys/fstrans.h>
 
 #include <uvm/uvm.h>
 #include <uvm/uvm_pmap.h>
@@ -518,8 +517,6 @@ ulfs_gro_remove(struct mount *mp, kauth_
 	KASSERT(VOP_ISLOCKED(vp) == LK_EXCLUSIVE);
 	KASSERT(cnp->cn_nameiop == DELETE);
 
-	fstrans_start(mp, FSTRANS_SHARED);
-
 	/* XXX ulfs_dirremove decrements vp's link count for us.  */
 	error = ulfs_dirremove(dvp, ulr, VTOI(vp), cnp->cn_flags, 0);
 	if (error)
@@ -529,7 +526,6 @@ ulfs_gro_remove(struct mount *mp, kauth_
 	VN_KNOTE(vp, (VTOI(vp)->i_nlink? NOTE_LINK : NOTE_DELETE));
 
 out1:
-	fstrans_done(mp);
 	return error;
 }
 
@@ -831,7 +827,6 @@ ulfs_gro_rename(struct mount *mp, kauth_
 	 * Commence hacking of the data on disk.
 	 */
 
-	fstrans_start(mp, FSTRANS_SHARED);
 	error = 0;
 
 	/*
@@ -1046,7 +1041,6 @@ whymustithurtsomuch:
 
 arghmybrainhurts:
 /*ihateyou:*/
-	fstrans_done(mp);
 	return error;
 }
 

Index: src/sys/ufs/ufs/ufs_rename.c
diff -u src/sys/ufs/ufs/ufs_rename.c:1.9 src/sys/ufs/ufs/ufs_rename.c:1.10
--- src/sys/ufs/ufs/ufs_rename.c:1.9	Mon Nov  4 19:58:02 2013
+++ src/sys/ufs/ufs/ufs_rename.c	Thu Feb  6 10:57:12 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs_rename.c,v 1.9 2013/11/04 19:58:02 christos Exp $	*/
+/*	$NetBSD: ufs_rename.c,v 1.10 2014/02/06 10:57:12 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -34,12 +34,11 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_rename.c,v 1.9 2013/11/04 19:58:02 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_rename.c,v 1.10 2014/02/06 10:57:12 hannken Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
 #include <sys/errno.h>
-#include <sys/fstrans.h>
 #include <sys/kauth.h>
 #include <sys/mount.h>
 #include <sys/namei.h>
@@ -334,7 +333,6 @@ ufs_gro_rename(struct mount *mp, kauth_c
 	 * Commence hacking of the data on disk.
 	 */
 
-	fstrans_start(mp, FSTRANS_SHARED);
 	error = UFS_WAPBL_BEGIN(mp);
 	if (error)
 		goto ihateyou;
@@ -555,7 +553,6 @@ arghmybrainhurts:
 	UFS_WAPBL_END(mp);
 
 ihateyou:
-	fstrans_done(mp);
 	return error;
 }
 
@@ -786,7 +783,6 @@ ufs_gro_remove(struct mount *mp, kauth_c
 	KASSERT(VOP_ISLOCKED(vp) == LK_EXCLUSIVE);
 	KASSERT(cnp->cn_nameiop == DELETE);
 
-	fstrans_start(mp, FSTRANS_SHARED);
 	error = UFS_WAPBL_BEGIN(mp);
 	if (error)
 		goto out0;
@@ -800,7 +796,7 @@ ufs_gro_remove(struct mount *mp, kauth_c
 	VN_KNOTE(vp, (VTOI(vp)->i_nlink? NOTE_LINK : NOTE_DELETE));
 
 out1:	UFS_WAPBL_END(mp);
-out0:	fstrans_done(mp);
+out0:
 	return error;
 }
 

Reply via email to