diff options
author | Zhouyang Jia <jiazhouyang09@gmail.com> | 2018-06-15 20:14:37 -0400 |
---|---|---|
committer | Juergen Gross <jgross@suse.com> | 2018-06-19 08:54:49 -0400 |
commit | 7c63ca24c878e0051c91904b72174029320ef4bd (patch) | |
tree | 682bc15c1230921719e5480301f82adae381c9cf /drivers/xen | |
parent | 93efbd39870474cc536b9caf4a6efeb03b0bc56f (diff) |
xen/scsiback: add error handling for xenbus_printf
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>
Diffstat (limited to 'drivers/xen')
-rw-r--r-- | drivers/xen/xen-scsiback.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/xen/xen-scsiback.c b/drivers/xen/xen-scsiback.c index 7bc88fd43cfc..e2f3e8b0fba9 100644 --- a/drivers/xen/xen-scsiback.c +++ b/drivers/xen/xen-scsiback.c | |||
@@ -1012,6 +1012,7 @@ static void scsiback_do_add_lun(struct vscsibk_info *info, const char *state, | |||
1012 | { | 1012 | { |
1013 | struct v2p_entry *entry; | 1013 | struct v2p_entry *entry; |
1014 | unsigned long flags; | 1014 | unsigned long flags; |
1015 | int err; | ||
1015 | 1016 | ||
1016 | if (try) { | 1017 | if (try) { |
1017 | spin_lock_irqsave(&info->v2p_lock, flags); | 1018 | spin_lock_irqsave(&info->v2p_lock, flags); |
@@ -1027,8 +1028,11 @@ static void scsiback_do_add_lun(struct vscsibk_info *info, const char *state, | |||
1027 | scsiback_del_translation_entry(info, vir); | 1028 | scsiback_del_translation_entry(info, vir); |
1028 | } | 1029 | } |
1029 | } else if (!try) { | 1030 | } else if (!try) { |
1030 | xenbus_printf(XBT_NIL, info->dev->nodename, state, | 1031 | err = xenbus_printf(XBT_NIL, info->dev->nodename, state, |
1031 | "%d", XenbusStateClosed); | 1032 | "%d", XenbusStateClosed); |
1033 | if (err) | ||
1034 | xenbus_dev_error(info->dev, err, | ||
1035 | "%s: writing %s", __func__, state); | ||
1032 | } | 1036 | } |
1033 | } | 1037 | } |
1034 | 1038 | ||
@@ -1067,8 +1071,11 @@ static void scsiback_do_1lun_hotplug(struct vscsibk_info *info, int op, | |||
1067 | snprintf(str, sizeof(str), "vscsi-devs/%s/p-dev", ent); | 1071 | snprintf(str, sizeof(str), "vscsi-devs/%s/p-dev", ent); |
1068 | val = xenbus_read(XBT_NIL, dev->nodename, str, NULL); | 1072 | val = xenbus_read(XBT_NIL, dev->nodename, str, NULL); |
1069 | if (IS_ERR(val)) { | 1073 | if (IS_ERR(val)) { |
1070 | xenbus_printf(XBT_NIL, dev->nodename, state, | 1074 | err = xenbus_printf(XBT_NIL, dev->nodename, state, |
1071 | "%d", XenbusStateClosed); | 1075 | "%d", XenbusStateClosed); |
1076 | if (err) | ||
1077 | xenbus_dev_error(info->dev, err, | ||
1078 | "%s: writing %s", __func__, state); | ||
1072 | return; | 1079 | return; |
1073 | } | 1080 | } |
1074 | strlcpy(phy, val, VSCSI_NAMELEN); | 1081 | strlcpy(phy, val, VSCSI_NAMELEN); |
@@ -1079,8 +1086,11 @@ static void scsiback_do_1lun_hotplug(struct vscsibk_info *info, int op, | |||
1079 | err = xenbus_scanf(XBT_NIL, dev->nodename, str, "%u:%u:%u:%u", | 1086 | err = xenbus_scanf(XBT_NIL, dev->nodename, str, "%u:%u:%u:%u", |
1080 | &vir.hst, &vir.chn, &vir.tgt, &vir.lun); | 1087 | &vir.hst, &vir.chn, &vir.tgt, &vir.lun); |
1081 | if (XENBUS_EXIST_ERR(err)) { | 1088 | if (XENBUS_EXIST_ERR(err)) { |
1082 | xenbus_printf(XBT_NIL, dev->nodename, state, | 1089 | err = xenbus_printf(XBT_NIL, dev->nodename, state, |
1083 | "%d", XenbusStateClosed); | 1090 | "%d", XenbusStateClosed); |
1091 | if (err) | ||
1092 | xenbus_dev_error(info->dev, err, | ||
1093 | "%s: writing %s", __func__, state); | ||
1084 | return; | 1094 | return; |
1085 | } | 1095 | } |
1086 | 1096 | ||