Date: Fri, 7 Apr 1995 07:10:03 -0700 From: pritc003@maroon.tc.umn.edu To: freebsd-bugs Subject: kern/303: msdosfs: moving a file into another directory causes panic Message-ID: <199504071410.HAA07924@freefall.cdrom.com> In-Reply-To: Your message of Fri, 7 Apr 1995 09:08:44 -0500 <199504071408.JAA00346@mpp.com>
index | next in thread | previous in thread | raw e-mail
>Number: 303
>Category: kern
>Synopsis: msdosfs: moving a file into another directory causes panic
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: freebsd-bugs (FreeBSD bugs mailing list)
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Apr 7 07:10:02 1995
>Originator: Mike Pritchard
>Organization:
Mike Pritchard
>Release: FreeBSD 2.1.0-Development i386
>Environment:
>Description:
When using an MS-DOS file system, attempting to move a file into a
subdirectory will result in the following panic:
panic: msdosfs_hashins: already locked
This is because the code that does the rename already has the denode
locked when msdosfs_hashins() gets called, resulting in the panic
when the routine attempts to lock the denode again.
>How-To-Repeat:
Mount a MS-DOS file system, cd to the mount point and do the following:
# touch zzz
# mkdir xxx
# mv zzz xxx
Boom!
>Fix:
The attached patch changes the msdosfs_hashins() routine to not lock the
denode. The caller is now resposible for obtaining the lock instead
of having msdosfs_hashins() do it for them.
*** /usr/src/sys/msdosfs/msdosfs_denode.c Sun Mar 19 09:19:07 1995
--- msdosfs/msdosfs_denode.c Fri Apr 7 08:49:57 1995
***************
*** 119,131 ****
dep->de_next = deq;
dep->de_prev = depp;
*depp = dep;
- if (dep->de_flag & DE_LOCKED)
- panic("msdosfs_hashins: already locked");
- if (curproc)
- dep->de_lockholder = curproc->p_pid;
- else
- dep->de_lockholder = -1;
- dep->de_flag |= DE_LOCKED;
}
static void
--- 119,124 ----
***************
*** 235,240 ****
--- 228,234 ----
* can't be accessed until we've read it in and have done what we
* need to it.
*/
+ VOP_LOCK(nvp);
msdosfs_hashins(ldep);
/*
>Audit-Trail:
>Unformatted:
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199504071410.HAA07924>
