1. 11 Jan, 2018 34 commits
  2. 09 Jan, 2018 6 commits
    • Jason Yan's avatar
      scsi: libsas: use flush_workqueue to process disco events synchronously · 517e5153
      Jason Yan authored
      Now we are processing sas event and discover event in different
      workqueues.  It's safe to wait the discover event done in the sas event
      work. Use flush_workqueue() to insure the disco and revalidate events
      processed synchronously so that the whole discover and revalidate
      process will not be interrupted by other events.
      Signed-off-by: default avatarJason Yan <yanaijie@huawei.com>
      CC: John Garry <john.garry@huawei.com>
      CC: Johannes Thumshirn <jthumshirn@suse.de>
      CC: Ewan Milne <emilne@redhat.com>
      CC: Christoph Hellwig <hch@lst.de>
      CC: Tomas Henzl <thenzl@redhat.com>
      CC: Dan Williams <dan.j.williams@intel.com>
      Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      517e5153
    • Jason Yan's avatar
      scsi: libsas: Use new workqueue to run sas event and disco event · 93bdbd06
      Jason Yan authored
      Now all libsas works are queued to scsi host workqueue, include sas
      event work post by LLDD and sas discovery work, and a sas hotplug flow
      may be divided into several works, e.g libsas receive a
      PORTE_BYTES_DMAED event, currently we process it as following steps:
      
      sas_form_port  --- run in work in shost workq
      	sas_discover_domain  --- run in another work in shost workq
      		...
      		sas_probe_devices  --- run in new work in shost workq
      We found during hot-add a device, libsas may need run several
      works in same workqueue to add device in system, the process is
      not atomic, it may interrupt by other sas event works, like
      PHYE_LOSS_OF_SIGNAL.
      
      This patch is preparation of execute libsas sas event in sync. We need
      to use different workqueue to run sas event and disco event. Otherwise
      the work will be blocked for waiting another chained work in the same
      workqueue.
      Signed-off-by: default avatarYijing Wang <wangyijing@huawei.com>
      CC: John Garry <john.garry@huawei.com>
      CC: Johannes Thumshirn <jthumshirn@suse.de>
      CC: Ewan Milne <emilne@redhat.com>
      CC: Christoph Hellwig <hch@lst.de>
      CC: Tomas Henzl <thenzl@redhat.com>
      CC: Dan Williams <dan.j.williams@intel.com>
      Signed-off-by: default avatarJason Yan <yanaijie@huawei.com>
      Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      93bdbd06
    • Jason Yan's avatar
      scsi: libsas: make the event threshold configurable · 8eea9dd8
      Jason Yan authored
      Add a sysfs attr that LLDD can configure it for every host. We made an
      example in hisi_sas. Other LLDDs using libsas can implement it if they
      want.
      Suggested-by: default avatarHannes Reinecke <hare@suse.com>
      Signed-off-by: default avatarJason Yan <yanaijie@huawei.com>
      CC: John Garry <john.garry@huawei.com>
      CC: Johannes Thumshirn <jthumshirn@suse.de>
      CC: Ewan Milne <emilne@redhat.com>
      CC: Christoph Hellwig <hch@lst.de>
      CC: Tomas Henzl <thenzl@redhat.com>
      CC: Dan Williams <dan.j.williams@intel.com>
      Acked-by: John Garry <john.garry@huawei.com> #for hisi_sas part
      Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      8eea9dd8
    • Jason Yan's avatar
      scsi: libsas: shut down the PHY if events reached the threshold · f12486e0
      Jason Yan authored
      If the PHY burst too many events, we will alloc a lot of events for the
      worker. This may leads to memory exhaustion.
      
      Dan Williams suggested to shut down the PHY if the events reached the
      threshold, because in this case the PHY may have gone into some
      erroneous state. Users can re-enable the PHY by sysfs if they want.
      
      We cannot use the fixed memory pool because if we run out of events, the
      shut down event and loss of signal event will lost too. The events still
      need to be allocated and processed in this case.
      Suggested-by: default avatarDan Williams <dan.j.williams@intel.com>
      Signed-off-by: default avatarJason Yan <yanaijie@huawei.com>
      CC: John Garry <john.garry@huawei.com>
      CC: Johannes Thumshirn <jthumshirn@suse.de>
      CC: Ewan Milne <emilne@redhat.com>
      CC: Christoph Hellwig <hch@lst.de>
      CC: Tomas Henzl <thenzl@redhat.com>
      Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      f12486e0
    • Jason Yan's avatar
      scsi: libsas: Use dynamic alloced work to avoid sas event lost · 1c393b97
      Jason Yan authored
      Now libsas hotplug work is static, every sas event type has its own
      static work, LLDD driver queues the hotplug work into shost->work_q.  If
      LLDD driver burst posts lots hotplug events to libsas, the hotplug
      events may pending in the workqueue like
      
      shost->work_q
      new work[PORTE_BYTES_DMAED] --> |[PHYE_LOSS_OF_SIGNAL][PORTE_BYTES_DMAED] -> processing
                                      |<-------wait worker to process-------->|
      
      In this case, a new PORTE_BYTES_DMAED event coming, libsas try to queue
      it to shost->work_q, but this work is already pending, so it would be
      lost. Finally, libsas delete the related sas port and sas devices, but
      LLDD driver expect libsas add the sas port and devices(last sas event).
      
      This patch use dynamic allocated work to avoid this issue.
      Signed-off-by: default avatarYijing Wang <wangyijing@huawei.com>
      CC: John Garry <john.garry@huawei.com>
      CC: Johannes Thumshirn <jthumshirn@suse.de>
      CC: Ewan Milne <emilne@redhat.com>
      CC: Christoph Hellwig <hch@lst.de>
      CC: Tomas Henzl <thenzl@redhat.com>
      CC: Dan Williams <dan.j.williams@intel.com>
      Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
      Signed-off-by: default avatarJason Yan <yanaijie@huawei.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      1c393b97
    • Xiongfeng Wang's avatar
      scsi: mptfusion: use strlcpy() instead of strncpy() · 6f5c592c
      Xiongfeng Wang authored
      gcc-8 reports
      
      drivers/message/fusion/mptbase.c: In function 'mpt_display_event_info':
      ./include/linux/string.h:245:9: warning: '__builtin_strncpy' specified
      bound 100 equals destination size [-Wstringop-truncation]
      
      We need to use strlcpy() to make sure the dest string is nul-terminated.
      Signed-off-by: default avatarXiongfeng Wang <xiongfeng.wang@linaro.org>
      Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      6f5c592c