[PATCH 04/47] block: provide a new BLK_EH_QUIESCED timeout return value
Christoph Hellwig
hch at lst.de
Tue Nov 24 11:40:36 PST 2015
On Tue, Nov 24, 2015 at 01:12:52PM -0500, Jeff Moyer wrote:
> >> 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?
For blk-mq it won't be freed. For the non blk-mq case the tag
to request lookup will have to handle that case, but that path isn't
exercised by nvme.
More information about the Linux-nvme
mailing list