Commit 2970525f authored by Jingkai Tan's avatar Jingkai Tan Committed by David Sterba
Browse files

btrfs: handle discard errors in in btrfs_finish_extent_commit()



Coverity (ID: 1226842) reported that the return value of
btrfs_discard_extent() is assigned to ret but is immediately
overwritten by unpin_extent_range() without being checked.

Use the same error handling that is done later in the same function.

Signed-off-by: default avatarJingkai Tan <contact@jingk.ai>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent ecb7c248
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -2933,9 +2933,15 @@ int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans)
	while (!TRANS_ABORTED(trans) && cached_state) {
		struct extent_state *next_state;

		if (btrfs_test_opt(fs_info, DISCARD_SYNC))
		if (btrfs_test_opt(fs_info, DISCARD_SYNC)) {
			ret = btrfs_discard_extent(fs_info, start,
						   end + 1 - start, NULL, true);
			if (ret) {
				btrfs_warn(fs_info,
				"discard failed for extent [%llu, %llu]: errno=%d %s",
					   start, end, ret, btrfs_decode_error(ret));
			}
		}

		next_state = btrfs_next_extent_state(unpin, cached_state);
		btrfs_clear_extent_dirty(unpin, start, end, &cached_state);