| From foo@baz Wed Aug 22 09:42:09 CEST 2018 |
| From: Zhouyang Jia <jiazhouyang09@gmail.com> |
| Date: Sat, 16 Jun 2018 08:14:37 +0800 |
| Subject: xen/scsiback: add error handling for xenbus_printf |
| |
| From: Zhouyang Jia <jiazhouyang09@gmail.com> |
| |
| [ Upstream commit 7c63ca24c878e0051c91904b72174029320ef4bd ] |
| |
| When xenbus_printf fails, the lack of error-handling code may |
| cause unexpected results. |
| |
| This patch adds error-handling code after calling xenbus_printf. |
| |
| Signed-off-by: Zhouyang Jia <jiazhouyang09@gmail.com> |
| Reviewed-by: Juergen Gross <jgross@suse.com> |
| Signed-off-by: Juergen Gross <jgross@suse.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/xen/xen-scsiback.c | 16 +++++++++++++--- |
| 1 file changed, 13 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/xen/xen-scsiback.c |
| +++ b/drivers/xen/xen-scsiback.c |
| @@ -1014,6 +1014,7 @@ static void scsiback_do_add_lun(struct v |
| { |
| struct v2p_entry *entry; |
| unsigned long flags; |
| + int err; |
| |
| if (try) { |
| spin_lock_irqsave(&info->v2p_lock, flags); |
| @@ -1029,8 +1030,11 @@ static void scsiback_do_add_lun(struct v |
| scsiback_del_translation_entry(info, vir); |
| } |
| } else if (!try) { |
| - xenbus_printf(XBT_NIL, info->dev->nodename, state, |
| + err = xenbus_printf(XBT_NIL, info->dev->nodename, state, |
| "%d", XenbusStateClosed); |
| + if (err) |
| + xenbus_dev_error(info->dev, err, |
| + "%s: writing %s", __func__, state); |
| } |
| } |
| |
| @@ -1069,8 +1073,11 @@ static void scsiback_do_1lun_hotplug(str |
| snprintf(str, sizeof(str), "vscsi-devs/%s/p-dev", ent); |
| val = xenbus_read(XBT_NIL, dev->nodename, str, NULL); |
| if (IS_ERR(val)) { |
| - xenbus_printf(XBT_NIL, dev->nodename, state, |
| + err = xenbus_printf(XBT_NIL, dev->nodename, state, |
| "%d", XenbusStateClosed); |
| + if (err) |
| + xenbus_dev_error(info->dev, err, |
| + "%s: writing %s", __func__, state); |
| return; |
| } |
| strlcpy(phy, val, VSCSI_NAMELEN); |
| @@ -1081,8 +1088,11 @@ static void scsiback_do_1lun_hotplug(str |
| err = xenbus_scanf(XBT_NIL, dev->nodename, str, "%u:%u:%u:%u", |
| &vir.hst, &vir.chn, &vir.tgt, &vir.lun); |
| if (XENBUS_EXIST_ERR(err)) { |
| - xenbus_printf(XBT_NIL, dev->nodename, state, |
| + err = xenbus_printf(XBT_NIL, dev->nodename, state, |
| "%d", XenbusStateClosed); |
| + if (err) |
| + xenbus_dev_error(info->dev, err, |
| + "%s: writing %s", __func__, state); |
| return; |
| } |
| |