summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/fs/deadfs/dead_vnops.c10
-rw-r--r--sys/kern/vfs_subr.c14
-rw-r--r--sys/sys/vnode.h2
3 files changed, 18 insertions, 8 deletions
diff --git a/sys/fs/deadfs/dead_vnops.c b/sys/fs/deadfs/dead_vnops.c
index 7a07b38..e255654 100644
--- a/sys/fs/deadfs/dead_vnops.c
+++ b/sys/fs/deadfs/dead_vnops.c
@@ -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);
}
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index daaa5b1..9d4b3a9 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -3751,6 +3751,20 @@ assert_vop_slocked(struct vnode *vp, const char *str)
#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;
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index 4c84ea3..b5784e4 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -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; \
OpenPOWER on IntegriCloud