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-all
mailing list