Skip to content

Commit d65ad30

Browse files
committed
btrfs: defrag: use auto kfree in defrag_one_range() for folios array
Use AUTO_KFREE() for the folios array, avoiding two kfree() calls, one of them in a very specific error path. Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Filipe Manana <fdmanana@suse.com>
1 parent a7a5b70 commit d65ad30

1 file changed

Lines changed: 2 additions & 5 deletions

File tree

fs/btrfs/defrag.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1169,7 +1169,7 @@ static int defrag_one_range(struct btrfs_inode *inode, u64 start, u32 len,
11691169
struct defrag_target_range *entry;
11701170
struct defrag_target_range *tmp;
11711171
LIST_HEAD(target_list);
1172-
struct folio **folios;
1172+
struct folio AUTO_KFREE(*folios);
11731173
const u32 sectorsize = inode->root->fs_info->sectorsize;
11741174
u64 cur = start;
11751175
const unsigned int nr_pages = ((start + len - 1) >> PAGE_SHIFT) -
@@ -1196,10 +1196,8 @@ static int defrag_one_range(struct btrfs_inode *inode, u64 start, u32 len,
11961196
* range or the extent lock.
11971197
*/
11981198
ret = btrfs_delalloc_reserve_space(inode, &data_reserved, start, len);
1199-
if (ret < 0) {
1200-
kfree(folios);
1199+
if (ret < 0)
12011200
return ret;
1202-
}
12031201

12041202
/* Prepare all pages */
12051203
for (int i = 0; cur < start + len && i < nr_pages; i++) {
@@ -1251,7 +1249,6 @@ static int defrag_one_range(struct btrfs_inode *inode, u64 start, u32 len,
12511249
folio_unlock(folios[i]);
12521250
folio_put(folios[i]);
12531251
}
1254-
kfree(folios);
12551252
btrfs_delalloc_release_extents(inode, len);
12561253
if (last_defrag_end < start + len)
12571254
btrfs_delalloc_release_space(inode, data_reserved, last_defrag_end,

0 commit comments

Comments
 (0)