There is no need to allocate 2 * max_pending_size (which can be 256M) if
we're just extracting super block.
We only need to prepare BTRFS_SUPER_INFO_SIZE as buffer size.
Signed-off-by: Qu Wenruo <wqu@xxxxxxxx>
---
image/main.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/image/main.c b/image/main.c
index d6e21ed68b87..7ca207de3c3a 100644
--- a/image/main.c
+++ b/image/main.c
@@ -1670,9 +1670,14 @@ static int fill_mdres_info(struct mdrestore_struct *mdres,
return 0;
if (mdres->compress_method == COMPRESS_ZLIB) {
- size_t size = current_version->max_pending_size * 2;
+ /*
+ * We know this item is superblock, its should only be 4K.
+ * Don't need to waste memory following max_pending_size as it
+ * can be as large as 256M.
+ */
+ size_t size = BTRFS_SUPER_INFO_SIZE;
- buffer = malloc(current_version->max_pending_size * 2);
+ buffer = malloc(size);
if (!buffer)
return -ENOMEM;
ret = uncompress(buffer, (unsigned long *)&size,
--
2.22.0