mirror of https://github.com/xemu-project/xemu.git
sheepdog: Make sd_prealloc() take a BDS
We want to use this function in sd_truncate() later on, so taking a filename is not exactly ideal. Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
c3132aff17
commit
8b9ad56e9c
|
@ -1826,10 +1826,10 @@ static int do_sd_create(BDRVSheepdogState *s, uint32_t *vdi_id, int snapshot,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sd_prealloc(const char *filename, Error **errp)
|
static int sd_prealloc(BlockDriverState *bs, Error **errp)
|
||||||
{
|
{
|
||||||
BlockBackend *blk = NULL;
|
BlockBackend *blk = NULL;
|
||||||
BDRVSheepdogState *base = NULL;
|
BDRVSheepdogState *base = bs->opaque;
|
||||||
unsigned long buf_size;
|
unsigned long buf_size;
|
||||||
uint32_t idx, max_idx;
|
uint32_t idx, max_idx;
|
||||||
uint32_t object_size;
|
uint32_t object_size;
|
||||||
|
@ -1837,10 +1837,11 @@ static int sd_prealloc(const char *filename, Error **errp)
|
||||||
void *buf = NULL;
|
void *buf = NULL;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
blk = blk_new_open(filename, NULL, NULL,
|
blk = blk_new(BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE | BLK_PERM_RESIZE,
|
||||||
BDRV_O_RDWR | BDRV_O_RESIZE | BDRV_O_PROTOCOL, errp);
|
BLK_PERM_ALL);
|
||||||
if (blk == NULL) {
|
|
||||||
ret = -EIO;
|
ret = blk_insert_bs(blk, bs, errp);
|
||||||
|
if (ret < 0) {
|
||||||
goto out_with_err_set;
|
goto out_with_err_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1852,7 +1853,6 @@ static int sd_prealloc(const char *filename, Error **errp)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
base = blk_bs(blk)->opaque;
|
|
||||||
object_size = (UINT32_C(1) << base->inode.block_size_shift);
|
object_size = (UINT32_C(1) << base->inode.block_size_shift);
|
||||||
buf_size = MIN(object_size, SD_DATA_OBJ_SIZE);
|
buf_size = MIN(object_size, SD_DATA_OBJ_SIZE);
|
||||||
buf = g_malloc0(buf_size);
|
buf = g_malloc0(buf_size);
|
||||||
|
@ -2108,7 +2108,20 @@ static int sd_create(const char *filename, QemuOpts *opts,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prealloc) {
|
if (prealloc) {
|
||||||
ret = sd_prealloc(filename, errp);
|
BlockDriverState *bs;
|
||||||
|
QDict *opts;
|
||||||
|
|
||||||
|
opts = qdict_new();
|
||||||
|
qdict_put_str(opts, "driver", "sheepdog");
|
||||||
|
bs = bdrv_open(filename, NULL, opts, BDRV_O_PROTOCOL | BDRV_O_RDWR,
|
||||||
|
errp);
|
||||||
|
if (!bs) {
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = sd_prealloc(bs, errp);
|
||||||
|
|
||||||
|
bdrv_unref(bs);
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
g_free(backing_file);
|
g_free(backing_file);
|
||||||
|
|
Loading…
Reference in New Issue