Revision b4447363
b/block/sheepdog.c | ||
---|---|---|
1294 | 1294 |
static int sd_create(const char *filename, QEMUOptionParameter *options) |
1295 | 1295 |
{ |
1296 | 1296 |
int ret; |
1297 |
uint32_t vid = 0; |
|
1297 |
uint32_t vid = 0, base_vid = 0;
|
|
1298 | 1298 |
int64_t vdi_size = 0; |
1299 | 1299 |
char *backing_file = NULL; |
1300 |
BDRVSheepdogState s; |
|
1301 |
char vdi[SD_MAX_VDI_LEN], tag[SD_MAX_VDI_TAG_LEN]; |
|
1302 |
uint32_t snapid; |
|
1300 | 1303 |
|
1301 | 1304 |
strstart(filename, "sheepdog:", (const char **)&filename); |
1302 | 1305 |
|
1306 |
memset(&s, 0, sizeof(s)); |
|
1307 |
memset(vdi, 0, sizeof(vdi)); |
|
1308 |
memset(tag, 0, sizeof(tag)); |
|
1309 |
if (parse_vdiname(&s, filename, vdi, &snapid, tag) < 0) { |
|
1310 |
error_report("invalid filename\n"); |
|
1311 |
return -EINVAL; |
|
1312 |
} |
|
1313 |
|
|
1303 | 1314 |
while (options && options->name) { |
1304 | 1315 |
if (!strcmp(options->name, BLOCK_OPT_SIZE)) { |
1305 | 1316 |
vdi_size = options->value.n; |
... | ... | |
1338 | 1349 |
return -EINVAL; |
1339 | 1350 |
} |
1340 | 1351 |
|
1341 |
vid = s->inode.vdi_id; |
|
1352 |
base_vid = s->inode.vdi_id;
|
|
1342 | 1353 |
bdrv_delete(bs); |
1343 | 1354 |
} |
1344 | 1355 |
|
1345 |
return do_sd_create((char *)filename, vdi_size, vid, NULL, 0, NULL, NULL);
|
|
1356 |
return do_sd_create((char *)vdi, vdi_size, base_vid, &vid, 0, s.addr, s.port);
|
|
1346 | 1357 |
} |
1347 | 1358 |
|
1348 | 1359 |
static void sd_close(BlockDriverState *bs) |
Also available in: Unified diff