RE: [PATCH 1/3] hpsa: update check for logical volume status

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Tomas Henzl [mailto:thenzl@xxxxxxxxxx]
> Sent: Friday, March 10, 2017 7:24 AM
> To: Don Brace <don.brace@xxxxxxxxxxxxx>; joseph.szczypek@xxxxxxx;
> Gerry Morong <gerry.morong@xxxxxxxxxxxxx>; John Hall
> <John.Hall@xxxxxxxxxxxxx>; jejb@xxxxxxxxxxxxxxxxxx; Kevin Barnett
> <kevin.barnett@xxxxxxxxxxxxx>; Mahesh Rajashekhara
> <mahesh.rajashekhara@xxxxxxxxxxxxx>; Bader Ali - Saleh
> <bader.alisaleh@xxxxxxxxxxxxx>; hch@xxxxxxxxxxxxx; Scott Teel
> <scott.teel@xxxxxxxxxxxxx>; Viswas G <viswas.g@xxxxxxxxxxxxx>; Justin
> Lindley <justin.lindley@xxxxxxxxxxxxx>; Scott Benesh
> <scott.benesh@xxxxxxxxxxxxx>; POSWALD@xxxxxxxx
> Cc: linux-scsi@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH 1/3] hpsa: update check for logical volume status
> 
> EXTERNAL EMAIL
> 
> 
> On 6.3.2017 22:24, Don Brace wrote:
> >  - Add in a new case for volume offline. Resolves internal
> >    testing bug for multilun array management.
> >  - Return correct status for failed TURs.
> >
> > Reviewed-by: Scott Benesh <scott.benesh@xxxxxxxxxxxxx>
> > Reviewed-by: Scott Teel <scott.teel@xxxxxxxxxxxxx>
> > Signed-off-by: Don Brace <don.brace@xxxxxxxxxxxxx>
> > ---
> >  drivers/scsi/hpsa.c     |   26 +++++++++++++-------------
> >  drivers/scsi/hpsa_cmd.h |    2 ++
> >  2 files changed, 15 insertions(+), 13 deletions(-)
> >
> > diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
> > index 524a0c7..1adc4ec 100644
> > --- a/drivers/scsi/hpsa.c
> > +++ b/drivers/scsi/hpsa.c
> > @@ -3735,7 +3735,7 @@ static int hpsa_volume_offline(struct ctlr_info
> *h,
> >                                       DEFAULT_TIMEOUT);
> >       if (rc) {
> >               cmd_free(h, c);
> 
> Hi Don,
> patch is ok, but this function returns a mix of either HPSA_LV_*
> values or some magic numbers.
> Could you replace the 0xff with HPSA_VPD_LV_STATUS_UNSUPPORTED
> (like it is in hpsa_get_volume_status)
> and in case of success return HPSA_LV_OK ?
> 
> Also it would make sense to change the return value
> from 'int' to 'unsigned char' and to drop
> this test
>                 volume_offline = hpsa_volume_offline(h, scsi3addr);
>                 if (volume_offline < 0 || volume_offline > 0xff)
>                         volume_offline = HPSA_VPD_LV_STATUS_UNSUPPORTED;
>                 this_device->volume_offline = volume_offline & 0xff;
> 
> from hpsa_update_device_info since the condition is never met.
> Switching volume_offline to an unsigned char everywhere might be also
> possible.
> 
> tomash

Agreed, be up in a V2.
And thank-you for your reviews.

Thanks,
Don Brace
ESC - Smart Storage
Microsemi Corporation

> 
> > -             return 0;
> > +             return 0xff;
> >       }
> >       sense = c->err_info->SenseInfo;
> >       if (c->err_info->SenseLen > sizeof(c->err_info->SenseInfo))
> > @@ -3746,19 +3746,13 @@ static int hpsa_volume_offline(struct
> ctlr_info *h,
> >       cmd_status = c->err_info->CommandStatus;
> >       scsi_status = c->err_info->ScsiStatus;
> >       cmd_free(h, c);
> > -     /* Is the volume 'not ready'? */
> > -     if (cmd_status != CMD_TARGET_STATUS ||
> > -             scsi_status != SAM_STAT_CHECK_CONDITION ||
> > -             sense_key != NOT_READY ||
> > -             asc != ASC_LUN_NOT_READY)  {
> > -             return 0;
> > -     }
> >
> >       /* Determine the reason for not ready state */
> >       ldstat = hpsa_get_volume_status(h, scsi3addr);
> >
> >       /* Keep volume offline in certain cases: */
> >       switch (ldstat) {
> > +     case HPSA_LV_FAILED:
> >       case HPSA_LV_UNDERGOING_ERASE:
> >       case HPSA_LV_NOT_AVAILABLE:
> >       case HPSA_LV_UNDERGOING_RPI:
> > @@ -3853,10 +3847,10 @@ static int hpsa_update_device_info(struct
> ctlr_info *h,
> >       /* Do an inquiry to the device to see what it is. */
> >       if (hpsa_scsi_do_inquiry(h, scsi3addr, 0, inq_buff,
> >               (unsigned char) OBDR_TAPE_INQ_SIZE) != 0) {
> > -             /* Inquiry failed (msg printed already) */
> >               dev_err(&h->pdev->dev,
> > -                     "hpsa_update_device_info: inquiry failed\n");
> > -             rc = -EIO;
> > +                     "%s: inquiry failed, device will be skipped.\n",
> > +                     __func__);
> > +             rc = HPSA_INQUIRY_FAILED;
> >               goto bail_out;
> >       }
> >
> > @@ -3894,6 +3888,13 @@ static int hpsa_update_device_info(struct
> ctlr_info *h,
> >               if (volume_offline < 0 || volume_offline > 0xff)
> >                       volume_offline = HPSA_VPD_LV_STATUS_UNSUPPORTED;
> >               this_device->volume_offline = volume_offline & 0xff;
> > +             if (volume_offline == HPSA_LV_FAILED) {
> > +                     rc = HPSA_LV_FAILED;
> > +                     dev_err(&h->pdev->dev,
> > +                             "%s: LV failed, device will be skipped.\n",
> > +                             __func__);
> > +                     goto bail_out;
> > +             }
> >       } else {
> >               this_device->raid_level = RAID_UNKNOWN;
> >               this_device->offload_config = 0;
> > @@ -4379,8 +4380,7 @@ static void hpsa_update_scsi_devices(struct
> ctlr_info *h)
> >                       goto out;
> >               }
> >               if (rc) {
> > -                     dev_warn(&h->pdev->dev,
> > -                             "Inquiry failed, skipping device.\n");
> > +                     h->drv_req_rescan = 1;
> >                       continue;
> >               }
> >
> > diff --git a/drivers/scsi/hpsa_cmd.h b/drivers/scsi/hpsa_cmd.h
> > index a584cdf..5961705 100644
> > --- a/drivers/scsi/hpsa_cmd.h
> > +++ b/drivers/scsi/hpsa_cmd.h
> > @@ -156,6 +156,7 @@
> >  #define CFGTBL_BusType_Fibre2G  0x00000200l
> >
> >  /* VPD Inquiry types */
> > +#define HPSA_INQUIRY_FAILED          0x02
> >  #define HPSA_VPD_SUPPORTED_PAGES        0x00
> >  #define HPSA_VPD_LV_DEVICE_ID           0x83
> >  #define HPSA_VPD_LV_DEVICE_GEOMETRY     0xC1
> > @@ -166,6 +167,7 @@
> >  /* Logical volume states */
> >  #define HPSA_VPD_LV_STATUS_UNSUPPORTED                       0xff
> >  #define HPSA_LV_OK                                      0x0
> > +#define HPSA_LV_FAILED                                       0x01
> >  #define HPSA_LV_NOT_AVAILABLE                                0x0b
> >  #define HPSA_LV_UNDERGOING_ERASE                     0x0F
> >  #define HPSA_LV_UNDERGOING_RPI                               0x12
> >





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux