svn commit: r206093 - in head/sys: fs/deadfs kern sys

Konstantin Belousov kib at FreeBSD.org
Fri Apr 2 14:03:02 UTC 2010


Author: kib
Date: Fri Apr  2 14:03:01 2010
New Revision: 206093
URL: http://svn.freebsd.org/changeset/base/206093

Log:
  Add function vop_rename_fail(9) that performs needed cleanup for locks
  and references of the VOP_RENAME(9) arguments. Use vop_rename_fail()
  in deadfs_rename().
  
  Tested by:	Mikolaj Golub
  MFC after:	1 week

Modified:
  head/sys/fs/deadfs/dead_vnops.c
  head/sys/kern/vfs_subr.c
  head/sys/sys/vnode.h

Modified: head/sys/fs/deadfs/dead_vnops.c
==============================================================================
--- head/sys/fs/deadfs/dead_vnops.c	Fri Apr  2 13:43:16 2010	(r206092)
+++ head/sys/fs/deadfs/dead_vnops.c	Fri Apr  2 14:03:01 2010	(r206093)
@@ -225,13 +225,7 @@ dead_rename(ap)
 		struct componentname *a_tcnp;
 	} */ *ap;
 {
-	if (ap->a_tvp)
-		vput(ap->a_tvp);
-	if (ap->a_tdvp == ap->a_tvp)
-		vrele(ap->a_tdvp);
-	else
-		vput(ap->a_tdvp);
-	vrele(ap->a_fdvp);
-	vrele(ap->a_fvp);
+
+	vop_rename_fail(ap);
 	return (EXDEV);
 }

Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c	Fri Apr  2 13:43:16 2010	(r206092)
+++ head/sys/kern/vfs_subr.c	Fri Apr  2 14:03:01 2010	(r206093)
@@ -3751,6 +3751,20 @@ assert_vop_slocked(struct vnode *vp, con
 #endif /* DEBUG_VFS_LOCKS */
 
 void
+vop_rename_fail(struct vop_rename_args *ap)
+{
+
+	if (ap->a_tvp != NULL)
+		vput(ap->a_tvp);
+	if (ap->a_tdvp == ap->a_tvp)
+		vrele(ap->a_tdvp);
+	else
+		vput(ap->a_tdvp);
+	vrele(ap->a_fdvp);
+	vrele(ap->a_fvp);
+}
+
+void
 vop_rename_pre(void *ap)
 {
 	struct vop_rename_args *a = ap;

Modified: head/sys/sys/vnode.h
==============================================================================
--- head/sys/sys/vnode.h	Fri Apr  2 13:43:16 2010	(r206092)
+++ head/sys/sys/vnode.h	Fri Apr  2 14:03:01 2010	(r206093)
@@ -720,6 +720,8 @@ void	vop_symlink_post(void *a, int rc);
 void	vop_unlock_post(void *a, int rc);
 void	vop_unlock_pre(void *a);
 
+void	vop_rename_fail(struct vop_rename_args *ap);
+
 #define	VOP_WRITE_PRE(ap)						\
 	struct vattr va;						\
 	int error, osize, ooffset, noffset;				\


More information about the svn-src-head mailing list