Hello mm people, I want to ask you the following question which stemmed from analysing and chasing this particular deadlock: http://permalink.gmane.org/gmane.linux.kernel/2056730 To summarise it: For simplicity I will use the following nomenclature: t1 - kworker/u96:0 t2 - kworker/u98:39 t3 - kworker/u98:7 t1 issues drain_all_pages which generates IPI's, at the same time however, t2 has already started doing async write of pages as part of its normal operation but is blocked upon t1 completion of its IPI (generated from drain_all_pages) since they both work on the same dm-thin volume. At the same time again, t3 is executing ext4_finish_bio, which disables interrupts, yet is dependent on t2 completing its writes. But since it has disabled interrupts, it wont respond to t1's IPI and at this point a hard lock up occurs. This happens, since drain_all_pages calls on_each_cpu_mask with the last argument equal to "true" meaning "wait until the ipi handler has finished", which of course will never happen in the described situation. Based on that I was wondering whether avoiding such situation might merit making drain_all_pages invocation from __alloc_pages_direct_reclaim dependent on a particular GFP being passed e.g. GFP_NOPCPDRAIN or something along those lines? Alternatively would it be possible to make the IPI asycnrhonous e.g. calling on_each_cpu_mask with the last argument equal to false? Regards, Nikolay -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>