Re: [PATCH] MPSAFE/LOOKUP_SHARED cd9660
- From: "Paul B. Mahol" <onemda@xxxxxxxxx>
- Date: Wed, 10 Dec 2008 00:16:43 +0100
On 12/10/08, Paul B. Mahol <onemda@xxxxxxxxx> wrote:
On 12/9/08, John Baldwin <jhb@xxxxxxxxxxx> wrote:s/Yes I do. Its to late here ...
On Friday 05 December 2008 04:54:23 pm Paul B. Mahol wrote:
On 12/5/08, John Baldwin <jhb@xxxxxxxxxxx> wrote:order
On Friday 05 December 2008 03:56:31 pm Paul B. Mahol wrote:
On 12/5/08, John Baldwin <jhb@xxxxxxxxxxx> wrote:bar's
On Thursday 20 November 2008 05:47:28 pm John Baldwin wrote:
On Thursday 20 November 2008 04:30:57 pm Paul B. Mahol wrote:shared
On 11/19/08, John Baldwin <jhb@xxxxxxxxxxx> wrote:
This is a relatively simple patch to mark cd9660 MPSAFE and
enable
referenceforlookups. The changes to cd9660_lookup() mirror similar changes
to
ufs_lookup() to use static variables for local data rather than
abusing
i-node members of the parent directory. I've done some light
testing
of
this, but not super-strenuous. This patch also includes simple
locking
serializethe iconv support in the kernel. That locking uses an sx lock
to
open and close of translator tables and the associated
refcount.
Actual
conversions do not need any locks, however as the mount holds a
onmodules
kldload/kldstat/kldunloadthe table.
http://www.FreeBSD.org/~jhb/patches/cd9660_mpsafe.patch
With this patch I'm unable to kldunload libiconv.ko once it is
loaded.
And trying to kldunload libiconv.ko will make any next
to fail waiting forever(livelock).
Regression were not encountered while only cd9660.ko were
kldloaded.
So this is actually due to a bug in the module code. If you have
two
like this:
DECLARE_MODULE(foo, SI_SUB_DRIVERS, SI_ORDER_FIRST);
DECLARE_MODULE(bar, SI_SUB_DRIVERS, SI_ORDER_SECOND);
The SI_* constants ensure that foo's module handler is called
before
module handler for MOD_LOAD. However, we don't enforce a reverse
that(you(bar
then foo) for MOD_UNLOAD. In fact, the order of MOD_UNLOAD events
is
random
and has no relation to the SI_* constants. :(
What is happening here is that one of the 'bar' modules in
libiconv.ko
is
getting unloaded after 'foo' gets unloaded and using a destroyed
lock
in
get a panic if you run with INVARIANTS).
So this should now be fixed with this commit. If you could verify
that
iconv
works ok with the latest kern_module.c I would appreciate it.
Author: jhb
Date: Fri Dec 5 16:47:30 2008
New Revision: 185642
URL: http://svn.freebsd.org/changeset/base/185642
Log:
When the SYSINIT() to load a module invokes the MOD_LOAD event
successfully,
move that module to the head of the associated linker file's list
of
modules.
The end result is that once all the modules are loaded, they are
sorted
invokethe reverse of their load order. This causes the kernel linker to
the MOD_QUIESCE and MOD_UNLOAD events in the reverse of the order
eventsMOD_LOAD was invoked. This means that the ordering of MOD_LOAD
MOD_UNLOADthat
is set by the SI_* paramters to DECLARE_MODULE() are now honored
in
the
same
order they would be for SYSUNINIT() for the MOD_QUIESCE and
events.
MFC after: 1 month
--
John Baldwin
Yes it works, I tried hard multiple times kldload/kldunload
{libiconv,cd9660,cd9660_iconv in various order} to livelock/panic it,
but without success.
FYI following LORs happened:
lock order reversal:
1st 0xc4322ce8 isofs (isofs) @ /usr/src/sys/kern/vfs_lookup.c:442
2nd 0xd7d8d740 bufwait (bufwait) @ /usr/src/sys/kern/vfs_bio.c:2443
3rd 0xc4322bdc isofs (isofs) @
/usr/src/sys/modules/cd9660/../../fs/cd9660/cd9660_vfsops.c:694
This LOR should be addressed in the latest cd9660 locking patches.
--
John Baldwin
Oh, why I did not checked new version?
Yes that LOR have gone, but when doing "ll -R" first time on /mnt
I got following messages from kernel:
RRIP without PX field? x ~ 50 times.
I see you changed LK_EXCLUSIVE to flags, and with MPSAFE ....
The RRIP stuff is all done in cd9660_vget_internal() under an exclusive
lock.
It could be a property of the ISO image. "PX" holds permissions (owner,
etc.). Do you get the same messages w/o the patch with the same ISO image
/
CD?
--
John Baldwin
No I do not, but I may try other CDs I have many of them, including FreeBSD
one.
If it is irrelevant than it should not be displayed.
--
Paul
_______________________________________________
freebsd-current@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe@xxxxxxxxxxx"
- Follow-Ups:
- Re: [PATCH] MPSAFE/LOOKUP_SHARED cd9660
- From: Paul B. Mahol
- Re: [PATCH] MPSAFE/LOOKUP_SHARED cd9660
- From: Paul B. Mahol
- Re: [PATCH] MPSAFE/LOOKUP_SHARED cd9660
- References:
- Re: [PATCH] MPSAFE/LOOKUP_SHARED cd9660
- From: John Baldwin
- Re: [PATCH] MPSAFE/LOOKUP_SHARED cd9660
- From: Paul B. Mahol
- Re: [PATCH] MPSAFE/LOOKUP_SHARED cd9660
- From: John Baldwin
- Re: [PATCH] MPSAFE/LOOKUP_SHARED cd9660
- From: Paul B. Mahol
- Re: [PATCH] MPSAFE/LOOKUP_SHARED cd9660
- Prev by Date: Re: [PATCH] MPSAFE/LOOKUP_SHARED cd9660
- Next by Date: Re: Laptop w/ dark screen & no (working) keyboard
- Previous by thread: Re: [PATCH] MPSAFE/LOOKUP_SHARED cd9660
- Next by thread: Re: [PATCH] MPSAFE/LOOKUP_SHARED cd9660
- Index(es):
Relevant Pages
|