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;
|
||||
}
|
||||
|
||||
static int sd_prealloc(const char *filename, Error **errp)
|
||||
static int sd_prealloc(BlockDriverState *bs, Error **errp)
|
||||
{
|
||||
BlockBackend *blk = NULL;
|
||||
BDRVSheepdogState *base = NULL;
|
||||
BDRVSheepdogState *base = bs->opaque;
|
||||
unsigned long buf_size;
|
||||
uint32_t idx, max_idx;
|
||||
uint32_t object_size;
|
||||
|
@ -1837,10 +1837,11 @@ static int sd_prealloc(const char *filename, Error **errp)
|
|||
void *buf = NULL;
|
||||
int ret;
|
||||
|
||||
blk = blk_new_open(filename, NULL, NULL,
|
||||
BDRV_O_RDWR | BDRV_O_RESIZE | BDRV_O_PROTOCOL, errp);
|
||||
if (blk == NULL) {
|
||||
ret = -EIO;
|
||||
blk = blk_new(BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE | BLK_PERM_RESIZE,
|
||||
BLK_PERM_ALL);
|
||||
|
||||
ret = blk_insert_bs(blk, bs, errp);
|
||||
if (ret < 0) {
|
||||
goto out_with_err_set;
|
||||
}
|
||||
|
||||
|
@ -1852,7 +1853,6 @@ static int sd_prealloc(const char *filename, Error **errp)
|
|||
goto out;
|
||||
}
|
||||
|
||||
base = blk_bs(blk)->opaque;
|
||||
object_size = (UINT32_C(1) << base->inode.block_size_shift);
|
||||
buf_size = MIN(object_size, SD_DATA_OBJ_SIZE);
|
||||
buf = g_malloc0(buf_size);
|
||||
|
@ -2108,7 +2108,20 @@ static int sd_create(const char *filename, QemuOpts *opts,
|
|||
}
|
||||
|
||||
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:
|
||||
g_free(backing_file);
|
||||
|
|
Loading…
Reference in a new issue