[PATCH v2] Revert "fs/ntfs3: Replace inode_trylock with inode_lock"

Konstantin Komarov posted 1 patch 3 months ago
fs/ntfs3/file.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
[PATCH v2] Revert "fs/ntfs3: Replace inode_trylock with inode_lock"
Posted by Konstantin Komarov 3 months ago
This reverts commit 69505fe98f198ee813898cbcaf6770949636430b.

Initially, conditional lock acquisition was removed to fix an xfstest bug
that was observed during internal testing. The deadlock reported by syzbot
is resolved by reintroducing conditional acquisition. The xfstest bug no
longer occurs on kernel version 6.16-rc1 during internal testing. I
assume that changes in other modules may have contributed to this.

Fixes: 69505fe98f19 ("fs/ntfs3: Replace inode_trylock with inode_lock")
Reported-by: syzbot+a91fcdbd2698f99db8f4@syzkaller.appspotmail.com
Suggested-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
---
 fs/ntfs3/file.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c
index 65fb27d1e17c..2e321b84a1ed 100644
--- a/fs/ntfs3/file.c
+++ b/fs/ntfs3/file.c
@@ -322,7 +322,10 @@ static int ntfs_file_mmap(struct file *file, struct vm_area_struct *vma)
 		}
 
 		if (ni->i_valid < to) {
-			inode_lock(inode);
+			if (!inode_trylock(inode)) {
+				err = -EAGAIN;
+				goto out;
+			}
 			err = ntfs_extend_initialized_size(file, ni,
 							   ni->i_valid, to);
 			inode_unlock(inode);
-- 
2.43.0
Re: [PATCH v2] Revert "fs/ntfs3: Replace inode_trylock with inode_lock"
Posted by Lorenzo Stoakes 3 months ago
On Tue, Jul 08, 2025 at 09:57:09AM +0200, Konstantin Komarov wrote:
> This reverts commit 69505fe98f198ee813898cbcaf6770949636430b.
>
> Initially, conditional lock acquisition was removed to fix an xfstest bug
> that was observed during internal testing. The deadlock reported by syzbot
> is resolved by reintroducing conditional acquisition. The xfstest bug no
> longer occurs on kernel version 6.16-rc1 during internal testing. I
> assume that changes in other modules may have contributed to this.

Great to have additional info about xfstest there.

>
> Fixes: 69505fe98f19 ("fs/ntfs3: Replace inode_trylock with inode_lock")
> Reported-by: syzbot+a91fcdbd2698f99db8f4@syzkaller.appspotmail.com

Thanks for swapping out the reported-by!

> Suggested-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
> Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>

LGTM so:

Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>

> ---
>  fs/ntfs3/file.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c
> index 65fb27d1e17c..2e321b84a1ed 100644
> --- a/fs/ntfs3/file.c
> +++ b/fs/ntfs3/file.c
> @@ -322,7 +322,10 @@ static int ntfs_file_mmap(struct file *file, struct vm_area_struct *vma)
>  		}
>
>  		if (ni->i_valid < to) {
> -			inode_lock(inode);
> +			if (!inode_trylock(inode)) {
> +				err = -EAGAIN;
> +				goto out;
> +			}
>  			err = ntfs_extend_initialized_size(file, ni,
>  							   ni->i_valid, to);
>  			inode_unlock(inode);
> --
> 2.43.0
>