diff options
| author | Filipe Manana <fdmanana@suse.com> | 2026-06-24 12:31:44 +0100 |
|---|---|---|
| committer | David Sterba <dsterba@suse.com> | 2026-08-07 19:17:16 +0200 |
| commit | 28bc34d6476a055ce47d9acbfd2632e3fe18e463 (patch) | |
| tree | 449515852ab60da64e197144cc86f0aa08ff7759 | |
| parent | 0429b343f1659a26ff7da8a023fc3ed125481c32 (diff) | |
btrfs: defrag: use a single list for each loop in defrag_one_range()
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.
Reviewed-by: Qu Wenruo <wqu@suse.com>
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/defrag.c | 6 |
1 files changed, 1 insertions, 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: |
