Revision 4dcafbb1 block.c
b/block.c | ||
---|---|---|
2031 | 2031 |
return ret; |
2032 | 2032 |
} |
2033 | 2033 |
|
2034 |
typedef struct BlockCompleteData { |
|
2035 |
BlockDriverCompletionFunc *cb; |
|
2036 |
void *opaque; |
|
2037 |
BlockDriverState *bs; |
|
2038 |
int64_t sector_num; |
|
2039 |
int nb_sectors; |
|
2040 |
} BlockCompleteData; |
|
2041 |
|
|
2042 |
static void block_complete_cb(void *opaque, int ret) |
|
2043 |
{ |
|
2044 |
BlockCompleteData *b = opaque; |
|
2045 |
|
|
2046 |
if (b->bs->dirty_bitmap) { |
|
2047 |
set_dirty_bitmap(b->bs, b->sector_num, b->nb_sectors, 1); |
|
2048 |
} |
|
2049 |
b->cb(b->opaque, ret); |
|
2050 |
qemu_free(b); |
|
2051 |
} |
|
2052 |
|
|
2053 |
static BlockCompleteData *blk_dirty_cb_alloc(BlockDriverState *bs, |
|
2054 |
int64_t sector_num, |
|
2055 |
int nb_sectors, |
|
2056 |
BlockDriverCompletionFunc *cb, |
|
2057 |
void *opaque) |
|
2058 |
{ |
|
2059 |
BlockCompleteData *blkdata = qemu_mallocz(sizeof(BlockCompleteData)); |
|
2060 |
|
|
2061 |
blkdata->bs = bs; |
|
2062 |
blkdata->cb = cb; |
|
2063 |
blkdata->opaque = opaque; |
|
2064 |
blkdata->sector_num = sector_num; |
|
2065 |
blkdata->nb_sectors = nb_sectors; |
|
2066 |
|
|
2067 |
return blkdata; |
|
2068 |
} |
|
2069 |
|
|
2034 | 2070 |
BlockDriverAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t sector_num, |
2035 | 2071 |
QEMUIOVector *qiov, int nb_sectors, |
2036 | 2072 |
BlockDriverCompletionFunc *cb, void *opaque) |
2037 | 2073 |
{ |
2038 | 2074 |
BlockDriver *drv = bs->drv; |
2039 | 2075 |
BlockDriverAIOCB *ret; |
2076 |
BlockCompleteData *blk_cb_data; |
|
2040 | 2077 |
|
2041 | 2078 |
trace_bdrv_aio_writev(bs, sector_num, nb_sectors, opaque); |
2042 | 2079 |
|
... | ... | |
2048 | 2085 |
return NULL; |
2049 | 2086 |
|
2050 | 2087 |
if (bs->dirty_bitmap) { |
2051 |
set_dirty_bitmap(bs, sector_num, nb_sectors, 1); |
|
2088 |
blk_cb_data = blk_dirty_cb_alloc(bs, sector_num, nb_sectors, cb, |
|
2089 |
opaque); |
|
2090 |
cb = &block_complete_cb; |
|
2091 |
opaque = blk_cb_data; |
|
2052 | 2092 |
} |
2053 | 2093 |
|
2054 | 2094 |
ret = drv->bdrv_aio_writev(bs, sector_num, qiov, nb_sectors, |
Also available in: Unified diff