svn commit: r277179 - in head/sys: dev/usb kern sys

Hans Petter Selasky hps at selasky.org
Wed Jan 14 19:54:59 UTC 2015


On 01/14/15 18:57, Andrey V. Elsukov wrote:
> On 14.01.2015 17:04, Hans Petter Selasky wrote:
>> Author: hselasky
>> Date: Wed Jan 14 14:04:29 2015
>> New Revision: 277179
>> URL: https://svnweb.freebsd.org/changeset/base/277179
>>
>> Log:
>>    Add a kernel function to delist our kernel character devices, so that
>>    the device name can be re-used right away in case we are destroying
>>    the character devices in the background.
>>
>>    MFC after:	4 days
>>    Reported by:	dchagin@
>>
>> Modified:
>>    head/sys/dev/usb/usb_device.c
>>    head/sys/kern/kern_conf.c
>>    head/sys/sys/conf.h
>>
>> Modified: head/sys/dev/usb/usb_device.c
>> ==============================================================================
>> --- head/sys/dev/usb/usb_device.c	Wed Jan 14 13:03:03 2015	(r277178)
>> +++ head/sys/dev/usb/usb_device.c	Wed Jan 14 14:04:29 2015	(r277179)
>> @@ -2019,7 +2019,10 @@ usb_destroy_dev(struct usb_fs_privdata *
>>   		usb_destroy_dev_sync(pd);
>>   		return;
>>   	}
>> -	
>> +
>> +	/* make sure we can re-use the device name */
>> +	delist_dev(pd->cdev);
>> +
>>   	USB_BUS_LOCK(bus);
>>   	LIST_INSERT_HEAD(&bus->pd_cleanup_list, pd, pd_next);
>>   	/* get cleanup going */
>>
>> Modified: head/sys/kern/kern_conf.c
>> ==============================================================================
>> --- head/sys/kern/kern_conf.c	Wed Jan 14 13:03:03 2015	(r277178)
>> +++ head/sys/kern/kern_conf.c	Wed Jan 14 14:04:29 2015	(r277179)
>> @@ -1114,6 +1114,23 @@ destroy_devl(struct cdev *dev)
>>   	}
>>   }
>>
>> +static void
>> +delist_dev_locked(struct cdev *dev)
>> +{
>> +	struct cdev *child;
>> +	devfs_destroy(dev);
>> +	LIST_FOREACH(child, &dev->si_children, si_siblings)
>> +		delist_dev_locked(child);
>> +}
>
> It looks a bit strange. First you call destroy(dev), then you are trying
> enumerate its children. It is ok?
>

Hi,

Maybe you misread dev_destroy() with devfs_destroy(). devfs_destroy() 
only clears a flag bit, so that the devfs system does no longer show the 
device and the duplicate device check done when you create a new 
character device is not seeing the yet-to-be destroyed device. It should 
be OK from what I can see and have tested.

--HPS


More information about the svn-src-all mailing list