On Wed, 2018-08-08 at 01:44 +-0800, Ming Lei wrote: +AD4- +AEAAQA- -3772,6 +-3764,7 +AEAAQA- int blk+AF8-pre+AF8-runtime+AF8-suspend(struct request+AF8-queue +ACo-q) +AD4- if (+ACE-q-+AD4-dev) +AD4- return ret+ADs- +AD4- +AD4- +- mutex+AF8-lock(+ACY-q-+AD4-pm+AF8-lock)+ADs- +AD4- spin+AF8-lock+AF8-irq(q-+AD4-queue+AF8-lock)+ADs- +AD4- if (q-+AD4-nr+AF8-pending) +AHs- +AD4- ret +AD0- -EBUSY+ADs- +AD4- +AEAAQA- -3780,6 +-3773,13 +AEAAQA- int blk+AF8-pre+AF8-runtime+AF8-suspend(struct request+AF8-queue +ACo-q) +AD4- q-+AD4-rpm+AF8-status +AD0- RPM+AF8-SUSPENDING+ADs- +AD4- +AH0- Hello Ming, As far as I can see none of the patches in this series adds a call to blk+AF8-pm+AF8-add+AF8-request() in the blk-mq code. Does that mean that q-+AD4-nr+AF8-pending will always be zero for blk-mq code with your approach and hence that runtime suspend can get triggered while I/O is in progress, e.g. if blk+AF8-queue+AF8-enter() is called concurrently with blk+AF8-pre+AF8-runtime+AF8-suspend()? Thanks, Bart.