My world and kernel are out of sync, I updated kernel to reproduce bug on new kernel, so some info (netstat, vmstat) is not available in crash info file. This bug is easily reproducible, so I don't think it is a problem. If you need more information, or want crash info from synced kernel/world, feel free to ask. Fix: Patch attached with submission follows: How-To-Repeat: cd /tmp mkdir -p a/a mv a/a .
Responsible Changed From-To: freebsd-bugs->freebsd-fs Over to maintainer(s).
Could you test the patch attached. Thanks, Gleb.
Hi! On a system FreeBSD 8.2-STABLE error is present. The patch works fine. FreeBSD datacenter.technica-03.local 8.2-STABLE FreeBSD 8.2-STABLE #0: Thu Aug 4 12:36:33 EEST 2011 root@datacenter.technica-03.local:/usr/obj/usr/src/sys/SMP64 amd64 # cd /tmp # mkdir -p a/a # mv a/a . mv: rename a/a to ./a: Directory not empty # df -h | egrep tmpfs tmpfs 1.0G 16k 1G 0% /tmp --- Best regards, Andrei Lavreniyuk.
Patch works for me, it fixes panic. Thanks.
Author: ivoras Date: Tue Nov 22 16:18:12 2011 New Revision: 227822 URL: http://svn.freebsd.org/changeset/base/227822 Log: 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 Modified: head/sys/fs/tmpfs/tmpfs_vnops.c Modified: head/sys/fs/tmpfs/tmpfs_vnops.c ============================================================================== --- head/sys/fs/tmpfs/tmpfs_vnops.c Tue Nov 22 16:08:12 2011 (r227821) +++ head/sys/fs/tmpfs/tmpfs_vnops.c Tue Nov 22 16:18:12 2011 (r227822) @@ -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: _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
State Changed From-To: open->patched Over to committer as MFC reminder.
Responsible Changed From-To: freebsd-fs->ivoras
Author: ivoras Date: Mon Jan 9 13:35:10 2012 New Revision: 229855 URL: http://svn.freebsd.org/changeset/base/229855 Log: MFC r227822: Avoid panics from recursive rename operations. PR: kern/159418 Modified: stable/9/sys/fs/tmpfs/tmpfs_vnops.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/amd64/include/xen/ (props changed) stable/9/sys/boot/ (props changed) stable/9/sys/boot/i386/efi/ (props changed) stable/9/sys/boot/ia64/efi/ (props changed) stable/9/sys/boot/ia64/ski/ (props changed) stable/9/sys/boot/powerpc/boot1.chrp/ (props changed) stable/9/sys/boot/powerpc/ofw/ (props changed) stable/9/sys/cddl/contrib/opensolaris/ (props changed) stable/9/sys/conf/ (props changed) stable/9/sys/contrib/dev/acpica/ (props changed) stable/9/sys/contrib/octeon-sdk/ (props changed) stable/9/sys/contrib/pf/ (props changed) stable/9/sys/contrib/x86emu/ (props changed) Modified: stable/9/sys/fs/tmpfs/tmpfs_vnops.c ============================================================================== --- stable/9/sys/fs/tmpfs/tmpfs_vnops.c Mon Jan 9 12:06:09 2012 (r229854) +++ stable/9/sys/fs/tmpfs/tmpfs_vnops.c Mon Jan 9 13:35:10 2012 (r229855) @@ -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: _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
State Changed From-To: patched->closed Committed, MFC-ed to 9