linux/drivers/scsi
Xiang Chen e74006edd0 scsi: hisi_sas: Fix the conflict between device gone and host reset
When device gone, it will check whether it is during reset, if not, it will
send internal task abort. Before internal task abort returned, reset
begins, and it will check whether SAS_PHY_UNUSED is set, if not, it will
call hisi_sas_init_device(), but at that time domain_device may already be
freed or part of it is freed, so it may referenece null pointer in
hisi_sas_init_device(). It may occur as follows:

    thread0				thread1
hisi_sas_dev_gone()
    check whether in RESET(no)
    internal task abort
				    reset prep
				    soft_reset
				    ... (part of reset_done)
    internal task abort failed
    release resource anyway
    clear_itct
    device->lldd_dev=NULL
				    hisi_sas_reset_init_all_device
					check sas_dev->dev_type is SAS_PHY_UNUSED and
					!device
    set dev_type SAS_PHY_UNUSED
    sas_free_device
					hisi_sas_init_device
					...

Semaphore hisi_hba.sema is used to sync the processes of device gone and
host reset.

To solve the issue, expand the scope that semaphore protects and let them
never occur together.

And also some places will check whether domain_device is NULL to judge
whether the device is gone. So when device gone, need to clear
sas_dev->sas_device.

Link: https://lore.kernel.org/r/1567774537-20003-14-git-send-email-john.garry@huawei.com
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
Signed-off-by: John Garry <john.garry@huawei.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2019-09-10 22:28:57 -04:00
..
aacraid treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18 2019-05-21 11:28:46 +02:00
aic7xxx SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
aic94xx scsi: aic94xx: Remove unnecessary null check 2019-07-30 12:12:59 -04:00
arcmsr treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
arm scsi: fas216: Mark expected switch fall-throughs 2019-08-12 21:54:03 -04:00
be2iscsi treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 338 2019-06-05 17:37:07 +02:00
bfa scsi: bfa: remove redundant assignment to variable error 2019-08-29 17:41:24 -04:00
bnx2fc scsi: bnx2fc: remove set but not used variables 'task','port','orig_task' 2019-08-29 18:53:43 -04:00
bnx2i treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
csiostor scsi: csiostor: Prefer pcie_capability_read_word() 2019-08-12 22:03:42 -04:00
cxgbi SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
cxlflash scsi: cxlflash: Mark expected switch fall-throughs 2019-07-30 15:58:28 -04:00
device_handler scsi: scsi_dh_rdac: zero cdb in send_mode_select() 2019-09-10 21:25:36 -04:00
dpt treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
esas2r scsi: esas2r: Prefer pcie_capability_read_word() 2019-08-12 22:04:06 -04:00
fcoe scsi: fcoe: fix null-ptr-deref Read in fc_release_transport 2019-09-10 21:19:55 -04:00
fnic scsi: fnic: fix msix interrupt allocation 2019-09-07 15:29:12 -04:00
hisi_sas scsi: hisi_sas: Fix the conflict between device gone and host reset 2019-09-10 22:28:57 -04:00
ibmvscsi scsi: ibmvfc: Mark expected switch fall-throughs 2019-08-07 21:30:50 -04:00
ibmvscsi_tgt scsi: ibmvscsi_tgt: Mark expected switch fall-throughs 2019-07-30 15:59:53 -04:00
isci scsi: libsas: aic94xx: hisi_sas: mvsas: pm8001: Use dev_is_expander() 2019-06-20 15:37:02 -04:00
libfc SCSI fixes on 20190720 2019-07-20 10:04:58 -07:00
libsas SCSI fixes on 20190720 2019-07-20 10:04:58 -07:00
lpfc scsi: lpfc: Fix reset recovery paths that are not recovering 2019-09-07 16:28:15 -04:00
megaraid scsi: megaraid_sas: Introduce module parameter for default queue depth 2019-08-12 21:40:37 -04:00
mpt3sas scsi: mpt3sas: Introduce module parameter to override queue depth 2019-08-29 17:55:53 -04:00
mvsas SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
pcmcia SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
pm8001 scsi: pm80xx: remove redundant assignments to variable rc 2019-08-07 22:16:17 -04:00
qedf scsi: qedf: Update the version to 8.42.3.0 2019-08-29 18:51:19 -04:00
qedi Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2019-06-27 21:06:39 -07:00
qla2xxx scsi: qla2xxx: Update driver version to 10.01.00.19-k 2019-09-07 15:38:55 -04:00
qla4xxx treewide: Add SPDX license identifier - Makefile/Kconfig 2019-05-21 10:50:46 +02:00
smartpqi scsi: smartpqi: bump version 2019-08-29 18:31:39 -04:00
snic scsi: snic: no need to check return value of debugfs_create functions 2019-01-29 00:40:54 -05:00
sym53c8xx_2 scsi: sym53c8xx_2: remove redundant assignment to retv 2019-08-12 21:58:07 -04:00
ufs scsi: ufs-hisi: use devm_platform_ioremap_resource() to simplify code 2019-09-07 16:43:05 -04:00
.gitignore
3w-9xxx.c scsi: 3w-9xxx: fix calls to dma_set_mask_and_coherent() 2019-02-25 21:37:25 -05:00
3w-9xxx.h
3w-sas.c SCSI fixes on 20190302 2019-03-02 11:39:54 -08:00
3w-sas.h
3w-xxxx.c scsi: 3w-xxxx: fix indentation issue, add missing tab 2018-12-19 21:54:07 -05:00
3w-xxxx.h
53c700_d.h_shipped
53c700.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
53c700.h
53c700.scr
a100u2w.c cross-tree: phase out dma_zalloc_coherent() 2019-01-08 07:58:37 -05:00
a100u2w.h
a2091.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
a2091.h
a3000.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
a3000.h
a4000t.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
advansys.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
aha152x.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
aha152x.h
aha1542.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
aha1542.h
aha1740.c scsi: flip the default on use_clustering 2018-12-18 23:13:12 -05:00
aha1740.h
am53c974.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
atari_scsi.c nvram: Replace nvram_* function exports with static functions 2019-01-22 10:21:43 +01:00
atp870u.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
atp870u.h
BusLogic.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 388 2019-06-05 17:37:11 +02:00
BusLogic.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 388 2019-06-05 17:37:11 +02:00
bvme6000_scsi.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
ch.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
constants.c
dc395x.c scsi: remove the use_clustering flag 2018-12-18 23:19:21 -05:00
dc395x.h
dmx3191d.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
dpt_i2o.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
dpti.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
esp_scsi.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
esp_scsi.h scsi: esp: use sg helper to iterate over scatterlist 2019-06-20 15:21:33 -04:00
fdomain_isa.c scsi: fdomain_isa: use CFG1_IRQ_MASK 2019-07-30 12:18:24 -04:00
fdomain_pci.c scsi: fdomain: Resurrect driver - PCI support 2019-06-18 19:46:18 -04:00
fdomain.c scsi: fdomain: use BSTAT_{MSG|CMD|IO} in fdomain_work() 2019-07-30 12:17:28 -04:00
fdomain.h scsi: fdomain: Add register definitions 2019-06-18 19:46:22 -04:00
FlashPoint.c
g_NCR5380.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
gdth_ioctl.h scsi: gdth: remove dead code under #ifdef GDTH_IOCTL_PROC 2019-01-08 21:58:35 -05:00
gdth_proc.c scsi: gdth: use generic DMA API 2019-01-08 21:58:35 -05:00
gdth_proc.h scsi: gdth: remove gdth_{alloc,free}_ioctl 2019-01-08 21:57:42 -05:00
gdth.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 148 2019-05-30 11:25:18 -07:00
gdth.h scsi: gdth: remove ISA and EISA support 2019-01-08 21:58:35 -05:00
gvp11.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
gvp11.h
hosts.c SCSI fixes on 20190720 2019-07-20 10:04:58 -07:00
hpsa_cmd.h SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
hpsa.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
hpsa.h scsi: hpsa: correct device resets 2019-06-18 19:46:18 -04:00
hptiop.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 285 2019-06-05 17:36:37 +02:00
hptiop.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 285 2019-06-05 17:36:37 +02:00
imm.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
imm.h
initio.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 18 2019-05-21 11:28:46 +02:00
initio.h
ipr.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
ipr.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
ips.c scsi: remove the use_clustering flag 2018-12-18 23:19:21 -05:00
ips.h
iscsi_boot_sysfs.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 287 2019-06-05 17:36:37 +02:00
iscsi_tcp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
iscsi_tcp.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
jazz_esp.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
Kconfig SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
lasi700.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
libiscsi_tcp.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
libiscsi.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
mac53c94.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
mac53c94.h
mac_esp.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
mac_scsi.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
Makefile scsi: remove pointless $(MODVERDIR)/$(obj)/53c700.ver 2019-07-17 22:39:27 +09:00
megaraid.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
megaraid.h
mesh.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
mesh.h
mvme16x_scsi.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
mvme147.c scsi: flip the default on use_clustering 2018-12-18 23:13:12 -05:00
mvme147.h
mvumi.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
mvumi.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 167 2019-05-30 11:26:39 -07:00
myrb.c SCSI misc on 20181224 2018-12-28 14:48:06 -08:00
myrb.h
myrs.c scsi: myrs: Fix uninitialized variable 2019-05-20 10:56:43 -04:00
myrs.h
ncr53c8xx.c scsi: ncr53c8xx: Mark expected switch fall-through 2019-08-07 21:53:23 -04:00
ncr53c8xx.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
NCR5380.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
NCR5380.h Revert "scsi: ncr5380: Increase register polling limit" 2019-06-20 15:37:02 -04:00
nsp32_debug.c
nsp32_io.h
nsp32.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 118 2019-05-24 17:39:02 +02:00
nsp32.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 118 2019-05-24 17:39:02 +02:00
pmcraid.c scsi: pmcraid: Fix a typo - pcmraid --> pmcraid 2019-08-12 21:57:13 -04:00
pmcraid.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
ppa.c scsi: ppa: use sg helper to iterate over scatterlist 2019-06-20 15:21:33 -04:00
ppa.h
ps3rom.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 164 2019-05-30 11:26:38 -07:00
qla1280.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 118 2019-05-24 17:39:02 +02:00
qla1280.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 118 2019-05-24 17:39:02 +02:00
qlogicfas408.c scsi: qlogicfas408: clean up a couple of indentation issues 2019-03-19 17:11:37 -04:00
qlogicfas408.h
qlogicfas.c scsi: remove the use_clustering flag 2018-12-18 23:19:21 -05:00
qlogicpti.c scsi: qlogicpti: Mark expected switch fall-throughs 2019-08-07 21:32:53 -04:00
qlogicpti.h scsi: qlogicpti: Use of_node_name_eq for node name comparisons 2019-02-13 22:07:03 -05:00
raid_class.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 437 2019-06-05 17:37:17 +02:00
script_asm.pl treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
scsi_common.c
scsi_debug.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 45 2019-05-24 17:27:12 +02:00
scsi_debugfs.c scsi: scsi_debugfs: Use for_each_set_bit to simplify code 2019-07-30 12:42:55 -04:00
scsi_debugfs.h scsi: core: add SPDX tags to scsi midlayer files missing licensing information 2019-05-21 06:16:21 -04:00
scsi_devinfo.c scsi: devinfo: BLIST_TRY_VPD_PAGES for SanDisk Cruzer Blade 2019-07-11 20:39:22 -04:00
scsi_dh.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
scsi_error.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
scsi_ioctl.c scsi: core: add SPDX tags to scsi midlayer files missing licensing information 2019-05-21 06:16:21 -04:00
scsi_lib_dma.c
scsi_lib.c scsi: core: Complain if scsi_target_block() fails 2019-08-07 21:45:10 -04:00
scsi_logging.c scsi: core: Reduce memory required for SCSI logging 2019-08-07 21:47:29 -04:00
scsi_logging.h
scsi_netlink.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
scsi_pm.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
scsi_priv.h scsi: sd: Rely on the driver core for asynchronous probing 2019-06-18 19:46:17 -04:00
scsi_proc.c bus_find_device: Unify the match callback with class_find_device 2019-06-24 05:22:31 +02:00
scsi_sas_internal.h
scsi_scan.c scsi: core: map PQ=1, PDT=other values to SCSI_SCAN_TARGET_PRESENT 2019-04-15 22:25:00 -04:00
scsi_sysctl.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 209 2019-05-30 11:29:53 -07:00
scsi_sysfs.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
scsi_trace.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 336 2019-06-05 17:37:07 +02:00
scsi_transport_api.h
scsi_transport_fc.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
scsi_transport_iscsi.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
scsi_transport_sas.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 209 2019-05-30 11:29:53 -07:00
scsi_transport_spi.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
scsi_transport_srp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 502 2019-06-19 17:09:56 +02:00
scsi.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
scsi.h
scsicam.c
sd_dif.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 410 2019-06-05 17:37:14 +02:00
sd_zbc.c SCSI fixes on 20190720 2019-07-20 10:04:58 -07:00
sd.c scsi: sd: Improve unaligned completion resid message 2019-09-07 15:30:55 -04:00
sd.h block: Kill gfp_t argument of blkdev_report_zones() 2019-07-11 20:04:37 -06:00
sense_codes.h
ses.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
sg.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 45 2019-05-24 17:27:12 +02:00
sgiwd93.c scsi: remove the use_clustering flag 2018-12-18 23:19:21 -05:00
sim710.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
sni_53c710.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 61 2019-05-24 17:36:45 +02:00
sr_ioctl.c
sr_vendor.c
sr.c scsi: sr: add a SPDX tag to sr.c 2019-05-21 06:16:23 -04:00
sr.h
st_options.h
st.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
st.h
stex.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
storvsc_drv.c SCSI fixes on 20190720 2019-07-20 10:04:58 -07:00
sun3_scsi_vme.c
sun3_scsi.c scsi: sun3_scsi: Mark expected switch fall-throughs 2019-08-07 21:33:51 -04:00
sun3x_esp.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
sun_esp.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
virtio_scsi.c scsi: virtio_scsi: unplug LUNs when events missed 2019-09-10 22:10:17 -04:00
vmw_pvscsi.c SCSI sg on 20190709 2019-07-11 15:17:41 -07:00
vmw_pvscsi.h
wd33c93.c scsi: wd33c93: Mark expected switch fall-through 2019-08-07 21:35:59 -04:00
wd33c93.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 118 2019-05-24 17:39:02 +02:00
wd719x.c SCSI misc on 20190709 2019-07-11 15:14:01 -07:00
wd719x.h scsi: wd719x: use per-command private data 2018-11-15 14:27:08 -05:00
xen-scsifront.c scsi: xen-scsifront: remove DISABLE_CLUSTERING 2018-12-18 23:13:12 -05:00
zalon.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
zorro7xx.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
zorro_esp.c