block: drop aio_multiwrite in BlockDriver

These were never used.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Paolo Bonzini 2012-02-21 16:43:52 +01:00 committed by Kevin Wolf
parent 56116a1469
commit b6a127a156
2 changed files with 3 additions and 26 deletions

23
block.c
View File

@ -2791,7 +2791,6 @@ typedef struct MultiwriteCB {
BlockDriverCompletionFunc *cb; BlockDriverCompletionFunc *cb;
void *opaque; void *opaque;
QEMUIOVector *free_qiov; QEMUIOVector *free_qiov;
void *free_buf;
} callbacks[]; } callbacks[];
} MultiwriteCB; } MultiwriteCB;
@ -2805,7 +2804,6 @@ static void multiwrite_user_cb(MultiwriteCB *mcb)
qemu_iovec_destroy(mcb->callbacks[i].free_qiov); qemu_iovec_destroy(mcb->callbacks[i].free_qiov);
} }
g_free(mcb->callbacks[i].free_qiov); g_free(mcb->callbacks[i].free_qiov);
qemu_vfree(mcb->callbacks[i].free_buf);
} }
} }
@ -2862,20 +2860,11 @@ static int multiwrite_merge(BlockDriverState *bs, BlockRequest *reqs,
int merge = 0; int merge = 0;
int64_t oldreq_last = reqs[outidx].sector + reqs[outidx].nb_sectors; int64_t oldreq_last = reqs[outidx].sector + reqs[outidx].nb_sectors;
// This handles the cases that are valid for all block drivers, namely // Handle exactly sequential writes and overlapping writes.
// exactly sequential writes and overlapping writes.
if (reqs[i].sector <= oldreq_last) { if (reqs[i].sector <= oldreq_last) {
merge = 1; merge = 1;
} }
// The block driver may decide that it makes sense to combine requests
// even if there is a gap of some sectors between them. In this case,
// the gap is filled with zeros (therefore only applicable for yet
// unused space in format like qcow2).
if (!merge && bs->drv->bdrv_merge_requests) {
merge = bs->drv->bdrv_merge_requests(bs, &reqs[outidx], &reqs[i]);
}
if (reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1 > IOV_MAX) { if (reqs[outidx].qiov->niov + reqs[i].qiov->niov + 1 > IOV_MAX) {
merge = 0; merge = 0;
} }
@ -2891,14 +2880,8 @@ static int multiwrite_merge(BlockDriverState *bs, BlockRequest *reqs,
size = (reqs[i].sector - reqs[outidx].sector) << 9; size = (reqs[i].sector - reqs[outidx].sector) << 9;
qemu_iovec_concat(qiov, reqs[outidx].qiov, size); qemu_iovec_concat(qiov, reqs[outidx].qiov, size);
// We might need to add some zeros between the two requests // We should need to add any zeros between the two requests
if (reqs[i].sector > oldreq_last) { assert (reqs[i].sector <= oldreq_last);
size_t zero_bytes = (reqs[i].sector - oldreq_last) << 9;
uint8_t *buf = qemu_blockalign(bs, zero_bytes);
memset(buf, 0, zero_bytes);
qemu_iovec_add(qiov, buf, zero_bytes);
mcb->callbacks[i].free_buf = buf;
}
// Add the second request // Add the second request
qemu_iovec_concat(qiov, reqs[i].qiov, reqs[i].qiov->size); qemu_iovec_concat(qiov, reqs[i].qiov, reqs[i].qiov->size);

View File

@ -162,12 +162,6 @@ struct BlockDriver {
*/ */
int coroutine_fn (*bdrv_co_flush_to_os)(BlockDriverState *bs); int coroutine_fn (*bdrv_co_flush_to_os)(BlockDriverState *bs);
int (*bdrv_aio_multiwrite)(BlockDriverState *bs, BlockRequest *reqs,
int num_reqs);
int (*bdrv_merge_requests)(BlockDriverState *bs, BlockRequest* a,
BlockRequest *b);
const char *protocol_name; const char *protocol_name;
int (*bdrv_truncate)(BlockDriverState *bs, int64_t offset); int (*bdrv_truncate)(BlockDriverState *bs, int64_t offset);
int64_t (*bdrv_getlength)(BlockDriverState *bs); int64_t (*bdrv_getlength)(BlockDriverState *bs);