Re: [PATCH] xen: don't print error message in case of missing Xenstore entry

From: Boris Ostrovsky
Date: Tue May 30 2017 - 09:27:04 EST


On 05/29/2017 05:13 AM, Juergen Gross wrote:
> When registering for the Xenstore watch of the node control/sysrq the
> handler will be called at once. Don't issue an error message if the
> Xenstore node isn't there, as it will be created only when an event
> is being triggered.
>
> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
> ---
> drivers/xen/manage.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c
> index c1ec8ee80924..7ddd0803da23 100644
> --- a/drivers/xen/manage.c
> +++ b/drivers/xen/manage.c
> @@ -277,8 +277,11 @@ static void sysrq_handler(struct xenbus_watch *watch, const char *path,
> err = xenbus_transaction_start(&xbt);
> if (err)
> return;
> - if (xenbus_scanf(xbt, "control", "sysrq", "%c", &sysrq_key) < 0) {
> - pr_err("Unable to read sysrq code in control/sysrq\n");
> + err = xenbus_scanf(xbt, "control", "sysrq", "%c", &sysrq_key);
> + if (err < 0) {
> + if (err != -ENOENT)

Can we distinguish initialization invocation from actual watch firing?
E.g. '|| (system_state >= SYSTEM_RUNNING)'?

-boris

> + pr_err("Error %d reading sysrq code in control/sysrq\n",
> + err);
> xenbus_transaction_end(xbt, 1);
> return;
> }