diff options
author | Vitaly Kuznetsov <vkuznets@redhat.com> | 2018-09-06 13:26:08 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-10-13 09:09:30 +0200 |
commit | f1cf612e3822e35b3ceb8731f62a3147b3f0cf35 (patch) | |
tree | 5672c44eb3177065ecc29f02acb11e427b5407db | |
parent | fd51d7c1699b00a869d29eb6607bdfcc93d4c800 (diff) | |
download | linux-stable-f1cf612e3822e35b3ceb8731f62a3147b3f0cf35.tar.gz linux-stable-f1cf612e3822e35b3ceb8731f62a3147b3f0cf35.tar.bz2 linux-stable-f1cf612e3822e35b3ceb8731f62a3147b3f0cf35.zip |
xen/manage: don't complain about an empty value in control/sysrq node
[ Upstream commit 87dffe86d406bee8782cac2db035acb9a28620a7 ]
When guest receives a sysrq request from the host it acknowledges it by
writing '\0' to control/sysrq xenstore node. This, however, make xenstore
watch fire again but xenbus_scanf() fails to parse empty value with "%c"
format string:
sysrq: SysRq : Emergency Sync
Emergency Sync complete
xen:manage: Error -34 reading sysrq code in control/sysrq
Ignore -ERANGE the same way we already ignore -ENOENT, empty value in
control/sysrq is totally legal.
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/xen/manage.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c index 77909a2c6723..101189fbf032 100644 --- a/drivers/xen/manage.c +++ b/drivers/xen/manage.c @@ -277,9 +277,11 @@ static void sysrq_handler(struct xenbus_watch *watch, const char **vec, /* * The Xenstore watch fires directly after registering it and * after a suspend/resume cycle. So ENOENT is no error but - * might happen in those cases. + * might happen in those cases. ERANGE is observed when we get + * an empty value (''), this happens when we acknowledge the + * request by writing '\0' below. */ - if (err != -ENOENT) + if (err != -ENOENT && err != -ERANGE) pr_err("Error %d reading sysrq code in control/sysrq\n", err); xenbus_transaction_end(xbt, 1); |