mirror of https://github.com/xemu-project/xemu.git
block: Pass BdrvChild to bdrv_truncate()
Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
becc347e1c
commit
52cdbc5869
3
block.c
3
block.c
|
@ -2626,8 +2626,9 @@ exit:
|
||||||
/**
|
/**
|
||||||
* Truncate file to 'offset' bytes (needed only for file protocols)
|
* Truncate file to 'offset' bytes (needed only for file protocols)
|
||||||
*/
|
*/
|
||||||
int bdrv_truncate(BlockDriverState *bs, int64_t offset)
|
int bdrv_truncate(BdrvChild *child, int64_t offset)
|
||||||
{
|
{
|
||||||
|
BlockDriverState *bs = child->bs;
|
||||||
BlockDriver *drv = bs->drv;
|
BlockDriver *drv = bs->drv;
|
||||||
int ret;
|
int ret;
|
||||||
if (!drv)
|
if (!drv)
|
||||||
|
|
|
@ -663,7 +663,7 @@ static int64_t blkdebug_getlength(BlockDriverState *bs)
|
||||||
|
|
||||||
static int blkdebug_truncate(BlockDriverState *bs, int64_t offset)
|
static int blkdebug_truncate(BlockDriverState *bs, int64_t offset)
|
||||||
{
|
{
|
||||||
return bdrv_truncate(bs->file->bs, offset);
|
return bdrv_truncate(bs->file, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void blkdebug_refresh_filename(BlockDriverState *bs, QDict *options)
|
static void blkdebug_refresh_filename(BlockDriverState *bs, QDict *options)
|
||||||
|
|
|
@ -1605,7 +1605,7 @@ int blk_truncate(BlockBackend *blk, int64_t offset)
|
||||||
return -ENOMEDIUM;
|
return -ENOMEDIUM;
|
||||||
}
|
}
|
||||||
|
|
||||||
return bdrv_truncate(blk_bs(blk), offset);
|
return bdrv_truncate(blk->root, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void blk_pdiscard_entry(void *opaque)
|
static void blk_pdiscard_entry(void *opaque)
|
||||||
|
|
|
@ -383,7 +383,7 @@ static int block_crypto_truncate(BlockDriverState *bs, int64_t offset)
|
||||||
|
|
||||||
offset += payload_offset;
|
offset += payload_offset;
|
||||||
|
|
||||||
return bdrv_truncate(bs->file->bs, offset);
|
return bdrv_truncate(bs->file, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void block_crypto_close(BlockDriverState *bs)
|
static void block_crypto_close(BlockDriverState *bs)
|
||||||
|
|
|
@ -215,7 +215,7 @@ static int64_t allocate_clusters(BlockDriverState *bs, int64_t sector_num,
|
||||||
s->data_end << BDRV_SECTOR_BITS,
|
s->data_end << BDRV_SECTOR_BITS,
|
||||||
space << BDRV_SECTOR_BITS, 0);
|
space << BDRV_SECTOR_BITS, 0);
|
||||||
} else {
|
} else {
|
||||||
ret = bdrv_truncate(bs->file->bs,
|
ret = bdrv_truncate(bs->file,
|
||||||
(s->data_end + space) << BDRV_SECTOR_BITS);
|
(s->data_end + space) << BDRV_SECTOR_BITS);
|
||||||
}
|
}
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
|
@ -449,7 +449,7 @@ static int parallels_check(BlockDriverState *bs, BdrvCheckResult *res,
|
||||||
size - res->image_end_offset);
|
size - res->image_end_offset);
|
||||||
res->leaks += count;
|
res->leaks += count;
|
||||||
if (fix & BDRV_FIX_LEAKS) {
|
if (fix & BDRV_FIX_LEAKS) {
|
||||||
ret = bdrv_truncate(bs->file->bs, res->image_end_offset);
|
ret = bdrv_truncate(bs->file, res->image_end_offset);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
res->check_errors++;
|
res->check_errors++;
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -681,7 +681,7 @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
goto fail_options;
|
goto fail_options;
|
||||||
}
|
}
|
||||||
if (!bdrv_has_zero_init(bs->file->bs) ||
|
if (!bdrv_has_zero_init(bs->file->bs) ||
|
||||||
bdrv_truncate(bs->file->bs, bdrv_getlength(bs->file->bs)) != 0) {
|
bdrv_truncate(bs->file, bdrv_getlength(bs->file->bs)) != 0) {
|
||||||
s->prealloc_mode = PRL_PREALLOC_MODE_FALLOCATE;
|
s->prealloc_mode = PRL_PREALLOC_MODE_FALLOCATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -724,7 +724,7 @@ static void parallels_close(BlockDriverState *bs)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bs->open_flags & BDRV_O_RDWR) {
|
if (bs->open_flags & BDRV_O_RDWR) {
|
||||||
bdrv_truncate(bs->file->bs, s->data_end << BDRV_SECTOR_BITS);
|
bdrv_truncate(bs->file, s->data_end << BDRV_SECTOR_BITS);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free(s->bat_dirty_bmap);
|
g_free(s->bat_dirty_bmap);
|
||||||
|
|
|
@ -467,7 +467,7 @@ static uint64_t get_cluster_offset(BlockDriverState *bs,
|
||||||
/* round to cluster size */
|
/* round to cluster size */
|
||||||
cluster_offset = (cluster_offset + s->cluster_size - 1) &
|
cluster_offset = (cluster_offset + s->cluster_size - 1) &
|
||||||
~(s->cluster_size - 1);
|
~(s->cluster_size - 1);
|
||||||
bdrv_truncate(bs->file->bs, cluster_offset + s->cluster_size);
|
bdrv_truncate(bs->file, cluster_offset + s->cluster_size);
|
||||||
/* if encrypted, we must initialize the cluster
|
/* if encrypted, we must initialize the cluster
|
||||||
content which won't be written */
|
content which won't be written */
|
||||||
if (bs->encrypted &&
|
if (bs->encrypted &&
|
||||||
|
@ -909,7 +909,7 @@ static int qcow_make_empty(BlockDriverState *bs)
|
||||||
if (bdrv_pwrite_sync(bs->file, s->l1_table_offset, s->l1_table,
|
if (bdrv_pwrite_sync(bs->file, s->l1_table_offset, s->l1_table,
|
||||||
l1_length) < 0)
|
l1_length) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
ret = bdrv_truncate(bs->file->bs, s->l1_table_offset + l1_length);
|
ret = bdrv_truncate(bs->file, s->l1_table_offset + l1_length);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
|
|
@ -1734,7 +1734,7 @@ static int check_refblocks(BlockDriverState *bs, BdrvCheckResult *res,
|
||||||
goto resize_fail;
|
goto resize_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = bdrv_truncate(bs->file->bs, offset + s->cluster_size);
|
ret = bdrv_truncate(bs->file, offset + s->cluster_size);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto resize_fail;
|
goto resize_fail;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2570,7 +2570,7 @@ qcow2_co_pwritev_compressed(BlockDriverState *bs, uint64_t offset,
|
||||||
/* align end of file to a sector boundary to ease reading with
|
/* align end of file to a sector boundary to ease reading with
|
||||||
sector based I/Os */
|
sector based I/Os */
|
||||||
cluster_offset = bdrv_getlength(bs->file->bs);
|
cluster_offset = bdrv_getlength(bs->file->bs);
|
||||||
return bdrv_truncate(bs->file->bs, cluster_offset);
|
return bdrv_truncate(bs->file, cluster_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
buf = qemu_blockalign(bs, s->cluster_size);
|
buf = qemu_blockalign(bs, s->cluster_size);
|
||||||
|
@ -2784,7 +2784,7 @@ static int make_completely_empty(BlockDriverState *bs)
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = bdrv_truncate(bs->file->bs, (3 + l1_clusters) * s->cluster_size);
|
ret = bdrv_truncate(bs->file, (3 + l1_clusters) * s->cluster_size);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
|
@ -341,7 +341,7 @@ static int raw_truncate(BlockDriverState *bs, int64_t offset)
|
||||||
|
|
||||||
s->size = offset;
|
s->size = offset;
|
||||||
offset += s->offset;
|
offset += s->offset;
|
||||||
return bdrv_truncate(bs->file->bs, offset);
|
return bdrv_truncate(bs->file, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int raw_media_changed(BlockDriverState *bs)
|
static int raw_media_changed(BlockDriverState *bs)
|
||||||
|
|
|
@ -548,7 +548,7 @@ static int vhdx_log_flush(BlockDriverState *bs, BDRVVHDXState *s,
|
||||||
if (new_file_size % (1024*1024)) {
|
if (new_file_size % (1024*1024)) {
|
||||||
/* round up to nearest 1MB boundary */
|
/* round up to nearest 1MB boundary */
|
||||||
new_file_size = ((new_file_size >> 20) + 1) << 20;
|
new_file_size = ((new_file_size >> 20) + 1) << 20;
|
||||||
bdrv_truncate(bs->file->bs, new_file_size);
|
bdrv_truncate(bs->file, new_file_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
qemu_vfree(desc_entries);
|
qemu_vfree(desc_entries);
|
||||||
|
|
|
@ -1165,7 +1165,7 @@ static int vhdx_allocate_block(BlockDriverState *bs, BDRVVHDXState *s,
|
||||||
/* per the spec, the address for a block is in units of 1MB */
|
/* per the spec, the address for a block is in units of 1MB */
|
||||||
*new_offset = ROUND_UP(*new_offset, 1024 * 1024);
|
*new_offset = ROUND_UP(*new_offset, 1024 * 1024);
|
||||||
|
|
||||||
return bdrv_truncate(bs->file->bs, *new_offset + s->block_size);
|
return bdrv_truncate(bs->file, *new_offset + s->block_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -253,7 +253,7 @@ BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs,
|
||||||
const char *backing_file);
|
const char *backing_file);
|
||||||
int bdrv_get_backing_file_depth(BlockDriverState *bs);
|
int bdrv_get_backing_file_depth(BlockDriverState *bs);
|
||||||
void bdrv_refresh_filename(BlockDriverState *bs);
|
void bdrv_refresh_filename(BlockDriverState *bs);
|
||||||
int bdrv_truncate(BlockDriverState *bs, int64_t offset);
|
int bdrv_truncate(BdrvChild *child, int64_t offset);
|
||||||
int64_t bdrv_nb_sectors(BlockDriverState *bs);
|
int64_t bdrv_nb_sectors(BlockDriverState *bs);
|
||||||
int64_t bdrv_getlength(BlockDriverState *bs);
|
int64_t bdrv_getlength(BlockDriverState *bs);
|
||||||
int64_t bdrv_get_allocated_file_size(BlockDriverState *bs);
|
int64_t bdrv_get_allocated_file_size(BlockDriverState *bs);
|
||||||
|
|
Loading…
Reference in New Issue