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;                             \
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to