Message ID | 20210629085025.98437-1-lijian_8010a29@163.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | fs: btrfs: extent_map: removed unneeded variable | expand |
On 29/06/2021 10:51, lijian_8010a29@163.com wrote: > From: lijian <lijian@yulong.com> > > removed unneeded variable 'ret'. Wouldn't it make more sense to return an error (-ENOENT??) in case the em lookup fails and handle the error in btrfs_finish_ordered_io() as this is the only caller of unpin_extent_cache()? I've actually tripped over this a couple of times already when investigating extent map and ordered extent splitting problems on zoned filesystems: em = lookup_extent_mapping(tree, start, len); WARN_ON(!em || em->start != start); Maybe even turn this WARN_ON() into an ASSERT() when introducing proper error handling, as we shouldn't really get there unless we have a logical error.
On Tue, Jun 29, 2021 at 09:04:40AM +0000, Johannes Thumshirn wrote: > On 29/06/2021 10:51, lijian_8010a29@163.com wrote: > > From: lijian <lijian@yulong.com> > > > > removed unneeded variable 'ret'. > > Wouldn't it make more sense to return an error (-ENOENT??) in case > the em lookup fails and handle the error in btrfs_finish_ordered_io() > as this is the only caller of unpin_extent_cache()? > > I've actually tripped over this a couple of times already when > investigating extent map and ordered extent splitting problems > on zoned filesystems: > > em = lookup_extent_mapping(tree, start, len); > WARN_ON(!em || em->start != start); > > Maybe even turn this WARN_ON() into an ASSERT() when introducing proper > error handling, as we shouldn't really get there unless we have a logical > error. If you have real workloads hitting the warning then it really should be proper error handling, not even an assert.
On 30/06/2021 12:01, David Sterba wrote: > On Tue, Jun 29, 2021 at 09:04:40AM +0000, Johannes Thumshirn wrote: >> On 29/06/2021 10:51, lijian_8010a29@163.com wrote: >>> From: lijian <lijian@yulong.com> >>> >>> removed unneeded variable 'ret'. >> >> Wouldn't it make more sense to return an error (-ENOENT??) in case >> the em lookup fails and handle the error in btrfs_finish_ordered_io() >> as this is the only caller of unpin_extent_cache()? >> >> I've actually tripped over this a couple of times already when >> investigating extent map and ordered extent splitting problems >> on zoned filesystems: >> >> em = lookup_extent_mapping(tree, start, len); >> WARN_ON(!em || em->start != start); >> >> Maybe even turn this WARN_ON() into an ASSERT() when introducing proper >> error handling, as we shouldn't really get there unless we have a logical >> error. > > If you have real workloads hitting the warning then it really should be > proper error handling, not even an assert. > Up to now it's been coding errors from my side so I think it warrants an ASSERT(). But still we should handle the error in the caller.
diff --git a/fs/btrfs/extent_map.c b/fs/btrfs/extent_map.c index 4a8e02f7b6c7..70d3e76e30c5 100644 --- a/fs/btrfs/extent_map.c +++ b/fs/btrfs/extent_map.c @@ -296,7 +296,6 @@ static void try_merge_map(struct extent_map_tree *tree, struct extent_map *em) int unpin_extent_cache(struct extent_map_tree *tree, u64 start, u64 len, u64 gen) { - int ret = 0; struct extent_map *em; bool prealloc = false; @@ -328,8 +327,7 @@ int unpin_extent_cache(struct extent_map_tree *tree, u64 start, u64 len, free_extent_map(em); out: write_unlock(&tree->lock); - return ret; - + return 0; } void clear_em_logging(struct extent_map_tree *tree, struct extent_map *em)