Re: [PATCH 3/6] btrfs: defrag: use a single list for each loop in defrag_one_range()
Anand Suveer Jain <[email protected]>
| Newsgroups | org.kernel.vger.linux-btrfs |
|---|---|
| Message-ID | <[email protected]> |
On 26/6/26 03:20, [email protected] wrote: > From: Filipe Manana <[email protected]> > > There's no need to have one list for each loop to defrag each subrange and > then another one to free each subrange (struct defrag_target_range). > We can do it in a single loop, freeing each subrange after defragging, > plus no need to delete each subrange from the list since we immediately > free it. > > Signed-off-by: Filipe Manana <[email protected]> > --- > fs/btrfs/defrag.c | 6 +----- > 1 file changed, 1 insertion(+), 5 deletions(-) > > diff --git a/fs/btrfs/defrag.c b/fs/btrfs/defrag.c > index 0697b285e05f..ad1d04d8f165 100644 > --- a/fs/btrfs/defrag.c > +++ b/fs/btrfs/defrag.c > @@ -1234,16 +1234,12 @@ static int defrag_one_range(struct btrfs_inode *inode, u64 start, u32 len, > if (ret < 0) > goto unlock_extent; > > - list_for_each_entry(entry, &target_list, list) { > + list_for_each_entry_safe(entry, tmp, &target_list, list) { > defrag_one_locked_target(inode, entry, folios, nr_pages, &cached_state); > if (entry->start > last_defrag_end) > btrfs_delalloc_release_space(inode, data_reserved, last_defrag_end, > entry->start - last_defrag_end, true); > last_defrag_end = entry->start + entry->len; > - } > - > - list_for_each_entry_safe(entry, tmp, &target_list, list) { > - list_del_init(&entry->list); > kfree(entry); > } > unlock_extent: LGTM. Reviewed-by: Anand Jain <[email protected]>