[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 06/23] block migration: Avoid large stack buffer
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] [PATCH 06/23] block migration: Avoid large stack buffer |
Date: |
Mon, 30 Nov 2009 18:21:20 +0100 |
User-agent: |
StGIT/0.14.3 |
Move a potentially large buffer from stack to heap.
Signed-off-by: Jan Kiszka <address@hidden>
---
block-migration.c | 14 +++++++++-----
1 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/block-migration.c b/block-migration.c
index 5aff5a7..a0dcdad 100644
--- a/block-migration.c
+++ b/block-migration.c
@@ -321,10 +321,12 @@ static int blk_mig_save_bulked_block(QEMUFile *f, int
is_async)
static void blk_mig_save_dirty_blocks(QEMUFile *f)
{
BlkMigDevState *bmds;
- uint8_t buf[BLOCK_SIZE];
+ uint8_t *buf;
int64_t sector;
int len;
+ buf = qemu_malloc(BLOCK_SIZE);
+
for (bmds = block_mig_state->bmds_first; bmds != NULL; bmds = bmds->next) {
for (sector = 0; sector < bmds->cur_sector;) {
if (bdrv_get_dirty(bmds->bs, sector)) {
@@ -350,6 +352,8 @@ static void blk_mig_save_dirty_blocks(QEMUFile *f)
sector += BDRV_SECTORS_PER_DIRTY_CHUNK;
}
}
+
+ qemu_free(buf);
}
static void flush_blks(QEMUFile* f)
@@ -458,8 +462,6 @@ static int block_load(QEMUFile *f, void *opaque, int
version_id)
BlockDriverState *bs;
uint8_t *buf;
- buf = qemu_malloc(BLOCK_SIZE);
-
do {
addr = qemu_get_be64(f);
@@ -475,6 +477,8 @@ static int block_load(QEMUFile *f, void *opaque, int
version_id)
bs = bdrv_find(device_name);
+ buf = qemu_malloc(BLOCK_SIZE);
+
qemu_get_buffer(f, buf, BLOCK_SIZE);
if (bs != NULL) {
bdrv_write(bs, addr, buf, BDRV_SECTORS_PER_DIRTY_CHUNK);
@@ -482,14 +486,14 @@ static int block_load(QEMUFile *f, void *opaque, int
version_id)
printf("Error unknown block device %s\n", device_name);
/* FIXME: add error handling */
}
+
+ qemu_free(buf);
} else if (!(flags & BLK_MIG_FLAG_EOS)) {
printf("Unknown flags\n");
/* FIXME: add error handling */
}
} while (!(flags & BLK_MIG_FLAG_EOS));
- qemu_free(buf);
-
return 0;
}
- [Qemu-devel] [PATCH 00/23] block migration: Fixes, cleanups and speedups, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 13/23] block migration: Consolidate mig_read_device_bulk into mig_save_device_bulk, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 02/23] migration: Catch multiple start commands, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 23/23] block migration: Increase dirty chunk size to 1M, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 16/23] ram migration: Stop loading on error, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 05/23] block migration: Cleanup dirty tracking code, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 06/23] block migration: Avoid large stack buffer,
Jan Kiszka <=
- [Qemu-devel] [PATCH 19/23] live migration: Propagate output monitor to callback handler, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 21/23] block migration: Report progress also via info migration, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 01/23] migration: Fix use of file after release, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 08/23] block migration: Drop dead code, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 17/23] live migration: Allow cleanup after cancellation or error, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 03/23] block migration: Fix coding style and whitespaces, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 15/23] block migration: Add error handling/propagation, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 12/23] block migration: Clean up use of total_sectors, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 14/23] block migration: Consolidate block transmission, Jan Kiszka, 2009/11/30
- [Qemu-devel] [PATCH 09/23] Import a simple queue implementation from NetBSD, Jan Kiszka, 2009/11/30