On Fri, 2004-04-02 at 12:44, Mike Anderson wrote: > Where does the last put come from? How do you close the open race or > know when the final put_disk has been called? SCSI cannot do this alone > as we have created and registered an object in another subsystem > (alloc_disk and add_disk) and we have no indication when that objects > ref count has reached zero. > > Or > > As I previous stated in the thread below I have the gendisk / > block layer locking mis-understood and there is something that SCSI can > do.
well, sr has elected to merge these, so it takes a reference to sdev_gendev on first open and releases it on last close of the block device. This is what ties the SCSI model into the final put_disk(). We founder on calling driver ->remove before the final put of sdev_gendev. Anything with objects in more than one refcounted subsystem is responsible for tying the refcounts together uniformly. There should be no open race as long as we error out correctly if a reference to the underlying sdev_gendev cannot be obtained (because the object is being destroyed). sr seems to do this correctly. The indication when the non-scsi object's refcount reaches zero is given to us because at that point the sr code does a put of the sdev_gendev (and if this is the last put, that should trigger cleanup). James ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel