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 <[email protected]> > CC: John Garry <[email protected]> > CC: Johannes Thumshirn <[email protected]> > CC: Ewan Milne <[email protected]> > CC: Christoph Hellwig <[email protected]> > CC: Tomas Henzl <[email protected]> > CC: Dan Williams <[email protected]> > Signed-off-by: Jason Yan <[email protected]> > --- > 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 <[email protected]>
Cheers, Hannes -- Dr. Hannes Reinecke Teamlead Storage & Networking [email protected] +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)

