Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 8 Sep 2017 04:11:05 +0000 (21:11 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 8 Sep 2017 04:11:05 +0000 (21:11 -0700)
Pull SCSI updates from James Bottomley:
 "This is mostly updates of the usual suspects: lpfc, qla2xxx, hisi_sas,
  megaraid_sas, zfcp and a host of minor updates.

  The major driver change here is the elimination of the block based
  cciss driver in favour of the SCSI based hpsa driver (which now drives
  all the legacy cases cciss used to be required for). Plus a reset
  handler clean up and the redo of the SAS SMP handler to use bsg lib"

* tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (279 commits)
  scsi: scsi-mq: Always unprepare before requeuing a request
  scsi: Show .retries and .jiffies_at_alloc in debugfs
  scsi: Improve requeuing behavior
  scsi: Call scsi_initialize_rq() for filesystem requests
  scsi: qla2xxx: Reset the logo flag, after target re-login.
  scsi: qla2xxx: Fix slow mem alloc behind lock
  scsi: qla2xxx: Clear fc4f_nvme flag
  scsi: qla2xxx: add missing includes for qla_isr
  scsi: qla2xxx: Fix an integer overflow in sysfs code
  scsi: aacraid: report -ENOMEM to upper layer from aac_convert_sgraw2()
  scsi: aacraid: get rid of one level of indentation
  scsi: aacraid: fix indentation errors
  scsi: storvsc: fix memory leak on ring buffer busy
  scsi: scsi_transport_sas: switch to bsg-lib for SMP passthrough
  scsi: smartpqi: remove the smp_handler stub
  scsi: hpsa: remove the smp_handler stub
  scsi: bsg-lib: pass the release callback through bsg_setup_queue
  scsi: Rework handling of scsi_device.vpd_pg8[03]
  scsi: Rework the code for caching Vital Product Data (VPD)
  scsi: rcu: Introduce rcu_swap_protected()
  ...

12 files changed:
1  2 
MAINTAINERS
block/bsg-lib.c
drivers/block/Kconfig
drivers/scsi/lpfc/lpfc_attr.c
drivers/scsi/lpfc/lpfc_debugfs.c
drivers/scsi/lpfc/lpfc_nvmet.c
drivers/scsi/lpfc/lpfc_nvmet.h
drivers/staging/rts5208/rtsx.c
drivers/staging/unisys/visorhba/visorhba_main.c
drivers/virtio/virtio_ring.c
include/linux/bsg-lib.h
include/linux/rcupdate.h

diff --cc MAINTAINERS
Simple merge
diff --cc block/bsg-lib.c
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -44,12 -44,11 +44,11 @@@ static struct visor_channeltype_descrip
  };
  
  MODULE_DEVICE_TABLE(visorbus, visorhba_channel_types);
 -MODULE_ALIAS("visorbus:" VISOR_VHBA_CHANNEL_UUID_STR);
 +MODULE_ALIAS("visorbus:" VISOR_VHBA_CHANNEL_GUID_STR);
  
  struct visordisk_info {
+       struct scsi_device *sdev;
        u32 valid;
-       /* Disk Path */
-       u32 channel, id, lun;
        atomic_t ios_threshold;
        atomic_t error_count;
        struct visordisk_info *next;
@@@ -105,25 -101,19 +104,19 @@@ struct visorhba_devices_open 
        struct visorhba_devdata *devdata;
  };
  
