* [PATCH] btrfs: abort transaction on failure to update inode for hole punching and reflinking
@ 2026-09-16 15:02 fdmanana
2026-09-16 21:26 ` Qu Wenruo
0 siblings, 1 reply; 2+ messages in thread
From: fdmanana @ 2026-09-16 15:02 UTC (permalink / raw)
To: linux-btrfs
From: Filipe Manana <fdmanana@suse.com>
If we fail to update the inode we error out without aborting the
transaction, which can result in a persistent inconsistency if after
the failure the transaction is committed, as we have dropped file
extent items from a range and either punched a hole or insert a new file
extent item for that range (for reflinks).
So add the missing transaction abort.
Fixes: 2aaa66558172 ("Btrfs: add hole punching")
Signed-off-by: Filipe Manana <fdmanana@suse.com>
---
fs/btrfs/file.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 20e15dc30bfb..f978c6524aa0 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -2509,8 +2509,10 @@ int btrfs_replace_file_extents(struct btrfs_inode *inode,
inode_set_ctime_current(&inode->vfs_inode));
ret = btrfs_update_inode(trans, inode);
- if (ret)
+ if (unlikely(ret)) {
+ btrfs_abort_transaction(trans, ret);
break;
+ }
btrfs_end_transaction(trans);
btrfs_btree_balance_dirty(fs_info);
--
2.47.2
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] btrfs: abort transaction on failure to update inode for hole punching and reflinking
2026-09-16 15:02 [PATCH] btrfs: abort transaction on failure to update inode for hole punching and reflinking fdmanana
@ 2026-09-16 21:26 ` Qu Wenruo
0 siblings, 0 replies; 2+ messages in thread
From: Qu Wenruo @ 2026-09-16 21:26 UTC (permalink / raw)
To: fdmanana, linux-btrfs
在 2026/9/17 00:32, fdmanana@kernel.org 写道:
> From: Filipe Manana <fdmanana@suse.com>
>
> If we fail to update the inode we error out without aborting the
> transaction, which can result in a persistent inconsistency if after
> the failure the transaction is committed, as we have dropped file
> extent items from a range and either punched a hole or insert a new file
> extent item for that range (for reflinks).
>
> So add the missing transaction abort.
>
> Fixes: 2aaa66558172 ("Btrfs: add hole punching")
> Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Thanks,
Qu> ---
> fs/btrfs/file.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
> index 20e15dc30bfb..f978c6524aa0 100644
> --- a/fs/btrfs/file.c
> +++ b/fs/btrfs/file.c
> @@ -2509,8 +2509,10 @@ int btrfs_replace_file_extents(struct btrfs_inode *inode,
> inode_set_ctime_current(&inode->vfs_inode));
>
> ret = btrfs_update_inode(trans, inode);
> - if (ret)
> + if (unlikely(ret)) {
> + btrfs_abort_transaction(trans, ret);
> break;
> + }
>
> btrfs_end_transaction(trans);
> btrfs_btree_balance_dirty(fs_info);
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-09-16 21:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-16 15:02 [PATCH] btrfs: abort transaction on failure to update inode for hole punching and reflinking fdmanana
2026-09-16 21:26 ` Qu Wenruo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox