Hi. I'm trying to use mtdswap together with ubi increase memory. Normally mtdswap has its own wear leveling but I want ubi to do that job instead. So I removed all wear leveling and oob usage from mtdswap (or really it doesn't do wear leveling if the mtd device has no oob) and am now using it with a gluebi mtd partition on top of ubi. It works good but in some occasions it deadlocks because ubi internally uses kmalloc, which in case of low memory, waits for swap to complete. But swap won't complete until the data is written to flash. Do you have any idea how to mitigate this issue? I'm attaching the patched mtdswap.c file. Here is the kernel hung message: [ 5161.590076] INFO: task kworker/0:0H:4 blocked for more than 61 seconds. [ 5161.596700] Tainted: G O 5.2.0-rc3-00024-g788a024921c4-dirty #175 [ 5161.604615] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [ 5161.612440] kworker/0:0H D 0 4 2 0x00000000 [ 5161.617938] Workqueue: kblockd blk_mq_run_work_fn [ 5161.622663] [] (__schedule) from [] (schedule+0x29/0x78) [ 5161.629710] [] (schedule) from [] (io_schedule+0xf/0x28) [ 5161.636771] [] (io_schedule) from [] (blk_mq_get_tag+0x123/0x1f8) [ 5161.644604] [] (blk_mq_get_tag) from [] (blk_mq_get_request+0x8b/0x23c) [ 5161.652954] [] (blk_mq_get_request) from [] (blk_mq_make_request+0x87/0x244) [ 5161.661739] [] (blk_mq_make_request) from [] (generic_make_request+0xa5/0x194) [ 5161.670706] [] (generic_make_request) from [] (submit_bio+0x33/0xf8) [ 5161.678792] [] (submit_bio) from [] (__swap_writepage+0x251/0x280) [ 5161.686719] [] (__swap_writepage) from [] (shrink_page_list+0x6f1/0xacc) [ 5161.695158] [] (shrink_page_list) from [] (shrink_inactive_list+0x13f/0x26c) [ 5161.703939] [] (shrink_inactive_list) from [] (shrink_node+0x371/0x6a8) [ 5161.712289] [] (shrink_node) from [] (try_to_free_pages+0x179/0x498) [ 5161.720375] [] (try_to_free_pages) from [] (__alloc_pages_nodemask+0x30b/0x8c0) [ 5161.729414] [] (__alloc_pages_nodemask) from [] (new_slab+0x7f/0x294) [ 5161.737592] [] (new_slab) from [] (___slab_alloc.constprop.13+0xfd/0x218) [ 5161.746111] [] (___slab_alloc.constprop.13) from [] (__kmalloc+0x7f/0xc4) [ 5161.754635] [] (__kmalloc) from [] (sync_erase+0x57/0x14c) [ 5161.761856] [] (sync_erase) from [] (__erase_worker+0x21/0x294) [ 5161.769503] [] (__erase_worker) from [] (erase_worker+0xb/0x44) [ 5161.777157] [] (erase_worker) from [] (ubi_wl_flush+0x7f/0xd4) [ 5161.784725] [] (ubi_wl_flush) from [] (gluebi_erase+0x113/0x148) [ 5161.792469] [] (gluebi_erase) from [] (mtdswap_erase_block+0x6f/0xc0) [ 5161.800642] [] (mtdswap_erase_block) from [] (mtdswap_gc+0x195/0x548) [ 5161.808810] [] (mtdswap_gc) from [] (mtdswap_background+0x19/0x20) [ 5161.816724] [] (mtdswap_background) from [] (mtd_queue_rq+0x357/0x40c) [ 5161.824985] [] (mtd_queue_rq) from [] (blk_mq_dispatch_rq_list+0x7d/0x378) [ 5161.833595] [] (blk_mq_dispatch_rq_list) from [] (blk_mq_do_dispatch_sched+0x43/0x8c) [ 5161.843158] [] (blk_mq_do_dispatch_sched) from [] (blk_mq_sched_dispatch_requests+0x8d/0xf0) [ 5161.853325] [] (blk_mq_sched_dispatch_requests) from [] (__blk_mq_run_hw_queue+0x37/0xb4) [ 5161.863237] [] (__blk_mq_run_hw_queue) from [] (process_one_work+0x11d/0x2a8) [ 5161.872107] [] (process_one_work) from [] (worker_thread+0xed/0x3a0) [ 5161.880195] [] (worker_thread) from [] (kthread+0xe9/0xf0) [ 5161.887410] [] (kthread) from [] (ret_from_fork+0x11/0x38) [ 5161.894625] Exception stack(0xc2841fb0 to 0xc2841ff8) [ 5161.899672] 1fa0: 00000000 00000000 00000000 00000000 [ 5161.907843] 1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 5161.916013] 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000 [ 5161.922686] INFO: task kswapd0:86 blocked for more than 61 seconds. [ 5161.928944] Tainted: G O 5.2.0-rc3-00024-g788a024921c4-dirty #175 [ 5161.936858] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [ 5161.944682] kswapd0 D 0 86 2 0x00000000 [ 5161.950180] [] (__schedule) from [] (schedule+0x29/0x78) [ 5161.957222] [] (schedule) from [] (io_schedule+0xf/0x28) [ 5161.964275] [] (io_schedule) from [] (blk_mq_get_tag+0x123/0x1f8) [ 5161.972107] [] (blk_mq_get_tag) from [] (blk_mq_get_request+0x8b/0x23c) [ 5161.980454] [] (blk_mq_get_request) from [] (blk_mq_make_request+0x87/0x244) [ 5161.989230] [] (blk_mq_make_request) from [] (generic_make_request+0xa5/0x194) [ 5161.998210] [] (generic_make_request) from [] (submit_bio+0x33/0xf8) [ 5162.006304] [] (submit_bio) from [] (__swap_writepage+0x251/0x280) [ 5162.014224] [] (__swap_writepage) from [] (shrink_page_list+0x6f1/0xacc) [ 5162.022661] [] (shrink_page_list) from [] (shrink_inactive_list+0x13f/0x26c) [ 5162.031442] [] (shrink_inactive_list) from [] (shrink_node+0x371/0x6a8) [ 5162.039785] [] (shrink_node) from [] (kswapd+0x25f/0x548) [ 5162.046922] [] (kswapd) from [] (kthread+0xe9/0xf0) [ 5162.053537] [] (kthread) from [] (ret_from_fork+0x11/0x38) [ 5162.060751] Exception stack(0xc293ffb0 to 0xc293fff8) [ 5162.065797] ffa0: 00000000 00000000 00000000 00000000 [ 5162.073969] ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 5162.082140] ffe0: 00000000 00000000 00000000 00000000 00000013 00000000 [ 5162.088878] INFO: task klogd:151 blocked for more than 61 seconds. [ 5162.095068] Tainted: G O 5.2.0-rc3-00024-g788a024921c4-dirty #175 [ 5162.102977] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [ 5162.110798] klogd D 0 151 1 0x00000000 [ 5162.116289] [] (__schedule) from [] (schedule+0x29/0x78) [ 5162.123342] [] (schedule) from [] (io_schedule+0xf/0x28) [ 5162.130393] [] (io_schedule) from [] (blk_mq_get_tag+0x123/0x1f8) [ 5162.138214] [] (blk_mq_get_tag) from [] (blk_mq_get_request+0x8b/0x23c) [ 5162.146563] [] (blk_mq_get_request) from [] (blk_mq_make_request+0x87/0x244) [ 5162.155352] [] (blk_mq_make_request) from [] (generic_make_request+0xa5/0x194) [ 5162.164309] [] (generic_make_request) from [] (submit_bio+0x33/0xf8) [ 5162.172397] [] (submit_bio) from [] (__swap_writepage+0x251/0x280) [ 5162.180314] [] (__swap_writepage) from [] (shrink_page_list+0x6f1/0xacc) [ 5162.188743] [] (shrink_page_list) from [] (shrink_inactive_list+0x13f/0x26c) [ 5162.197524] [] (shrink_inactive_list) from [] (shrink_node+0x371/0x6a8) [ 5162.205873] [] (shrink_node) from [] (try_to_free_pages+0x179/0x498) [ 5162.213961] [] (try_to_free_pages) from [] (__alloc_pages_nodemask+0x30b/0x8c0) [ 5162.223004] [] (__alloc_pages_nodemask) from [] (new_slab+0x7f/0x294) [ 5162.231185] [] (new_slab) from [] (___slab_alloc.constprop.13+0xfd/0x218) [ 5162.239700] [] (___slab_alloc.constprop.13) from [] (__kmalloc_track_caller+0x7f/0xc4) [ 5162.249355] [] (__kmalloc_track_caller) from [] (__kmalloc_reserve.constprop.23+0x17/0x44) [ 5162.259353] [] (__kmalloc_reserve.constprop.23) from [] (__alloc_skb+0x63/0x118) [ 5162.268482] [] (__alloc_skb) from [] (alloc_skb_with_frags+0x27/0x104) [ 5162.276745] [] (alloc_skb_with_frags) from [] (sock_alloc_send_pskb+0x1ad/0x1c4) [ 5162.285878] [] (sock_alloc_send_pskb) from [] (unix_dgram_sendmsg+0x12d/0x3a4) [ 5162.294836] [] (unix_dgram_sendmsg) from [] (sock_sendmsg+0xb/0x18) [ 5162.302840] [] (sock_sendmsg) from [] (__sys_sendto+0x77/0x9c) [ 5162.310409] [] (__sys_sendto) from [] (sys_send+0xf/0x14) [ 5162.317537] [] (sys_send) from [] (ret_fast_syscall+0x1/0x62) [ 5162.325012] Exception stack(0xc215ffa8 to 0xc215fff0) [ 5162.330064] ffa0: 00000001 0009f008 00000003 0009f180 0000002d 00004000 [ 5162.338231] ffc0: 00000001 0009f008 00000014 00000121 ffffffff b6fa9000 000819b2 be910cd0 [ 5162.346401] ffe0: 00000000 be910c0c b6f50dcb b6f544d8 [ 5162.351577] INFO: task ntpd:267 blocked for more than 62 seconds. [ 5162.357672] Tainted: G O 5.2.0-rc3-00024-g788a024921c4-dirty #175 [ 5162.365590] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. [ 5162.373413] ntpd D 0 267 1 0x00000001 [ 5162.378904] [] (__schedule) from [] (schedule+0x29/0x78) [ 5162.385957] [] (schedule) from [] (io_schedule+0xf/0x28) [ 5162.393011] [] (io_schedule) from [] (blk_mq_get_tag+0x123/0x1f8) [ 5162.400841] [] (blk_mq_get_tag) from [] (blk_mq_get_request+0x8b/0x23c) [ 5162.409183] [] (blk_mq_get_request) from [] (blk_mq_make_request+0x87/0x244) [ 5162.417968] [] (blk_mq_make_request) from [] (generic_make_request+0xa5/0x194) [ 5162.426925] [] (generic_make_request) from [] (submit_bio+0x33/0xf8) [ 5162.435013] [] (submit_bio) from [] (swap_readpage+0x133/0x198) [ 5162.442669] [] (swap_readpage) from [] (read_swap_cache_async+0x2d/0x40) [ 5162.451102] [] (read_swap_cache_async) from [] (swapin_readahead+0x81/0x32c) [ 5162.459887] [] (swapin_readahead) from [] (do_swap_page+0x2bf/0x3ac) [ 5162.467971] [] (do_swap_page) from [] (handle_mm_fault+0x293/0x750) [ 5162.475977] [] (handle_mm_fault) from [] (do_page_fault+0xd3/0x280) [ 5162.483982] [] (do_page_fault) from [] (do_DataAbort+0x2d/0x78) [ 5162.491636] [] (do_DataAbort) from [] (__dabt_usr+0x4f/0x60) /Emil