On Thu, Apr 29, 2021 at 09:27:37AM +0200, Christoph Hellwig wrote: > On Wed, Apr 28, 2021 at 10:32:38AM +0800, Ming Lei wrote: > > > diff --git a/drivers/nvme/host/multipath.c b/drivers/nvme/host/multipath.c > > > index 4e2c3a6787e9..1d17b2387884 100644 > > > --- a/drivers/nvme/host/multipath.c > > > +++ b/drivers/nvme/host/multipath.c > > > @@ -442,6 +442,8 @@ int nvme_mpath_alloc_disk(struct nvme_ctrl *ctrl, struct nvme_ns_head *head) > > > if (!q) > > > goto out; > > > blk_queue_flag_set(QUEUE_FLAG_NONROT, q); > > > + blk_queue_flag_set(QUEUE_FLAG_NOWAIT, q); > > > > BLK_MQ_F_BLOCKING is set for nvme-tcp, and the blocking may be done inside > > nvme_ns_head_submit_bio(), is that one problem? > > The point of BLK_MQ_F_BLOCKING is that ->queue_rq can block, and > because of that it is not called from the submitting context but in > a work queue. nvme-tcp also sets QUEUE_FLAG_NOWAIT, just like all blk-mq > drivers. BLK_MQ_F_BLOCKING can be called from submitting context, see blk_mq_try_issue_directly(). Thanks, Ming