mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
ntfs: use fatal_signal_pending() for fallocate interruption checks
The fallocate implementation uses signal checks to let a long allocation
loop abort early. However, signal_pending() also returns true for
TIF_NOTIFY_SIGNAL, which io_uring uses to deliver task_work completions
to the submitting task.
generic/616 is an io_uring fsx soak test that issues fsx-style
read/write requests through io_uring and calls fallocate() directly in
between. A pending io_uring task_work notification can therefore make
signal_pending() true inside ntfs_attr_fallocate() even though no real
signal was delivered.
That caused the previous signal-interruption patch to return -EINTR for
an io_uring notification, which fsx treats as a fatal failure. Switch
both checks to fatal_signal_pending() so only fatal signals interrupt
the allocation loop. A real fatal signal still returns -EINTR, and any
other error still takes precedence.
Fixes: 4dc8f4ee2d ("ntfs: handle signal interruption in fallocate")
Cc: stable@vger.kernel.org
Signed-off-by: Hongling Zeng <zenghongling@kylinos.cn>
Reviewed-by: Baolin Liu <liubaolin@kylinos.cn>
Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
This commit is contained in:
parent
a0c022c1da
commit
338abaf0dc
|
|
@ -5855,7 +5855,7 @@ int ntfs_attr_fallocate(struct ntfs_inode *ni, loff_t start, loff_t byte_len, bo
|
|||
goto out;
|
||||
}
|
||||
|
||||
if (signal_pending(current))
|
||||
if (fatal_signal_pending(current))
|
||||
goto signal_out;
|
||||
|
||||
vcn += alloc_cnt;
|
||||
|
|
@ -5876,7 +5876,7 @@ int ntfs_attr_fallocate(struct ntfs_inode *ni, loff_t start, loff_t byte_len, bo
|
|||
try_alloc_cnt, &balloc, false, false);
|
||||
up_write(&ni->runlist.lock);
|
||||
mutex_unlock(&ni->mrec_lock);
|
||||
if (err || signal_pending(current))
|
||||
if (err || fatal_signal_pending(current))
|
||||
goto signal_out;
|
||||
|
||||
vcn += alloc_cnt;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user