This looks ok to me, or at least better than the version from Ming to archive the same. I kinda hate to add more REQ_* flags than really nessecary though. Maybe instead of the mapping to REQ_* as suggested to ming blk_queue_enter should instead take the BLK_MQ_REQ_* flags and we'll add BLK_MQ_REQ_PREEMPT, and pass those to blk_get_request. If it wasn't for Linus beeing angry due to block churn I'd be very tempted to suggest that.