btrfs: free path at can_nocow_extent() before checking for checksum items
authorFilipe Manana <fdmanana@suse.com>
Wed, 23 Mar 2022 16:19:27 +0000 (16:19 +0000)
committerDavid Sterba <dsterba@suse.com>
Mon, 16 May 2022 15:03:10 +0000 (17:03 +0200)
When we look for checksum items, through csum_exist_in_range(), at
can_nocow_extent(), we no longer need the path that we have previously
allocated. Through csum_exist_in_range() -> btrfs_lookup_csums_range(),
we also end up allocating a path, so we are adding unnecessary extra
memory usage. So free the path before calling csum_exist_in_range().

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/inode.c

index ca47f7c..b7a7a94 100644 (file)
@@ -7230,6 +7230,14 @@ noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
        }
 
        /*
+        * We don't need the path anymore, plus through the csum_exist_in_range()
+        * call below we will end up allocating another path. So free the path
+        * to avoid unnecessary extra memory usage.
+        */
+       btrfs_free_path(path);
+       path = NULL;
+
+       /*
         * adjust disk_bytenr and num_bytes to cover just the bytes
         * in this extent we are about to write.  If there
         * are any csums in that range we have to cow in order