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; }