diff --git a/fs/btrfs/defrag.c b/fs/btrfs/defrag.c index ad1d04d8f165..e454b59d6477 100644 --- a/fs/btrfs/defrag.c +++ b/fs/btrfs/defrag.c @@ -1169,7 +1169,7 @@ static int defrag_one_range(struct btrfs_inode *inode, u64 start, u32 len, struct defrag_target_range *entry; struct defrag_target_range *tmp; LIST_HEAD(target_list); - struct folio **folios; + struct folio AUTO_KFREE(*folios); const u32 sectorsize = inode->root->fs_info->sectorsize; u64 cur = start; 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, * range or the extent lock. */ ret = btrfs_delalloc_reserve_space(inode, &data_reserved, start, len); - if (ret < 0) { - kfree(folios); + if (ret < 0) return ret; - } /* Prepare all pages */ 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, folio_unlock(folios[i]); folio_put(folios[i]); } - kfree(folios); btrfs_delalloc_release_extents(inode, len); if (last_defrag_end < start + len) btrfs_delalloc_release_space(inode, data_reserved, last_defrag_end,