• Hillf Danton's avatar
    io-uring: drop completion when removing file · 4afdb733
    Hillf Danton authored
    A case of task hung was reported by syzbot,
    
    INFO: task syz-executor975:9880 blocked for more than 143 seconds.
          Not tainted 5.6.0-rc6-syzkaller #0
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    syz-executor975 D27576  9880   9878 0x80004000
    Call Trace:
     schedule+0xd0/0x2a0 kernel/sched/core.c:4154
     schedule_timeout+0x6db/0xba0 kernel/time/timer.c:1871
     do_wait_for_common kernel/sched/completion.c:83 [inline]
     __wait_for_common kernel/sched/completion.c:104 [inline]
     wait_for_common kernel/sched/completion.c:115 [inline]
     wait_for_completion+0x26a/0x3c0 kernel/sched/completion.c:136
     io_queue_file_removal+0x1af/0x1e0 fs/io_uring.c:5826
     __io_sqe_files_update.isra.0+0x3a1/0xb00 fs/io_uring.c:5867
     io_sqe_files_update fs/io_uring.c:5918 [inline]
     __io_uring_register+0x377/0x2c00 fs/io_uring.c:7131
     __do_sys_io_uring_register fs/io_uring.c:7202 [inline]
     __se_sys_io_uring_register fs/io_uring.c:7184 [inline]
     __x64_sys_io_uring_register+0x192/0x560 fs/io_uring.c:7184
     do_syscall_64+0xf6/0x7d0 arch/x86/entry/common.c:294
     entry_SYSCALL_64_after_hwframe+0x49/0xbe
    
    and bisect pointed to 05f3fb3c ("io_uring: avoid ring quiesce for
    fixed file set unregister and update").
    
    It is down to the order that we wait for work done before flushing it
    while nobody is likely going to wake us up.
    
    We can drop that completion on stack as flushing work itself is a sync
    operation we need and no more is left behind it.
    
    To that end, io_file_put::done is re-used for indicating if it can be
    freed in the workqueue worker context.
    Reported-and-Inspired-by: default avatarsyzbot <syzbot+538d1957ce178382a394@syzkaller.appspotmail.com>
    Signed-off-by: default avatarHillf Danton <hdanton@sina.com>
    
    Rename ->done to ->free_pfile
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    4afdb733
io_uring.c 188 KB