|
@@ -781,14 +781,15 @@ static XenBlockDrive *xen_block_drive_create(const char *id,
|
|
|
drive = g_new0(XenBlockDrive, 1);
|
|
|
drive->id = g_strdup(id);
|
|
|
|
|
|
- file_layer = qdict_new();
|
|
|
- driver_layer = qdict_new();
|
|
|
-
|
|
|
rc = stat(filename, &st);
|
|
|
if (rc) {
|
|
|
error_setg_errno(errp, errno, "Could not stat file '%s'", filename);
|
|
|
goto done;
|
|
|
}
|
|
|
+
|
|
|
+ file_layer = qdict_new();
|
|
|
+ driver_layer = qdict_new();
|
|
|
+
|
|
|
if (S_ISBLK(st.st_mode)) {
|
|
|
qdict_put_str(file_layer, "driver", "host_device");
|
|
|
} else {
|
|
@@ -796,7 +797,6 @@ static XenBlockDrive *xen_block_drive_create(const char *id,
|
|
|
}
|
|
|
|
|
|
qdict_put_str(file_layer, "filename", filename);
|
|
|
- g_free(filename);
|
|
|
|
|
|
if (mode && *mode != 'w') {
|
|
|
qdict_put_bool(file_layer, "read-only", true);
|
|
@@ -831,7 +831,6 @@ static XenBlockDrive *xen_block_drive_create(const char *id,
|
|
|
qdict_put_str(file_layer, "locking", "off");
|
|
|
|
|
|
qdict_put_str(driver_layer, "driver", driver);
|
|
|
- g_free(driver);
|
|
|
|
|
|
qdict_put(driver_layer, "file", file_layer);
|
|
|
|
|
@@ -842,6 +841,8 @@ static XenBlockDrive *xen_block_drive_create(const char *id,
|
|
|
qobject_unref(driver_layer);
|
|
|
|
|
|
done:
|
|
|
+ g_free(filename);
|
|
|
+ g_free(driver);
|
|
|
if (*errp) {
|
|
|
xen_block_drive_destroy(drive, NULL);
|
|
|
return NULL;
|