[PATCH] block: avoild hang when bio_list is non-NULL in submit_bio_wait()
Gao Xiang
hsiangkao at linux.alibaba.com
Tue Mar 3 01:23:04 AEDT 2026
Hi Christoph,
On 2026/3/2 21:50, Christoph Hellwig wrote:
> On Mon, Mar 02, 2026 at 10:51:03AM +0800, Jiucheng Xu via B4 Relay wrote:
>> From: Jiucheng Xu <jiucheng.xu at amlogic.com>
>>
>> When current->bio_list is non-NULL in submit_bio_wait(),
>> submit_bio_noacct_nocheck appends bio to bio_list but skips IO
>> submission, causing submit_bio_wait() to hang indefinitely.
>>
>> Fix this by temporarily backup bio_list, setting bio_list to
>> NULL before calling submit_bio(), then restoring bio_list
>> after submit_bio() returns.
>
> No. Fix this by not doing something that is a bad idea.
>
>> I've trimmed down the call stack, as follows:
>>
>> f2fs_submit_read_io
>> submit_bio
>> mmc_blk_mq_recovery
>> z_erofs_endio
>> vm_map_ram
>
> ->bi_end_io code really should not be having random in_atomic()
> checks that make it completely different, but even if they have
Thanks for the head-up.
For this part, I'm pretty sure we need this particular one
otherwise the scheduling performance (latency sensitive)
is unacceptable for all Android phone users.
> that need to use GFP_NOIO.
Yes, it should make vm_map_ram() in the end_io path use
GFP_NOIO instead.
Jiucheng, could you add memalloc_noio_{save,restore}() to
wrap up this path?
Thanks,
Gao Xiang
More information about the Linux-erofs
mailing list