!524 sync from branch 22.03-LTS with !505!512!523
From: @yezengruan Reviewed-by: @kevinzhu1 Signed-off-by: @kevinzhu1
This commit is contained in:
commit
82c2908da2
31
Revert-monitor-limit-io-error-qmp-event-to-at-most-o.patch
Normal file
31
Revert-monitor-limit-io-error-qmp-event-to-at-most-o.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
From e42b57adeac96c7d39b1c032ab3b66b7eff18cc8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yan Wang <wangyan122@huawei.com>
|
||||||
|
Date: Tue, 29 Mar 2022 15:18:56 +0800
|
||||||
|
Subject: [PATCH 2/2] Revert "monitor: limit io error qmp event to at most once
|
||||||
|
per 60s"
|
||||||
|
|
||||||
|
This reverts commit 44f45b5c163efed5387dac40e229e0a50bf5921a.
|
||||||
|
|
||||||
|
The commit 44f45b5c will reduse the IO-hang related log, which
|
||||||
|
is useful to solve the problem.
|
||||||
|
|
||||||
|
Signed-off-by: Yan Wang <wangyan122@huawei.com>
|
||||||
|
---
|
||||||
|
monitor/monitor.c | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/monitor/monitor.c b/monitor/monitor.c
|
||||||
|
index 28206bedc4..257ef4ee54 100644
|
||||||
|
--- a/monitor/monitor.c
|
||||||
|
+++ b/monitor/monitor.c
|
||||||
|
@@ -301,7 +301,6 @@ static MonitorQAPIEventConf monitor_qapi_event_conf[QAPI_EVENT__MAX] = {
|
||||||
|
[QAPI_EVENT_QUORUM_FAILURE] = { 1000 * SCALE_MS },
|
||||||
|
[QAPI_EVENT_VSERPORT_CHANGE] = { 1000 * SCALE_MS },
|
||||||
|
[QAPI_EVENT_MEMORY_DEVICE_SIZE_CHANGE] = { 1000 * SCALE_MS },
|
||||||
|
- [QAPI_EVENT_BLOCK_IO_ERROR] = { 60L * 1000 * SCALE_MS },
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
66
qemu-img-create-cache-paramter-only-use-for-reg-file.patch
Normal file
66
qemu-img-create-cache-paramter-only-use-for-reg-file.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
From 85a876e0d28eac4c71350baede38ca755fdf6df0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jinhua Cao <caojinhua1@huawei.com>
|
||||||
|
Date: Thu, 24 Mar 2022 17:12:49 +0800
|
||||||
|
Subject: [PATCH] qemu-img create: 'cache' paramter only use for reg file image
|
||||||
|
|
||||||
|
The paramter 'cache' is invalid for host device(/dev/xxx). If
|
||||||
|
'qemu-img create' operator performed on host device, the host
|
||||||
|
device not support 'cache' would result 'qemu-img create' execute
|
||||||
|
failed.
|
||||||
|
|
||||||
|
Signed-off-by: Jinhua Cao <caojinhua1@huawei.com>
|
||||||
|
---
|
||||||
|
qemu-img.c | 30 ++++++++++++++++++++++++------
|
||||||
|
1 file changed, 24 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/qemu-img.c b/qemu-img.c
|
||||||
|
index 9409558772..059bf42fc1 100644
|
||||||
|
--- a/qemu-img.c
|
||||||
|
+++ b/qemu-img.c
|
||||||
|
@@ -496,6 +496,22 @@ static int64_t cvtnum(const char *name, const char *value)
|
||||||
|
return cvtnum_full(name, value, 0, INT64_MAX);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static bool is_reg_file(const char *filename)
|
||||||
|
+{
|
||||||
|
+ struct stat st;
|
||||||
|
+
|
||||||
|
+ /* file not exist, file will be create later, so it's a reg file */
|
||||||
|
+ if (access(filename, F_OK) == -1) {
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* file exist, check file type */
|
||||||
|
+ if (stat(filename, &st) >= 0 && S_ISREG(st.st_mode)) {
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+ return false;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int img_create(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
@@ -586,12 +602,14 @@ static int img_create(int argc, char **argv)
|
||||||
|
error_exit("Unexpected argument: %s", argv[optind]);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!options) {
|
||||||
|
- options = g_strdup_printf(BLOCK_OPT_CACHE"=%s", cache);
|
||||||
|
- } else {
|
||||||
|
- char *old_options = options;
|
||||||
|
- options = g_strdup_printf("%s,"BLOCK_OPT_CACHE"=%s", options, cache);
|
||||||
|
- g_free(old_options);
|
||||||
|
+ if (is_reg_file(filename)) {
|
||||||
|
+ if (!options) {
|
||||||
|
+ options = g_strdup_printf(BLOCK_OPT_CACHE"=%s", cache);
|
||||||
|
+ } else {
|
||||||
|
+ char *old_options = options;
|
||||||
|
+ options = g_strdup_printf("%s,"BLOCK_OPT_CACHE"=%s", options, cache);
|
||||||
|
+ g_free(old_options);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
bdrv_img_create(filename, fmt, base_filename, base_fmt,
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
26
qemu.spec
26
qemu.spec
@ -1,6 +1,6 @@
|
|||||||
Name: qemu
|
Name: qemu
|
||||||
Version: 6.2.0
|
Version: 6.2.0
|
||||||
Release: 27
|
Release: 30
|
||||||
Epoch: 2
|
Epoch: 2
|
||||||
Summary: QEMU is a generic and open source machine emulator and virtualizer
|
Summary: QEMU is a generic and open source machine emulator and virtualizer
|
||||||
License: GPLv2 and BSD and MIT and CC-BY-SA-4.0
|
License: GPLv2 and BSD and MIT and CC-BY-SA-4.0
|
||||||
@ -236,6 +236,9 @@ Patch0222: scsi-bus-fix-unmatched-object_unref.patch
|
|||||||
Patch0223: tools-virtiofsd-Add-rseq-syscall-to-the-seccomp-allo.patch
|
Patch0223: tools-virtiofsd-Add-rseq-syscall-to-the-seccomp-allo.patch
|
||||||
Patch0224: sw_64-Add-sw64-architecture-support.patch
|
Patch0224: sw_64-Add-sw64-architecture-support.patch
|
||||||
Patch0225: coro-support-live-patch-for-libcare.patch
|
Patch0225: coro-support-live-patch-for-libcare.patch
|
||||||
|
Patch0226: qemu-img-create-cache-paramter-only-use-for-reg-file.patch
|
||||||
|
Patch0227: scsi-bus-fix-incorrect-call-for-blk_error_retry_rese.patch
|
||||||
|
Patch0228: Revert-monitor-limit-io-error-qmp-event-to-at-most-o.patch
|
||||||
|
|
||||||
BuildRequires: flex
|
BuildRequires: flex
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
@ -297,6 +300,7 @@ Requires(preun): systemd-units
|
|||||||
Requires(postun): systemd-units
|
Requires(postun): systemd-units
|
||||||
Requires(postun): qemu-block-iscsi
|
Requires(postun): qemu-block-iscsi
|
||||||
Requires(postun): qemu-block-curl
|
Requires(postun): qemu-block-curl
|
||||||
|
Requires(postun): qemu-hw-usb-host
|
||||||
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
@ -354,6 +358,11 @@ Summary: Qemu-block-curl
|
|||||||
%description block-curl
|
%description block-curl
|
||||||
This package provides block-curl support for Qemu
|
This package provides block-curl support for Qemu
|
||||||
|
|
||||||
|
%package hw-usb-host
|
||||||
|
Summary: Qemu-hw-usb-host
|
||||||
|
%description hw-usb-host
|
||||||
|
This package provides hw-usb-host support for Qemu
|
||||||
|
|
||||||
%ifarch %{ix86} x86_64
|
%ifarch %{ix86} x86_64
|
||||||
%package seabios
|
%package seabios
|
||||||
Summary: QEMU seabios
|
Summary: QEMU seabios
|
||||||
@ -518,7 +527,6 @@ rm -rf %{buildroot}%{_libdir}/%{name}/chardev-baum.so
|
|||||||
rm -rf %{buildroot}%{_libdir}/%{name}/chardev-spice.so
|
rm -rf %{buildroot}%{_libdir}/%{name}/chardev-spice.so
|
||||||
rm -rf %{buildroot}%{_libdir}/%{name}/hw-display-qxl.so
|
rm -rf %{buildroot}%{_libdir}/%{name}/hw-display-qxl.so
|
||||||
rm -rf %{buildroot}%{_libdir}/%{name}/hw-s390x-virtio-gpu-ccw.so
|
rm -rf %{buildroot}%{_libdir}/%{name}/hw-s390x-virtio-gpu-ccw.so
|
||||||
rm -rf %{buildroot}%{_libdir}/%{name}/hw-usb-host.so
|
|
||||||
rm -rf %{buildroot}%{_libdir}/%{name}/hw-usb-redirect.so
|
rm -rf %{buildroot}%{_libdir}/%{name}/hw-usb-redirect.so
|
||||||
rm -rf %{buildroot}%{_libdir}/%{name}/ui-opengl.so
|
rm -rf %{buildroot}%{_libdir}/%{name}/ui-opengl.so
|
||||||
rm -rf %{buildroot}%{_libdir}/%{name}/ui-spice-app.so
|
rm -rf %{buildroot}%{_libdir}/%{name}/ui-spice-app.so
|
||||||
@ -532,6 +540,7 @@ strip %{buildroot}%{_libdir}/%{name}/block-rbd.so
|
|||||||
strip %{buildroot}%{_libdir}/%{name}/block-iscsi.so
|
strip %{buildroot}%{_libdir}/%{name}/block-iscsi.so
|
||||||
strip %{buildroot}%{_libdir}/%{name}/block-curl.so
|
strip %{buildroot}%{_libdir}/%{name}/block-curl.so
|
||||||
strip %{buildroot}%{_libdir}/%{name}/block-ssh.so
|
strip %{buildroot}%{_libdir}/%{name}/block-ssh.so
|
||||||
|
strip %{buildroot}%{_libdir}/%{name}/hw-usb-host.so
|
||||||
|
|
||||||
for f in %{buildroot}%{_bindir}/* %{buildroot}%{_libdir}/* \
|
for f in %{buildroot}%{_bindir}/* %{buildroot}%{_libdir}/* \
|
||||||
%{buildroot}%{_libexecdir}/*; do
|
%{buildroot}%{_libexecdir}/*; do
|
||||||
@ -680,6 +689,9 @@ getent passwd qemu >/dev/null || \
|
|||||||
%files block-curl
|
%files block-curl
|
||||||
%{_libdir}/%{name}/block-curl.so
|
%{_libdir}/%{name}/block-curl.so
|
||||||
|
|
||||||
|
%files hw-usb-host
|
||||||
|
%{_libdir}/%{name}/hw-usb-host.so
|
||||||
|
|
||||||
%ifarch %{ix86} x86_64
|
%ifarch %{ix86} x86_64
|
||||||
%files seabios
|
%files seabios
|
||||||
%{_datadir}/%{name}/bios-256k.bin
|
%{_datadir}/%{name}/bios-256k.bin
|
||||||
@ -687,6 +699,16 @@ getent passwd qemu >/dev/null || \
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Mar 30 2022 yezengruan <yezengruan@huawei.com>
|
||||||
|
- scsi-bus: fix incorrect call for blk_error_retry_reset_timeout()
|
||||||
|
- Revert "monitor: limit io error qmp event to at most once per 60s"
|
||||||
|
|
||||||
|
* Fri Mar 25 2022 Jinhua Cao <caojinhua1@huawei.com>
|
||||||
|
- qemu-img create: 'cache' paramter only use for reg file image
|
||||||
|
|
||||||
|
* Thu Mar 24 2022 Yan Wang <wangyan122@huawei.com>
|
||||||
|
- spec: add hw-usb-host rpm package
|
||||||
|
|
||||||
* Fri Mar 18 2022 yezengruan <yezengruan@huawei.com>
|
* Fri Mar 18 2022 yezengruan <yezengruan@huawei.com>
|
||||||
- coro: support live patch for libcare
|
- coro: support live patch for libcare
|
||||||
- add patch for sw64 support
|
- add patch for sw64 support
|
||||||
|
|||||||
80
scsi-bus-fix-incorrect-call-for-blk_error_retry_rese.patch
Normal file
80
scsi-bus-fix-incorrect-call-for-blk_error_retry_rese.patch
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
From 3ab10a5ad9bf1cbf3b4603f5a930a7924a07ad5a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yan Wang <wangyan122@huawei.com>
|
||||||
|
Date: Tue, 29 Mar 2022 12:05:56 +0800
|
||||||
|
Subject: [PATCH 1/2] scsi-bus: fix incorrect call for
|
||||||
|
blk_error_retry_reset_timeout()
|
||||||
|
|
||||||
|
Fix commit 52115ca0("scsi-disk: Add support for retry on errors").
|
||||||
|
Call Stack:
|
||||||
|
...
|
||||||
|
scsi_read_data()
|
||||||
|
scsi_do_read(r, 0)
|
||||||
|
scsi_disk_req_check_error()
|
||||||
|
blk_error_retry_reset_timeout()
|
||||||
|
blk->retry_start_time = 0;
|
||||||
|
|
||||||
|
It will cause IO hang when storage network disconnected. Before the
|
||||||
|
storage network recovered, the upper call stack will reset the
|
||||||
|
retry_start_time, and cause the next IO operation not returned immediately.
|
||||||
|
|
||||||
|
Signed-off-by: Yan Wang <wangyan122@huawei.com>
|
||||||
|
---
|
||||||
|
hw/scsi/scsi-disk.c | 20 ++++++++++++++++----
|
||||||
|
1 file changed, 16 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
|
||||||
|
index 8661932a15..a66d2b0a98 100644
|
||||||
|
--- a/hw/scsi/scsi-disk.c
|
||||||
|
+++ b/hw/scsi/scsi-disk.c
|
||||||
|
@@ -255,10 +255,8 @@ static bool scsi_handle_rw_error(SCSIDiskReq *r, int ret, bool acct_failed)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-static bool scsi_disk_req_check_error(SCSIDiskReq *r, int ret, bool acct_failed)
|
||||||
|
+static bool scsi_disk_req_handle_error(SCSIDiskReq *r, int ret, bool acct_failed)
|
||||||
|
{
|
||||||
|
- SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
|
||||||
|
-
|
||||||
|
if (r->req.io_canceled) {
|
||||||
|
scsi_req_cancel_complete(&r->req);
|
||||||
|
return true;
|
||||||
|
@@ -268,6 +266,17 @@ static bool scsi_disk_req_check_error(SCSIDiskReq *r, int ret, bool acct_failed)
|
||||||
|
return scsi_handle_rw_error(r, ret, acct_failed);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ return false;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static bool scsi_disk_req_check_error(SCSIDiskReq *r, int ret, bool acct_failed)
|
||||||
|
+{
|
||||||
|
+ SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
|
||||||
|
+
|
||||||
|
+ if (r->req.io_canceled || ret < 0) {
|
||||||
|
+ return scsi_disk_req_handle_error(r, ret, acct_failed);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
blk_error_retry_reset_timeout(s->qdev.conf.blk);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@@ -418,7 +427,7 @@ static void scsi_do_read(SCSIDiskReq *r, int ret)
|
||||||
|
SCSIDiskClass *sdc = (SCSIDiskClass *) object_get_class(OBJECT(s));
|
||||||
|
|
||||||
|
assert (r->req.aiocb == NULL);
|
||||||
|
- if (scsi_disk_req_check_error(r, ret, false)) {
|
||||||
|
+ if (scsi_disk_req_handle_error(r, ret, false)) {
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -458,6 +467,9 @@ static void scsi_do_read_cb(void *opaque, int ret)
|
||||||
|
block_acct_failed(blk_get_stats(s->qdev.conf.blk), &r->acct);
|
||||||
|
} else {
|
||||||
|
block_acct_done(blk_get_stats(s->qdev.conf.blk), &r->acct);
|
||||||
|
+ if (!r->req.io_canceled) {
|
||||||
|
+ blk_error_retry_reset_timeout(s->qdev.conf.blk);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
scsi_do_read(opaque, ret);
|
||||||
|
aio_context_release(blk_get_aio_context(s->qdev.conf.blk));
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user