Messages in this thread | | | Date | Tue, 12 Apr 2011 11:51:45 +0900 | From | Tejun Heo <> | Subject | Re: Strange block/scsi/workqueue issue |
| |
Hello, James.
On Mon, Apr 11, 2011 at 07:47:56PM -0500, James Bottomley wrote: > Actually, I don't think it's anything to do with the user process stuff. > The problem seems to be that the block delay function ends up being the > last user of the SCSI device, so it does the final put of the sdev when > it's finished processing. This will trigger queue destruction > (blk_cleanup_queue) and so on with your analysis.
Hmm... this I can understand.
> The problem seems to be that with the new workqueue changes, the queue > itself may no longer be the last holder of a reference on the sdev > because the queue destruction is in the sdev release function and a > queue cannot now be destroyed from its own delayed work. This is a bit > contrary to the principles SCSI was using, which was that we drive queue > lifetime from the sdev, not vice versa.
But confused here. Why does it make any difference whether the release operation is in the request_fn context or not? What makes SCSI refcounting different from others?
Thanks.
-- tejun
| |