mirror of https://github.com/xqemu/xqemu.git
Block patches for 2.3.0-rc1
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJVCuU+AAoJEH8JsnLIjy/W1b0P/0RYYqkXvIvr5pymOTkA256q dPWOqkKB0LHcB1+iOdWDb7TsAfJftZ2MFvN+BQ+mBC3knheLzWlErQLZQsEJh2/b x525GKatRzc7LSQ4FPEVJ9MNDILKUQsuIza6/z3NsmmYSFSUNCzyQOS/LAO6ngjs cmQ0aLudKy41vGTE8mS6rZOjHf8uumdRPhG5clr5V80zPMg93jojYJ2ENCl6sPuh Y2OtVu6HLyX2ExKFmt4JNltxjXnUki+sEBUnCcj8tvJNMGy82IpOdO8w3W9cs2zZ cb7XUVKv6IPUycEs4IsGpHUfyIaD5sVY5ueKGGZv35kmFYdItJ9AukHc/5tlVspR kFYEGOjZRqRXboeH8VJDJWHBlIfKeoE6iwCBW62D0Bzbab8DMWbzif32b3K5dnve OleFjFS0mysUfuxoIqF12SUwZj+WzW1CaxOTAGALIrfYfOD5ZWOHiLeXbQ/fcaAW quz+/9B9CzIAbTL31RxcOXfvyuUWlWkZyz6GYxaLhzLF580Uz/qvBqbMrXDQWUzs x6udW7aylqBalSXpc29ORv5cIpA4p+IBzFpfVtwV9+Qa86nTfJJSq4u2oet/vtyb KiZ+AcKUiaChwheeQHSCcqjQ5dzhJvl/6UvwCLORLYuNExrE+1Umn/Cz33eDibxi kUW1xvRYe/pkSGdntlz0 =Hs5n -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging Block patches for 2.3.0-rc1 # gpg: Signature made Thu Mar 19 15:03:26 2015 GMT using RSA key ID C88F2FD6 # gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>" * remotes/kevin/tags/for-upstream: block: Fix blockdev-backup not to use funky error class raw-posix: Deprecate aio=threads fallback without O_DIRECT raw-posix: Deprecate host floppy passthrough Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
3e5f6234b4
|
@ -503,6 +503,14 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
|
||||||
error_setg_errno(errp, -ret, "Could not set AIO state");
|
error_setg_errno(errp, -ret, "Could not set AIO state");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
if (!s->use_aio && (bdrv_flags & BDRV_O_NATIVE_AIO)) {
|
||||||
|
error_printf("WARNING: aio=native was specified for '%s', but "
|
||||||
|
"it requires cache.direct=on, which was not "
|
||||||
|
"specified. Falling back to aio=threads.\n"
|
||||||
|
" This will become an error condition in "
|
||||||
|
"future QEMU versions.\n",
|
||||||
|
bs->filename);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
s->has_discard = true;
|
s->has_discard = true;
|
||||||
|
@ -2387,6 +2395,8 @@ static int floppy_open(BlockDriverState *bs, QDict *options, int flags,
|
||||||
s->fd = -1;
|
s->fd = -1;
|
||||||
s->fd_media_changed = 1;
|
s->fd_media_changed = 1;
|
||||||
|
|
||||||
|
error_report("Host floppy pass-through is deprecated");
|
||||||
|
error_printf("Support for it will be removed in a future release.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1574,14 +1574,14 @@ static void blockdev_backup_prepare(BlkTransactionState *common, Error **errp)
|
||||||
|
|
||||||
blk = blk_by_name(backup->device);
|
blk = blk_by_name(backup->device);
|
||||||
if (!blk) {
|
if (!blk) {
|
||||||
error_set(errp, QERR_DEVICE_NOT_FOUND, backup->device);
|
error_setg(errp, "Device '%s' not found", backup->device);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bs = blk_bs(blk);
|
bs = blk_bs(blk);
|
||||||
|
|
||||||
blk = blk_by_name(backup->target);
|
blk = blk_by_name(backup->target);
|
||||||
if (!blk) {
|
if (!blk) {
|
||||||
error_set(errp, QERR_DEVICE_NOT_FOUND, backup->target);
|
error_setg(errp, "Device '%s' not found", backup->target);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
target = blk_bs(blk);
|
target = blk_bs(blk);
|
||||||
|
@ -2421,7 +2421,7 @@ void qmp_blockdev_backup(const char *device, const char *target,
|
||||||
|
|
||||||
blk = blk_by_name(device);
|
blk = blk_by_name(device);
|
||||||
if (!blk) {
|
if (!blk) {
|
||||||
error_set(errp, QERR_DEVICE_NOT_FOUND, device);
|
error_setg(errp, "Device '%s' not found", device);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bs = blk_bs(blk);
|
bs = blk_bs(blk);
|
||||||
|
@ -2431,7 +2431,7 @@ void qmp_blockdev_backup(const char *device, const char *target,
|
||||||
|
|
||||||
blk = blk_by_name(target);
|
blk = blk_by_name(target);
|
||||||
if (!blk) {
|
if (!blk) {
|
||||||
error_set(errp, QERR_DEVICE_NOT_FOUND, target);
|
error_setg(errp, "Device '%s' not found", target);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
target_bs = blk_bs(blk);
|
target_bs = blk_bs(blk);
|
||||||
|
|
|
@ -218,6 +218,7 @@
|
||||||
# 'host_floppy', 'http', 'https', 'nbd', 'parallels', 'qcow',
|
# 'host_floppy', 'http', 'https', 'nbd', 'parallels', 'qcow',
|
||||||
# 'qcow2', 'raw', 'tftp', 'vdi', 'vmdk', 'vpc', 'vvfat'
|
# 'qcow2', 'raw', 'tftp', 'vdi', 'vmdk', 'vpc', 'vvfat'
|
||||||
# 2.2: 'archipelago' added, 'cow' dropped
|
# 2.2: 'archipelago' added, 'cow' dropped
|
||||||
|
# 2.3: 'host_floppy' deprecated
|
||||||
#
|
#
|
||||||
# @backing_file: #optional the name of the backing file (for copy-on-write)
|
# @backing_file: #optional the name of the backing file (for copy-on-write)
|
||||||
#
|
#
|
||||||
|
@ -881,9 +882,6 @@
|
||||||
#
|
#
|
||||||
# For the arguments, see the documentation of BlockdevBackup.
|
# For the arguments, see the documentation of BlockdevBackup.
|
||||||
#
|
#
|
||||||
# Returns: Nothing on success.
|
|
||||||
# If @device or @target is not a valid block device, DeviceNotFound.
|
|
||||||
#
|
|
||||||
# Since 2.3
|
# Since 2.3
|
||||||
##
|
##
|
||||||
{ 'command': 'blockdev-backup', 'data': 'BlockdevBackup' }
|
{ 'command': 'blockdev-backup', 'data': 'BlockdevBackup' }
|
||||||
|
@ -1245,6 +1243,7 @@
|
||||||
# Drivers that are supported in block device operations.
|
# Drivers that are supported in block device operations.
|
||||||
#
|
#
|
||||||
# @host_device, @host_cdrom, @host_floppy: Since 2.1
|
# @host_device, @host_cdrom, @host_floppy: Since 2.1
|
||||||
|
# @host_floppy: deprecated since 2.3
|
||||||
#
|
#
|
||||||
# Since: 2.0
|
# Since: 2.0
|
||||||
##
|
##
|
||||||
|
|
|
@ -736,8 +736,7 @@ devices. We describe here the usage for QEMU version >= 0.8.3.
|
||||||
|
|
||||||
On Linux, you can directly use the host device filename instead of a
|
On Linux, you can directly use the host device filename instead of a
|
||||||
disk image filename provided you have enough privileges to access
|
disk image filename provided you have enough privileges to access
|
||||||
it. For example, use @file{/dev/cdrom} to access to the CDROM or
|
it. For example, use @file{/dev/cdrom} to access to the CDROM.
|
||||||
@file{/dev/fd0} for the floppy.
|
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
@item CD
|
@item CD
|
||||||
|
@ -749,6 +748,8 @@ You can specify a floppy device even if no floppy is loaded. Floppy
|
||||||
removal is currently not detected accurately (if you change floppy
|
removal is currently not detected accurately (if you change floppy
|
||||||
without doing floppy access while the floppy is not loaded, the guest
|
without doing floppy access while the floppy is not loaded, the guest
|
||||||
OS will think that the same floppy is loaded).
|
OS will think that the same floppy is loaded).
|
||||||
|
Use of the host's floppy device is deprecated, and support for it will
|
||||||
|
be removed in a future release.
|
||||||
@item Hard disks
|
@item Hard disks
|
||||||
Hard disks can be used. Normally you must specify the whole disk
|
Hard disks can be used. Normally you must specify the whole disk
|
||||||
(@file{/dev/hdb} instead of @file{/dev/hdb1}) so that the guest OS can
|
(@file{/dev/hdb} instead of @file{/dev/hdb1}) so that the guest OS can
|
||||||
|
|
|
@ -419,8 +419,7 @@ STEXI
|
||||||
@item -fdb @var{file}
|
@item -fdb @var{file}
|
||||||
@findex -fda
|
@findex -fda
|
||||||
@findex -fdb
|
@findex -fdb
|
||||||
Use @var{file} as floppy disk 0/1 image (@pxref{disk_images}). You can
|
Use @var{file} as floppy disk 0/1 image (@pxref{disk_images}).
|
||||||
use the host floppy by using @file{/dev/fd0} as filename (@pxref{host_drives}).
|
|
||||||
ETEXI
|
ETEXI
|
||||||
|
|
||||||
DEF("hda", HAS_ARG, QEMU_OPTION_hda,
|
DEF("hda", HAS_ARG, QEMU_OPTION_hda,
|
||||||
|
|
|
@ -2150,7 +2150,7 @@ Each json-object contain the following:
|
||||||
- "drv": driver format name (json-string)
|
- "drv": driver format name (json-string)
|
||||||
- Possible values: "blkdebug", "bochs", "cloop", "dmg",
|
- Possible values: "blkdebug", "bochs", "cloop", "dmg",
|
||||||
"file", "file", "ftp", "ftps", "host_cdrom",
|
"file", "file", "ftp", "ftps", "host_cdrom",
|
||||||
"host_device", "host_floppy", "http", "https",
|
"host_device", "http", "https",
|
||||||
"nbd", "parallels", "qcow", "qcow2", "raw",
|
"nbd", "parallels", "qcow", "qcow2", "raw",
|
||||||
"tftp", "vdi", "vmdk", "vpc", "vvfat"
|
"tftp", "vdi", "vmdk", "vpc", "vvfat"
|
||||||
- "backing_file": backing file name (json-string, optional)
|
- "backing_file": backing file name (json-string, optional)
|
||||||
|
|
|
@ -126,7 +126,10 @@ class TestSingleDrive(iotests.QMPTestCase):
|
||||||
|
|
||||||
def do_test_device_not_found(self, cmd, **args):
|
def do_test_device_not_found(self, cmd, **args):
|
||||||
result = self.vm.qmp(cmd, **args)
|
result = self.vm.qmp(cmd, **args)
|
||||||
self.assert_qmp(result, 'error/class', 'DeviceNotFound')
|
if cmd == 'drive-backup':
|
||||||
|
self.assert_qmp(result, 'error/class', 'DeviceNotFound')
|
||||||
|
else:
|
||||||
|
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||||
|
|
||||||
def test_device_not_found(self):
|
def test_device_not_found(self):
|
||||||
self.do_test_device_not_found('drive-backup', device='nonexistent',
|
self.do_test_device_not_found('drive-backup', device='nonexistent',
|
||||||
|
@ -364,7 +367,7 @@ class TestSingleTransaction(iotests.QMPTestCase):
|
||||||
'sync': 'full' },
|
'sync': 'full' },
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
self.assert_qmp(result, 'error/class', 'DeviceNotFound')
|
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||||
|
|
||||||
result = self.vm.qmp('transaction', actions=[{
|
result = self.vm.qmp('transaction', actions=[{
|
||||||
'type': 'blockdev-backup',
|
'type': 'blockdev-backup',
|
||||||
|
@ -373,7 +376,7 @@ class TestSingleTransaction(iotests.QMPTestCase):
|
||||||
'sync': 'full' },
|
'sync': 'full' },
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
self.assert_qmp(result, 'error/class', 'DeviceNotFound')
|
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||||
|
|
||||||
result = self.vm.qmp('transaction', actions=[{
|
result = self.vm.qmp('transaction', actions=[{
|
||||||
'type': 'blockdev-backup',
|
'type': 'blockdev-backup',
|
||||||
|
@ -382,7 +385,7 @@ class TestSingleTransaction(iotests.QMPTestCase):
|
||||||
'sync': 'full' },
|
'sync': 'full' },
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
self.assert_qmp(result, 'error/class', 'DeviceNotFound')
|
self.assert_qmp(result, 'error/class', 'GenericError')
|
||||||
|
|
||||||
def test_target_is_source(self):
|
def test_target_is_source(self):
|
||||||
result = self.vm.qmp('transaction', actions=[{
|
result = self.vm.qmp('transaction', actions=[{
|
||||||
|
|
Loading…
Reference in New Issue