- #define for_each_vdisk_match(iter, list, match) \
-       for (iter = &list->head; iter->next; iter = iter->next) \
-               if ((iter->channel == match->channel) && \
-                   (iter->id == match->id) && \
-                   (iter->lun == match->lun))
  /*
 - *    visor_thread_start - starts a thread for the device
 - *    @threadfn: Function the thread starts
 - *    @thrcontext: Context to pass to the thread, i.e. devdata
 - *    @name: string describing name of thread
 + * visor_thread_start - Starts a thread for the device
 + * @threadfn:   Function the thread starts
 + * @thrcontext: Context to pass to the thread, i.e. devdata
 + * @name:     String describing name of thread
   *
 - *    Starts a thread for the device.
 + * Starts a thread for the device.
   *
 - *    Return the task_struct * denoting the thread on success,
 - *             or NULL on failure
 + * Return: The task_struct * denoting the thread on success,
 + *       or NULL on failure
   */
 -static struct task_struct *visor_thread_start
 -(int (*threadfn)(void *), void *thrcontext, char *name)
 +static struct task_struct *visor_thread_start(int (*threadfn)(void *),
 +                                            void *thrcontext, char *name)
  {
        struct task_struct *task;
  
@@@ -302,21 -280,19 +295,20 @@@ static void cleanup_scsitaskmgmt_handle
  }
  
  /*
 - *    forward_taskmgmt_command - send taskmegmt command to the Service
 - *                               Partition
 - *    @tasktype: Type of taskmgmt command
 - *    @scsidev: Scsidev that issued command
 + * forward_taskmgmt_command - Send taskmegmt command to the Service
 + *                          Partition
 + * @tasktype: Type of taskmgmt command
 + * @scsidev:  Scsidev that issued command
   *
 - *    Create a cmdrsp packet and send it to the Serivce Partition
 - *    that will service this request.
 - *    Returns whether the command was queued successfully or not.
 + * Create a cmdrsp packet and send it to the Serivce Partition
 + * that will service this request.
 + *
 + * Return: Int representing whether command was queued successfully or not
   */
  static int forward_taskmgmt_command(enum task_mgmt_types tasktype,
-                                   struct scsi_cmnd *scsicmd)
+                                   struct scsi_device *scsidev)
  {
        struct uiscmdrsp *cmdrsp;
-       struct scsi_device *scsidev = scsicmd->device;
        struct visorhba_devdata *devdata =
                (struct visorhba_devdata *)scsidev->host->hostdata;
        int notifyresult = 0xffff;
@@@ -607,24 -570,19 +604,21 @@@ static int visorhba_slave_alloc(struct 
        struct visorhba_devdata *devdata;
        struct Scsi_Host *scsihost = (struct Scsi_Host *)scsidev->host;
  
 -              return 0; /* already allocated return success */
++      /* already allocated return success */
+       if (scsidev->hostdata)
++              return 0;
 +      /* even though we errored, treat as success */
        devdata = (struct visorhba_devdata *)scsihost->hostdata;
        if (!devdata)
 -              return 0; /* even though we errored, treat as success */
 +              return 0;
  
-       /* already allocated return success */
-       for_each_vdisk_match(vdisk, devdata, scsidev)
-               return 0;
-       tmpvdisk = kzalloc(sizeof(*tmpvdisk), GFP_ATOMIC);
-       if (!tmpvdisk)
+       vdisk = kzalloc(sizeof(*vdisk), GFP_ATOMIC);
+       if (!vdisk)
                return -ENOMEM;
  
-       tmpvdisk->channel = scsidev->channel;
-       tmpvdisk->id = scsidev->id;
-       tmpvdisk->lun = scsidev->lun;
-       vdisk->next = tmpvdisk;
+       vdisk->sdev = scsidev;
+       scsidev->hostdata = vdisk;
        return 0;
  }
  
@@@ -814,16 -766,16 +802,15 @@@ static int visorhba_serverdown(struct v
  }
  
  /*
 - *    do_scsi_linuxstat - scsi command returned linuxstat
 - *    @cmdrsp: response from IOVM
 - *    @scsicmd: Command issued.
 + * do_scsi_linuxstat - Scsi command returned linuxstat
 + * @cmdrsp:  Response from IOVM
 + * @scsicmd: Command issued
   *
 - *    Don't log errors for disk-not-present inquiries
 - *    Returns void
 + * Don't log errors for disk-not-present inquiries.
   */
 -static void
 -do_scsi_linuxstat(struct uiscmdrsp *cmdrsp, struct scsi_cmnd *scsicmd)
 +static void do_scsi_linuxstat(struct uiscmdrsp *cmdrsp,
 +                            struct scsi_cmnd *scsicmd)
  {
-       struct visorhba_devdata *devdata;
        struct visordisk_info *vdisk;
        struct scsi_device *scsidev;
  
Simple merge
Simple merge
Simple merge