On 5/25/11, Kostik Belousov <[email protected]> wrote:
> On Wed, May 25, 2011 at 02:07:10PM +0200, Oliver Pinter wrote:
>> this or likely this script is enough for test?
>>
>> ---8<---
>> #!/bin/csh
>>
>> @ a = 100
>>
>> while ( $a )
>>         foreach i ( "umass" "cdce" "foo" "bar" )
>>                 kldload $i&
>>         end
>>
>>         foreach i ( "umass" "cdce" "foo" "bar" )
>>                 kldunload $i&
>>         end
>>         @ a--
>> end
>> ---8<---
> Only if the unload of any of the listed modules caused destruction
> of some devfs node.
>
> May be, the easiest for 7 is to create some md(4) device and then
> destroy it.
>
>>
>> On 5/25/11, Kostik Belousov <[email protected]> wrote:
>> > On Wed, May 25, 2011 at 12:11:29PM +0200, Oliver Pinter wrote:
>> >> MFC to 7-STABLE?
>> > Somebody need to test it for 7 (I do not expect any failures, but I also
>> > prefer to not commit untested changes).
>> >
>> > The testing should include destroying some devfs nodes, e.g. by loading
>> > and unloading a driver that creates and destroys them.

Runned 3 times the attached test script. The system remained stable.


FreeBSD pandora-d 7.4-STABLE FreeBSD 7.4-STABLE #83 r222274=49d86ad:
Wed May 25 17:49:38 CEST 2011
root@pandora-d:/usr/obj/usr/src/sys/stable  amd64

>
commit 49d86ad84d6347006ef359ffa0fa0e575d700246
Author: kib <kib@ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f>
Date:   Wed May 25 03:25:14 2011 +0000

    MFC r222086: The protection against the race with dev_rel(), introduced in r163328, should be extended to cover destroy_devl() calls for the children of the destroyed dev.
    
    git-svn-id: svn://svn.freebsd.org/base/stable/8@222274 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f

diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c
index 09859aa..3207438 100644
--- a/sys/kern/kern_conf.c
+++ b/sys/kern/kern_conf.c
@@ -874,6 +874,8 @@ destroy_devl(struct cdev *dev)
 	/* Remove name marking */
 	dev->si_flags &= ~SI_NAMED;
 
+	dev->si_refcount++;	/* Avoid race with dev_rel() */
+
 	/* If we are a child, remove us from the parents list */
 	if (dev->si_flags & SI_CHILD) {
 		LIST_REMOVE(dev, si_siblings);
@@ -890,7 +892,6 @@ destroy_devl(struct cdev *dev)
 		dev->si_flags &= ~SI_CLONELIST;
 	}
 
-	dev->si_refcount++;	/* Avoid race with dev_rel() */
 	csw = dev->si_devsw;
 	dev->si_devsw = NULL;	/* already NULL for SI_ALIAS */
 	while (csw != NULL && csw->d_purge != NULL && dev->si_threadcount) {

Attachment: devfs_test.log.xz
Description: Binary data

_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to