[PATCH 04/47] block: provide a new BLK_EH_QUIESCED timeout return value

Jeff Moyer jmoyer at redhat.com
Tue Nov 24 10:12:52 PST 2015


Christoph Hellwig <hch at infradead.org> writes:

> On Tue, Nov 24, 2015 at 11:34:22AM -0500, Jeff Moyer wrote:
>> CPU 1 takes an interrupt for the completion of the same request:
>> 
>> blk_complete_request():
>>         if (!blk_mark_rq_complete(req) ||  // this fails, as it's already marked complete
>>             test_and_clear_bit(REQ_ATOM_QUIESCED, &req->atomic_flags))  // this succeeds
>
> and clears the flag, so we'd need a race betweem this call to
> blk_mq_complete request and the later completion of all outstanding
> commands from reset.  For NVMe we ensure this by not taking completions

But we're completing the request, so the request will actually be freed.
Any references to this request are bogus at this point, no?

> onc we start reset, but we probably need to document this better.  I
> will ensure all this is properly documented in the next version!

Thanks, I think that will help a lot.

Cheers,
Jeff



More information about the Linux-nvme mailing list