summaryrefslogtreecommitdiffstats
path: root/sys/fs/tmpfs
diff options
context:
space:
mode:
authorivoras <ivoras@FreeBSD.org>2011-11-22 16:18:12 +0000
committerivoras <ivoras@FreeBSD.org>2011-11-22 16:18:12 +0000
commit6123cbfb2edc5d69a7cd104442dd30ccfc45be48 (patch)
tree94d01f928c24c7a512c313304c6a95fa30c2de77 /sys/fs/tmpfs
parentda7efa5819516076c7872ef1ed39b29bdf2643af (diff)
downloadFreeBSD-src-6123cbfb2edc5d69a7cd104442dd30ccfc45be48.zip
FreeBSD-src-6123cbfb2edc5d69a7cd104442dd30ccfc45be48.tar.gz
Avoid panics from recursive rename operations. Not a perfect patch but
good enough for now. PR: kern/159418 Submitted by: Gleb Kurtsou Reviewed by: kib MFC after: 1 month
Diffstat (limited to 'sys/fs/tmpfs')
-rw-r--r--sys/fs/tmpfs/tmpfs_vnops.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/sys/fs/tmpfs/tmpfs_vnops.c b/sys/fs/tmpfs/tmpfs_vnops.c
index 6f52491..dfe1183 100644
--- a/sys/fs/tmpfs/tmpfs_vnops.c
+++ b/sys/fs/tmpfs/tmpfs_vnops.c
@@ -965,11 +965,8 @@ tmpfs_rename(struct vop_rename_args *v)
/* If we need to move the directory between entries, lock the
* source so that we can safely operate on it. */
- if (tdvp != fdvp) {
- error = vn_lock(fdvp, LK_EXCLUSIVE | LK_RETRY);
- if (error != 0)
- goto out;
- }
+ if (fdvp != tdvp && fdvp != tvp)
+ vn_lock(fdvp, LK_EXCLUSIVE | LK_RETRY);
fdnode = VP_TO_TMPFS_DIR(fdvp);
fnode = VP_TO_TMPFS_NODE(fvp);
de = tmpfs_dir_lookup(fdnode, fnode, fcnp);
@@ -1143,7 +1140,7 @@ tmpfs_rename(struct vop_rename_args *v)
error = 0;
out_locked:
- if (fdnode != tdnode)
+ if (fdvp != tdvp && fdvp != tvp)
VOP_UNLOCK(fdvp, 0);
out:
OpenPOWER on IntegriCloud