diff options
| author | Filipe Manana <fdmanana@suse.com> | 2026-03-11 15:17:03 +0300 |
|---|---|---|
| committer | David Sterba <dsterba@suse.com> | 2026-04-07 19:56:03 +0300 |
| commit | f5405ffce78d6e79babc8246df6566b7e001dadb (patch) | |
| tree | d1743632f6f56fe5328b13bef0a0d90675f402e9 | |
| parent | 0f7c10d662ac4fcd749543568d15cd65325feef9 (diff) | |
| download | linux-f5405ffce78d6e79babc8246df6566b7e001dadb.tar.xz | |
btrfs: make add_extent_changeset() only return errors or success
Currently add_extent_changeset() always returns the return value from its
call to ulist_add(), which can return an error, 0 or 1. There are no
callers that care about the difference between 0 and 1 and all except one
of them, check for negative values and ignore other values, but there is
another caller (btrfs_clear_extent_bit_changeset()) that must set its
'ret' variable to 0 after calling add_extent_changeset(), so that it
does not return an unexpected value of 1 to its caller.
So change add_extent_changeset() to only return errors or 0, avoiding
that caller (and any future callers) from having to deal with a return
value of 1.
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
| -rw-r--r-- | fs/btrfs/extent-io-tree.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/btrfs/extent-io-tree.c b/fs/btrfs/extent-io-tree.c index 93dca9199249..5972fe28716e 100644 --- a/fs/btrfs/extent-io-tree.c +++ b/fs/btrfs/extent-io-tree.c @@ -187,6 +187,8 @@ static int add_extent_changeset(struct extent_state *state, u32 bits, struct extent_changeset *changeset, int set) { + int ret; + if (!changeset) return 0; if (set && (state->state & bits) == bits) @@ -195,7 +197,10 @@ static int add_extent_changeset(struct extent_state *state, u32 bits, return 0; changeset->bytes_changed += state->end - state->start + 1; - return ulist_add(&changeset->range_changed, state->start, state->end, GFP_ATOMIC); + ret = ulist_add(&changeset->range_changed, state->start, state->end, GFP_ATOMIC); + if (ret < 0) + return ret; + return 0; } static inline struct extent_state *next_state(struct extent_state *state) @@ -745,7 +750,6 @@ hit_next: "add_extent_changeset", ret); goto out; } - ret = 0; if (tree->owner == IO_TREE_INODE_IO) btrfs_clear_delalloc_extent(tree->inode, state, bits); |
