From 338abaf0dc9230a6627de1a532b7fea5f13623eb Mon Sep 17 00:00:00 2001 From: Hongling Zeng Date: Mon, 7 Sep 2026 11:57:26 +0800 Subject: [PATCH] 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: 4dc8f4ee2d46 ("ntfs: handle signal interruption in fallocate") Cc: stable@vger.kernel.org Signed-off-by: Hongling Zeng Reviewed-by: Baolin Liu Reviewed-by: Hyunchul Lee Signed-off-by: Namjae Jeon --- fs/ntfs/attrib.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/ntfs/attrib.c b/fs/ntfs/attrib.c index eb6a166cfcc7..808b44671fff 100644 --- a/fs/ntfs/attrib.c +++ b/fs/ntfs/attrib.c @@ -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;