The patch titled Subject: block: remove deadlock in disk_clear_events has been added to the -mm tree. Its filename is block-remove-deadlock-in-disk_clear_events.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Derek Basehore <dbasehore@xxxxxxxxxxxx> Subject: block: remove deadlock in disk_clear_events In disk_clear_events(), do not put work on system_nrt_freezable_wq. Instead, put it on system_nrt_wq. There is a race between probing a usb and suspending the device. Since probing a usb calls disk_clear_events, which puts work on a frozen workqueue, probing cannot finish after the workqueue is frozen. However, suspending cannot finish until the usb probe is finished, so we get a deadlock. Signed-off-by: Derek Basehore <dbasehore@xxxxxxxxxxxx> Reviewed-by: Mandeep Singh Baines <msb@xxxxxxxxxxxx> Cc: Jens Axboe <axboe@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- block/genhd.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff -puN block/genhd.c~block-remove-deadlock-in-disk_clear_events block/genhd.c --- a/block/genhd.c~block-remove-deadlock-in-disk_clear_events +++ a/block/genhd.c @@ -1565,7 +1565,13 @@ unsigned int disk_clear_events(struct ge /* uncondtionally schedule event check and wait for it to finish */ disk_block_events(disk); - queue_delayed_work(system_freezable_wq, &ev->dwork, 0); + /* We need to put the work on system_nrt_wq here since there is a + * deadlock that happens while probing a usb device while suspending. If + * we put work on a freezable worqueue here, a usb probe will wait here + * until the workqueue is unfrozen during suspend. Since suspend waits + * on all probes to complete, we have a deadlock + */ + queue_delayed_work(system_nrt_wq, &ev->dwork, 0); flush_delayed_work(&ev->dwork); __disk_unblock_events(disk, false); _ Patches currently in -mm which might be from dbasehore@xxxxxxxxxxxx are linux-next.patch block-remove-deadlock-in-disk_clear_events.patch block-remove-deadlock-in-disk_clear_events-fix.patch block-prevent-race-cleanup.patch block-prevent-race-cleanup-fix.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html