Skip to content

Commit 1c37d89

Browse files
fdmananakdave
authored andcommitted
btrfs: fix lost error when running device stats on multiple devices fs
Whenever we get an error updating the device stats item for a device in btrfs_run_dev_stats() we allow the loop to go to the next device, and if updating the stats item for the next device succeeds, we end up losing the error we had from the previous device. Fix this by breaking out of the loop once we get an error and make sure it's returned to the caller. Since we are in the transaction commit path (and in the critical section actually), returning the error will result in a transaction abort. Fixes: 733f4fb ("Btrfs: read device stats on mount, write modified ones during commit") Signed-off-by: Filipe Manana <[email protected]> Reviewed-by: David Sterba <[email protected]> Signed-off-by: David Sterba <[email protected]>
1 parent a85b46d commit 1c37d89

1 file changed

Lines changed: 3 additions & 2 deletions

File tree

fs/btrfs/volumes.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8099,8 +8099,9 @@ int btrfs_run_dev_stats(struct btrfs_trans_handle *trans)
80998099
smp_rmb();
81008100

81018101
ret = update_dev_stat_item(trans, device);
8102-
if (!ret)
8103-
atomic_sub(stats_cnt, &device->dev_stats_ccnt);
8102+
if (ret)
8103+
break;
8104+
atomic_sub(stats_cnt, &device->dev_stats_ccnt);
81048105
}
81058106
mutex_unlock(&fs_devices->device_list_mutex);
81068107

0 commit comments

Comments
 (0)