1. 31 May, 2015 6 commits
    • Webb Scales's avatar
      hpsa: rework controller command submission · 25163bd5
      Webb Scales authored
      Allow driver initiated commands to have a timeout.  It does not
      yet try to do anything with timeouts on such commands.
      
      We are sending a reset in order to get rid of a command we want to abort.
      If we make it return on the same reply queue as the command we want to abort,
      the completion of the aborted command will not race with the completion of
      the reset command.
      
      Rename hpsa_scsi_do_simple_cmd_core() to hpsa_scsi_do_simple_cmd(), since
      this function is the interface for issuing commands to the controller and
      not the "core" of that implementation.  Add a parameter to it which allows
      the caller to specify the reply queue to be used.  Modify existing callers
      to specify the default reply queue.
      
      Rename __hpsa_scsi_do_simple_cmd_core() to hpsa_scsi_do_simple_cmd_core(),
      since this routine is the "core" implementation of the "do simple command"
      function and there is no longer any other function with a similar name.
      Modify the existing callers of this routine (other than
      hpsa_scsi_do_simple_cmd()) to instead call hpsa_scsi_do_simple_cmd(), since
      it will now accept the reply_queue paramenter, and it provides a controller
      lock-up check.  (Also, tweak two related message strings to make them
      distinct from each other.)
      
      Submitting a command to a locked up controller always results in a timeout,
      so check for controller lock-up before submitting.
      
      This is to enable fixing a race between command completions and
      abort completions on different reply queues in a subsequent patch.
      We want to be able to specify which reply queue an abort completion
      should occur on so that it cannot race the completion of the command
      it is trying to abort.
      
      The following race was possible in theory:
      
        1. Abort command is sent to hardware.
        2. Command to be aborted simultaneously completes on another
           reply queue.
        3. Hardware receives abort command, decides command has already
           completed and indicates this to the driver via another different
           reply queue.
        4. driver processes abort completion finds that the hardware does not know
           about the command, concludes that therefore the command cannot complete,
           returns SUCCESS indicating to the mid-layer that the scsi_cmnd may be
           re-used.
        5. Command from step 2 is processed and completed back to scsi mid
           layer (after we already promised that would never happen.)
      
      Fix by forcing aborts to complete on the same reply queue as the command
      they are aborting.
      
      Piggybacking device rescanning functionality onto the lockup
      detection thread is not a good idea because if the controller
      locks up during device rescanning, then the thread could get
      stuck, then the lockup isn't detected.  Use separate work
      queues for device rescanning and lockup detection.
      
      Detect controller lockup in abort handler.
      
      After a lockup is detected, return DO_NO_CONNECT which results in immediate
      termination of commands rather than DID_ERR which results in retries.
      
      Modify detect_controller_lockup() to return the result, to remove the need for
      a separate check.
      Reviewed-by: default avatarScott Teel <scott.teel@pmcs.com>
      Reviewed-by: default avatarKevin Barnett <kevin.barnett@pmcs.com>
      Signed-off-by: default avatarWebb Scales <webbnh@hp.com>
      Signed-off-by: default avatarDon Brace <don.brace@pmcs.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
      25163bd5
    • Webb Scales's avatar
      hpsa: clean up host, channel, target, lun prints · 0d96ef5f
      Webb Scales authored
      We had a mix of formats used for specifying controller, bus, target,
      and lun address of devices.
      
      change to the format used by the scsi midlayer and upper layer (2:3:0:0)
      so you can easily follow the information from hpsa to scsi midlayer
      to sd upper layer.
      
      Also add this information:
      - product ID
      - vendor ID
      - RAID level
      - SSD Smath Path capable and enabled
      - exposure level (sg-only)
      
      Example:
      hpsa 0000:04:00.0: added scsi 2:0:0:0: Direct-Access     HP LOGICAL VOLUME   RAID-0 SSDSmartPathCap+ En+ Exp=4
      scsi 2:0:0:0: Direct-Access     HP       LOGICAL VOLUME   10.0 PQ: 0 ANSI: 5
      sd 2:0:0:0: [sdr] 12501713072 512-byte logical blocks: (6.40 TB/5.82 TiB)
      sd 2:0:0:0: [sdr] 4096-byte physical blocks
      sd 2:0:0:0: [sdr] Attached SCSI disk
      sd 2:0:0:0: Attached scsi generic sg20 type 0
      Reviewed-by: default avatarScott Teel <scott.teel@pmcs.com>
      Reviewed-by: default avatarKevin Barnett <kevin.barnett@pmcs.com>
      Reviewed-by: default avatarTomas Henzl <thenzl@redhat.com>
      Reviewed-by: default avatarHannes Reinecke <hare@Suse.de>
      Signed-off-by: default avatarRobert Elliott <elliott@hp.com>
      Signed-off-by: default avatarDon Brace <don.brace@pmcs.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
      0d96ef5f
    • Stephen Cameron's avatar
      hpsa: add masked physical devices into h->dev[] array · 41ce4c35
      Stephen Cameron authored
      Cache the ioaccel handle so that when we need to abort commands sent
      down the ioaccel2 path, we can look up the LUN ID in h->dev[] instead of
      having to do I/O to the controller.
      
      Add a field to elements in h->dev[] to keep track of how the device is exposed
      to the SCSI mid layer: Not at all, without an upper level driver
      (no_uld_attach) or normally exposed.
      
      Since masked physical devices are now present in h->dev[] array
      it would be perfectly possible to do
      
      	echo scsi add-single-device 2 2 0 0 > /proc/scsi/scsi
      
      and bring them online.  This was previously not allowed for masked
      physical devices.
      
      Ensure that the mapping of physical disks to logical drives gets updated in a
      consistent way when a RAID migration occurs and is not touched until updates
      to it are complete.
      
      now instead of doing CISS_REPORT_PHYSICAL to get the LUNID for
      the physical disk in hpsa_get_pdisk_of_ioaccel2(), just get
      it out of h->dev[] where we already have it cached.
      
      do not touch phys_disk[] for ioaccel enabled logical drives during rescan
      Reviewed-by: default avatarScott Teel <scott.teel@pmcs.com>
      Reviewed-by: default avatarKevin Barnett <kevin.barnett@pmcs.com>
      Reviewed-by: default avatarTomas Henzl <thenzl@redhat.com>
      Reviewed-by: default avatarHannes Reinecke <hare@Suse.de>
      Signed-off-by: default avatarDon Brace <don.brace@pmcs.com>
      Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
      41ce4c35
    • Tomas Henzl's avatar
      hpsa: dont meddle with hw which isn't ours (cciss) · 6b6c1cd7
      Tomas Henzl authored
      The hpsa driver touches the hardware before checking the pci-id table.
      This way, especially in kdump, it may confuse the proper driver (cciss).
      Signed-off-by: default avatarTomas Henzl <thenzl@redhat.com>
      Acked-by: default avatarDon Brace <Don.Brace@pmcs.com>
      Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
      6b6c1cd7
    • Tomas Henzl's avatar
      cciss: correct the non-resettable board list · b9ea9dcd
      Tomas Henzl authored
      The hpsa driver carries a more recent version,
      copy the table from there.
      Signed-off-by: default avatarTomas Henzl <thenzl@redhat.com>
      Acked-by: default avatarDon Brace <Don.Brace@pmcs.com>
      Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
      b9ea9dcd
    • Tomas Henzl's avatar
      cciss: remove duplicate entries from board_type struct · c854c385
      Tomas Henzl authored
      and devices not supported by this driver from unresettable list
      Signed-off-by: default avatarTomas Henzl <thenzl@redhat.com>
      Acked-by: default avatarDon Brace <Don.Brace@pmcs.com>
      Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
      c854c385
  2. 26 May, 2015 13 commits
  3. 25 May, 2015 21 commits