btrfs: report filemap_fdata<write|wait>_range() error
authorAnand Jain <anand.jain@oracle.com>
Tue, 16 Apr 2024 02:06:58 +0000 (10:06 +0800)
committerDavid Sterba <dsterba@suse.com>
Tue, 7 May 2024 19:31:07 +0000 (21:31 +0200)
In the function btrfs_write_marked_extents() and in __btrfs_wait_marked_extents()
return the actual error if when filemap_fdata<write|wait>_range() fails.

Suggested-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/transaction.c

index 3e3bcc5f64c6c3ec9161a92193f1a3d9f04babae..8c3b3cda139009171119fdfd8897838caa4b0ce1 100644 (file)
@@ -1156,6 +1156,8 @@ int btrfs_write_marked_extents(struct btrfs_fs_info *fs_info,
                else if (wait_writeback)
                        werr = filemap_fdatawait_range(mapping, start, end);
                free_extent_state(cached_state);
+               if (werr)
+                       break;
                cached_state = NULL;
                cond_resched();
                start = end + 1;
@@ -1198,6 +1200,8 @@ static int __btrfs_wait_marked_extents(struct btrfs_fs_info *fs_info,
                if (err)
                        werr = err;
                free_extent_state(cached_state);
+               if (werr)
+                       break;
                cached_state = NULL;
                cond_resched();
                start = end + 1;