On Thu, 2019-04-04 at 16:43 +-0800, Ming Lei wrote: +AD4 diff --git a/block/blk-mq.c b/block/blk-mq.c +AD4 index b512ba0cb359..41c12d9008b7 100644 +AD4 --- a/block/blk-mq.c +AD4 +-+-+- b/block/blk-mq.c +AD4 +AEAAQA -3224,8 +-3224,11 +AEAAQA static void +AF8AXw-blk+AF8-mq+AF8-update+AF8-nr+AF8-hw+AF8-queues(struct blk+AF8-mq+AF8-tag+AF8-set +ACo-set, +AD4 if (nr+AF8-hw+AF8-queues +ADw 1 +AHwAfA nr+AF8-hw+AF8-queues +AD0APQ set-+AD4-nr+AF8-hw+AF8-queues) +AD4 return+ADs +AD4 +AD4 - list+AF8-for+AF8-each+AF8-entry(q, +ACY-set-+AD4-tag+AF8-list, tag+AF8-set+AF8-list) +AD4 +- list+AF8-for+AF8-each+AF8-entry(q, +ACY-set-+AD4-tag+AF8-list, tag+AF8-set+AF8-list) +AHs +AD4 blk+AF8-mq+AF8-freeze+AF8-queue(q)+ADs +AD4 +- blk+AF8-mq+AF8-quiesce+AF8-queue(q)+ADs +AD4 +- blk+AF8-sync+AF8-queue(q)+ADs +AD4 +- +AH0 +AD4 /+ACo +AD4 +ACo Sync with blk+AF8-mq+AF8-queue+AF8-tag+AF8-busy+AF8-iter. +AD4 +ACo-/ +AD4 +AEAAQA -3269,8 +-3272,10 +AEAAQA static void +AF8AXw-blk+AF8-mq+AF8-update+AF8-nr+AF8-hw+AF8-queues(struct blk+AF8-mq+AF8-tag+AF8-set +ACo-set, +AD4 list+AF8-for+AF8-each+AF8-entry(q, +ACY-set-+AD4-tag+AF8-list, tag+AF8-set+AF8-list) +AD4 blk+AF8-mq+AF8-elv+AF8-switch+AF8-back(+ACY-head, q)+ADs +AD4 +AD4 - list+AF8-for+AF8-each+AF8-entry(q, +ACY-set-+AD4-tag+AF8-list, tag+AF8-set+AF8-list) +AD4 +- list+AF8-for+AF8-each+AF8-entry(q, +ACY-set-+AD4-tag+AF8-list, tag+AF8-set+AF8-list) +AHs +AD4 +- blk+AF8-mq+AF8-unquiesce+AF8-queue(q)+ADs +AD4 blk+AF8-mq+AF8-unfreeze+AF8-queue(q)+ADs +AD4 +- +AH0 +AD4 +AH0 +AD4 +AD4 void blk+AF8-mq+AF8-update+AF8-nr+AF8-hw+AF8-queues(struct blk+AF8-mq+AF8-tag+AF8-set +ACo-set, int nr+AF8-hw+AF8-queues) Are you sure this patch is sufficient? What prevents that blk+AF8-mq+AF8-run+AF8-hw+AF8-queues() gets called after the blk+AF8-mq+AF8-quiesce() and blk+AF8-sync+AF8-queue() calls have finished and before the queue is unfrozen? Bart.