Message ID | 1528774962-39173-1-git-send-email-jiazhouyang09@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On Tue, 12 Jun 2018, Zhouyang Jia wrote: > 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> > --- > drivers/scsi/xen-scsifront.c | 31 ++++++++++++++++++++++++------- > 1 file changed, 24 insertions(+), 7 deletions(-) > > diff --git a/drivers/scsi/xen-scsifront.c b/drivers/scsi/xen-scsifront.c > index 36f59a1..3d858ac 100644 > --- a/drivers/scsi/xen-scsifront.c > +++ b/drivers/scsi/xen-scsifront.c > @@ -654,10 +654,17 @@ static int scsifront_dev_reset_handler(struct scsi_cmnd *sc) > static int scsifront_sdev_configure(struct scsi_device *sdev) > { > struct vscsifrnt_info *info = shost_priv(sdev->host); > + struct xenbus_device *dev = info->dev; > + int err; > > - if (info && current == info->curr) > - xenbus_printf(XBT_NIL, info->dev->nodename, > + if (info && current == info->curr) { > + err = xenbus_printf(XBT_NIL, info->dev->nodename, > info->dev_state_path, "%d", XenbusStateConnected); The existing code checks whether 'info' is NULL before dereferencing it. But your patch checks for NULL after dereferencing. > + if (err) { > + dev_err(&dev->dev, "writing dev_state_path\n"); > + return err; > + } > + } > > return 0; > } > @@ -665,10 +672,15 @@ static int scsifront_sdev_configure(struct scsi_device *sdev) > static void scsifront_sdev_destroy(struct scsi_device *sdev) > { > struct vscsifrnt_info *info = shost_priv(sdev->host); > + struct xenbus_device *dev = info->dev; > + int err; > > - if (info && current == info->curr) > - xenbus_printf(XBT_NIL, info->dev->nodename, > + if (info && current == info->curr) { > + err = xenbus_printf(XBT_NIL, info->dev->nodename, > info->dev_state_path, "%d", XenbusStateClosed); Same here. > + if (err) > + dev_err(&dev->dev, "writing dev_state_path\n"); > + } > } > > static struct scsi_host_template scsifront_sht = { --
diff --git a/drivers/scsi/xen-scsifront.c b/drivers/scsi/xen-scsifront.c index 36f59a1..3d858ac 100644 --- a/drivers/scsi/xen-scsifront.c +++ b/drivers/scsi/xen-scsifront.c @@ -654,10 +654,17 @@ static int scsifront_dev_reset_handler(struct scsi_cmnd *sc) static int scsifront_sdev_configure(struct scsi_device *sdev) { struct vscsifrnt_info *info = shost_priv(sdev->host); + struct xenbus_device *dev = info->dev; + int err; - if (info && current == info->curr) - xenbus_printf(XBT_NIL, info->dev->nodename, + if (info && current == info->curr) { + err = xenbus_printf(XBT_NIL, info->dev->nodename, info->dev_state_path, "%d", XenbusStateConnected); + if (err) { + dev_err(&dev->dev, "writing dev_state_path\n"); + return err; + } + } return 0; } @@ -665,10 +672,15 @@ static int scsifront_sdev_configure(struct scsi_device *sdev) static void scsifront_sdev_destroy(struct scsi_device *sdev) { struct vscsifrnt_info *info = shost_priv(sdev->host); + struct xenbus_device *dev = info->dev; + int err; - if (info && current == info->curr) - xenbus_printf(XBT_NIL, info->dev->nodename, + if (info && current == info->curr) { + err = xenbus_printf(XBT_NIL, info->dev->nodename, info->dev_state_path, "%d", XenbusStateClosed); + if (err) + dev_err(&dev->dev, "writing dev_state_path\n"); + } } static struct scsi_host_template scsifront_sht = { @@ -1003,9 +1015,11 @@ static void scsifront_do_lun_hotplug(struct vscsifrnt_info *info, int op) if (scsi_add_device(info->host, chn, tgt, lun)) { dev_err(&dev->dev, "scsi_add_device\n"); - xenbus_printf(XBT_NIL, dev->nodename, + err = xenbus_printf(XBT_NIL, dev->nodename, info->dev_state_path, "%d", XenbusStateClosed); + if (err) + dev_err(&dev->dev, "writing dev_state_path\n"); } break; case VSCSIFRONT_OP_DEL_LUN: @@ -1019,10 +1033,13 @@ static void scsifront_do_lun_hotplug(struct vscsifrnt_info *info, int op) } break; case VSCSIFRONT_OP_READD_LUN: - if (device_state == XenbusStateConnected) - xenbus_printf(XBT_NIL, dev->nodename, + if (device_state == XenbusStateConnected) { + err = xenbus_printf(XBT_NIL, dev->nodename, info->dev_state_path, "%d", XenbusStateConnected); + if (err) + dev_err(&dev->dev, "writing dev_state_path\n"); + } break; default: break;
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> --- drivers/scsi/xen-scsifront.c | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-)