On 12/08/2017 10:42 AM, Jason Yan wrote: > 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: Yijing Wang <wangyijing@xxxxxxxxxx> > CC: John Garry <john.garry@xxxxxxxxxx> > CC: Johannes Thumshirn <jthumshirn@xxxxxxx> > CC: Ewan Milne <emilne@xxxxxxxxxx> > CC: Christoph Hellwig <hch@xxxxxx> > CC: Tomas Henzl <thenzl@xxxxxxxxxx> > CC: Dan Williams <dan.j.williams@xxxxxxxxx> > Signed-off-by: Jason Yan <yanaijie@xxxxxxxxxx> > --- > drivers/scsi/libsas/sas_event.c | 74 +++++++++++++++++++++++++++++--------- > drivers/scsi/libsas/sas_init.c | 27 ++++++++++++-- > drivers/scsi/libsas/sas_internal.h | 6 ++++ > drivers/scsi/libsas/sas_phy.c | 44 +++++------------------ > drivers/scsi/libsas/sas_port.c | 18 +++++----- > include/scsi/libsas.h | 17 +++++---- > 6 files changed, 115 insertions(+), 71 deletions(-) > Reviewed-by: Hannes Reinecke <hare@xxxxxxxx> Cheers, Hannes -- Dr. Hannes Reinecke Teamlead Storage & Networking hare@xxxxxxx +49 911 74053 688 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton HRB 21284 (AG Nürnberg)