On Tue, Dec 18, 2018 at 08:42:10AM -0700, Jens Axboe wrote: > For the upcoming async polled IO, we can't sleep allocating requests. > If we do, then we introduce a deadlock where the submitter already > has async polled IO in-flight, but can't wait for them to complete > since polled requests must be active found and reaped. So two comments here. First I think after the next -rc1 we really need to rename REQ_HIPRI to REQ_POLLED. Unlike the iocb hipri flag which is an advice to treat this I/O as urgent REQ_POLLED is a hard charaterisation and having the hipri name is badly misnamed for that. Second I retract my suggestion to add this _ASYNC variant, as it seems to cause more confusion than it helps. I think instead we want a helper like this: static void bio_set_polled(struct bio *bio, struct kiocb *kiocb) { bio->bi_opf |= REQ_POLLED; if (!is_sync_kiocb(kiocb) bio->bi_opf |= REQ_NOWAIT; } maybe plus comments to better indicate the intentional and consolidate the is_sync check.