Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 2 Apr 2010 14:03:01 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r206093 - in head/sys: fs/deadfs kern sys
Message-ID:  <201004021403.o32E31o2076431@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;				\



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201004021403.o32E31o2076431>