On Tue, Apr 06, 2021 at 02:49:02PM -0700, Bart Van Assche wrote: > Since in the next patch knowledge is required of whether or not it is > allowed to sleep inside the tag iteration functions, pass this context > information to the tag iteration functions. I have reviewed all callers of > tag iteration functions to verify these annotations by starting from the > output of the following grep command: > > git grep -nHE 'blk_mq_(all_tag|tagset_busy)_iter' > > My conclusions from that analysis are as follows: > - Sleeping is allowed in the blk-mq-debugfs code that iterates over tags. > - Since the blk_mq_tagset_busy_iter() calls in the mtip32xx driver are > preceded by a function that sleeps (blk_mq_quiesce_queue()), sleeping is > safe in the context of the blk_mq_tagset_busy_iter() calls. > - The same reasoning also applies to the nbd driver. > - All blk_mq_tagset_busy_iter() calls in the NVMe drivers are followed by a > call to a function that sleeps so sleeping inside blk_mq_tagset_busy_iter() > when called from the NVMe driver is fine. > - scsi_host_busy(), scsi_host_complete_all_commands() and > scsi_host_busy_iter() are used by multiple SCSI LLDs so analyzing whether > or not these functions may sleep is hard. Instead of performing that > analysis, make it safe to call these functions from atomic context. > > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > Acked-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx> > Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@xxxxxxx> > Cc: Ming Lei <ming.lei@xxxxxxxxxx> > Cc: Hannes Reinecke <hare@xxxxxxx> > Cc: Johannes Thumshirn <johannes.thumshirn@xxxxxxx> > Cc: John Garry <john.garry@xxxxxxxxxx> > Cc: Khazhy Kumykov <khazhy@xxxxxxxxxx> > Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx> Maybe you could also annotate blk_mq_all_tag_iter() with a might_sleep(). This would help to find API abusers more easily. Reviewed-by: Daniel Wagner <dwagner@xxxxxxx>