linux_dsm_epyc7002/drivers/scsi
Javed Hasan 823a65409c scsi: libfc: Skip additional kref updating work event
When an rport event (RPORT_EV_READY) is updated without work being queued,
avoid taking an additional reference.

This issue was leading to memory leak. Trace from KMEMLEAK tool:

  unreferenced object 0xffff8888259e8780 (size 512):
  comm "kworker/2:1", jiffies 4433237386 (age 113021.971s)
    hex dump (first 32 bytes):
	58 0a ec cf 83 88 ff ff 00 00 00 00 00 00 00 00
	01 00 00 00 08 00 00 00 13 7d f0 1e 0e 00 00 10
  backtrace:
  [<000000006b25760f>] fc_rport_recv_req+0x3c6/0x18f0 [libfc]
  [<00000000f208d994>] fc_lport_recv_els_req+0x120/0x8a0 [libfc]
  [<00000000a9c437b8>] fc_lport_recv+0xb9/0x130 [libfc]
  [<00000000a9c437b8>] fc_lport_recv+0xb9/0x130 [libfc]
  [<00000000ad5be37b>] qedf_ll2_process_skb+0x73d/0xad0 [qedf]
  [<00000000e0eb6893>] process_one_work+0x382/0x6c0
  [<000000002dfd9e21>] worker_thread+0x57/0x5c0
  [<00000000b648204f>] kthread+0x1a0/0x1c0
  [<0000000072f5ab20>] ret_from_fork+0x35/0x40
  [<000000001d5c05d8>] 0xffffffffffffffff

Below is the log sequence which leads to memory leak.  Here we get the
RPORT_EV_READY and RPORT_EV_STOP back to back, which lead to overwrite the
event RPORT_EV_READY by event RPORT_EV_STOP.  Because of this, kref_count
gets incremented by 1.

  kernel: host0: rport fffce5: Received PLOGI request
  kernel: host0: rport fffce5: Received PLOGI in INIT state
  kernel: host0: rport fffce5: Port is Ready
  kernel: host0: rport fffce5: Received PRLI request while in state Ready
  kernel: host0: rport fffce5: PRLI rspp type 8 active 1 passive 0
  kernel: host0: rport fffce5: Received LOGO request while in state Ready
  kernel: host0: rport fffce5: Delete port
  kernel: host0: rport fffce5: Received PLOGI request
  kernel: host0: rport fffce5: Received PLOGI in state Delete - send busy
  kernel: host0: rport fffce5: work event 3
  kernel: host0: rport fffce5: lld callback ev 3
  kernel: host0: rport fffce5: work delete

Link: https://lore.kernel.org/r/20200626094959.32151-1-jhasan@marvell.com
Reviewed-by: Girish Basrur <gbasrur@marvell.com>
Reviewed-by: Saurav Kashyap <skashyap@marvell.com>
Reviewed-by: Shyam Sundar <ssundar@marvell.com>
Signed-off-by: Javed Hasan <jhasan@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2020-06-26 22:19:35 -04:00
..
aacraid scsi: aacraid: Fix an oops in error handling 2020-05-14 20:24:01 -04:00
aic7xxx treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
aic94xx scsi: Wire up ata_scsi_dma_need_drain for SAS HBA drivers 2020-06-15 23:40:43 -04:00
arcmsr SCSI misc on 20200402 2020-04-02 17:03:53 -07:00
arm SCSI misc on 20200613 2020-06-13 13:17:49 -07:00
be2iscsi
bfa scsi: bfa: Make bfad_iocmd_ioc_get_stats() static 2020-05-11 22:22:07 -04:00
bnx2fc treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
bnx2i treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
csiostor
cxgbi treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
cxlflash scsi: cxlflash: Remove an unnecessary NULL check 2020-06-09 21:57:27 -04:00
device_handler
dpt
esas2r treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
fcoe scsi: fcoe: remove unneeded semicolon in fcoe.c 2020-04-22 00:07:40 -04:00
fnic scsi: fnic: Use true, false for fnic->internal_reset_inprogress 2020-05-07 22:03:07 -04:00
hisi_sas scsi: Wire up ata_scsi_dma_need_drain for SAS HBA drivers 2020-06-15 23:40:43 -04:00
ibmvscsi SCSI misc on 20200613 2020-06-13 13:17:49 -07:00
ibmvscsi_tgt
isci scsi: Wire up ata_scsi_dma_need_drain for SAS HBA drivers 2020-06-15 23:40:43 -04:00
libfc scsi: libfc: Skip additional kref updating work event 2020-06-26 22:19:35 -04:00
libsas scsi: libsas: Add missing annotation for sas_ata_qc_issue() 2020-04-14 21:46:15 -04:00
lpfc scsi: lpfc: Avoid another null dereference in lpfc_sli4_hba_unset() 2020-06-23 23:56:52 -04:00
megaraid scsi: megaraid_sas: Update driver version to 07.714.04.00-rc1 2020-05-11 23:06:24 -04:00
mpt3sas Kbuild updates for v5.8 (2nd) 2020-06-13 13:29:16 -07:00
mvsas scsi: Wire up ata_scsi_dma_need_drain for SAS HBA drivers 2020-06-15 23:40:43 -04:00
pcmcia
pm8001 scsi: Wire up ata_scsi_dma_need_drain for SAS HBA drivers 2020-06-15 23:40:43 -04:00
qedf Kbuild updates for v5.8 (2nd) 2020-06-13 13:29:16 -07:00
qedi treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
qla2xxx scsi: qla2xxx: Fix a condition in qla2x00_find_all_fabric_devs() 2020-06-26 22:08:30 -04:00
qla4xxx treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
smartpqi treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
snic scsi: snic: Make snic_io_exch_ver_cmpl_handler() return void 2020-04-24 18:21:15 -04:00
sym53c8xx_2
ufs scsi: ufs-bsg: Fix runtime PM imbalance on error 2020-06-15 22:37:08 -04:00
.gitignore
3w-9xxx.c
3w-9xxx.h
3w-sas.c
3w-sas.h
3w-xxxx.c
3w-xxxx.h
53c700_d.h_shipped
53c700.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
53c700.h
53c700.scr
a100u2w.c
a100u2w.h
a2091.c mm: don't include asm/pgtable.h if linux/mm.h is already included 2020-06-09 09:39:13 -07:00
a2091.h
a3000.c mm: don't include asm/pgtable.h if linux/mm.h is already included 2020-06-09 09:39:13 -07:00
a3000.h
a4000t.c
advansys.c
aha152x.c
aha152x.h
aha1542.c
aha1542.h
aha1740.c scsi: aha1740: Fix an errro handling path in aha1740_probe() 2020-03-26 21:10:53 -04:00
aha1740.h
am53c974.c
atari_scsi.c
atp870u.c
atp870u.h
BusLogic.c scsi: BusLogic: Remove conversion to bool in blogic_inquiry() 2020-04-24 18:21:14 -04:00
BusLogic.h
bvme6000_scsi.c
ch.c
constants.c scsi: core: Add DID_ALLOC_FAILURE and DID_MEDIUM_ERROR to hostbyte_table 2020-04-01 22:03:04 -04:00
dc395x.c scsi: dc395x: remove dc395x_bios_param 2020-03-26 22:51:18 -04:00
dc395x.h
dmx3191d.c
dpt_i2o.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
dpti.h
esp_scsi.c
esp_scsi.h
fdomain_isa.c
fdomain_pci.c
fdomain.c
fdomain.h
FlashPoint.c
g_NCR5380.c
gdth_ioctl.h
gdth_proc.c
gdth_proc.h
gdth.c scsi: gdth: Make __gdth_execute static 2020-04-14 21:32:39 -04:00
gdth.h
gvp11.c mm: don't include asm/pgtable.h if linux/mm.h is already included 2020-06-09 09:39:13 -07:00
gvp11.h
hosts.c
hpsa_cmd.h
hpsa.c scsi: hpsa: hpsa_ioctl(): Tidy up a bit 2020-06-04 10:15:32 -04:00
hpsa.h
hptiop.c
hptiop.h
imm.c
imm.h
initio.c
initio.h
ipr.c scsi: Wire up ata_scsi_dma_need_drain for SAS HBA drivers 2020-06-15 23:40:43 -04:00
ipr.h SCSI misc on 20200402 2020-04-02 17:03:53 -07:00
ips.c
ips.h
iscsi_boot_sysfs.c scsi: iscsi: Fix reference count leak in iscsi_boot_create_kobj 2020-06-02 21:23:47 -04:00
iscsi_tcp.c
iscsi_tcp.h
jazz_esp.c
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
lasi700.c mm: don't include asm/pgtable.h if linux/mm.h is already included 2020-06-09 09:39:13 -07:00
libiscsi_tcp.c
libiscsi.c scsi: iscsi: Register sysfs for iscsi workqueue 2020-05-26 15:40:30 -04:00
mac53c94.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
mac53c94.h
mac_esp.c
mac_scsi.c
Makefile
megaraid.c
megaraid.h
mesh.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
mesh.h
mvme16x_scsi.c
mvme147.c mm: don't include asm/pgtable.h if linux/mm.h is already included 2020-06-09 09:39:13 -07:00
mvme147.h
mvumi.c
mvumi.h
myrb.c
myrb.h
myrs.c
myrs.h
ncr53c8xx.c
ncr53c8xx.h
NCR5380.c
NCR5380.h
nsp32_debug.c
nsp32_io.h
nsp32.c
nsp32.h
pmcraid.c scsi: pmcraid: Replace dma_pool_malloc with dma_pool_zalloc 2020-04-24 18:21:15 -04:00
pmcraid.h
ppa.c
ppa.h
ps3rom.c
qla1280.c scsi: qla1280: make qla1280_firmware_mutex and qla1280_fw_tbl static 2020-04-14 21:42:10 -04:00
qla1280.h
qlogicfas408.c
qlogicfas408.h
qlogicfas.c
qlogicpti.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
qlogicpti.h
raid_class.c
script_asm.pl
scsi_common.c
scsi_debug.c scsi: scsi_debug: Parser tables and code interaction 2020-05-19 22:25:52 -04:00
scsi_debugfs.c
scsi_debugfs.h
scsi_devinfo.c
scsi_dh.c
scsi_error.c scsi: core: Fix incorrect usage of shost_for_each_device 2020-05-19 21:54:17 -04:00
scsi_ioctl.c scsi_ioctl.c: switch SCSI_IOCTL_GET_IDLUN to copy_to_user() 2020-04-25 18:06:39 -04:00
scsi_lib_dma.c
scsi_lib.c SCSI misc on 20200605 2020-06-05 15:11:50 -07:00
scsi_logging.c
scsi_logging.h
scsi_netlink.c
scsi_pm.c scsi: pm: Balance pm_only counter of request queue during system resume 2020-05-11 19:43:25 -04:00
scsi_priv.h
scsi_proc.c
scsi_sas_internal.h
scsi_scan.c
scsi_sysctl.c
scsi_sysfs.c
scsi_trace.c
scsi_transport_api.h
scsi_transport_fc.c
scsi_transport_iscsi.c scsi: iscsi: Fix deadlock on recovery path during GFP_IO reclaim 2020-05-26 21:20:24 -04:00
scsi_transport_sas.c
scsi_transport_spi.c
scsi_transport_srp.c
scsi.c
scsi.h
scsicam.c
sd_dif.c
sd_zbc.c for-5.8/block-2020-06-01 2020-06-02 15:29:19 -07:00
sd.c SCSI misc on 20200605 2020-06-05 15:11:50 -07:00
sd.h scsi: sd_zbc: emulate ZONE_APPEND commands 2020-05-12 20:36:28 -06:00
sense_codes.h
ses.c
sg.c scsi: sg: add sg_remove_request in sg_write 2020-04-14 21:15:53 -04:00
sgiwd93.c scsi: sgiwd93: Remove unneeded semicolon in sgiwd93.c 2020-04-24 18:21:29 -04:00
sim710.c
sni_53c710.c mm: don't include asm/pgtable.h if linux/mm.h is already included 2020-06-09 09:39:13 -07:00
sr_ioctl.c
sr_vendor.c
sr.c SCSI misc on 20200613 2020-06-13 13:17:49 -07:00
sr.h
st_options.h
st.c scsi: st: Convert convert get_user_pages() --> pin_user_pages() 2020-06-09 21:57:26 -04:00
st.h
stex.c
storvsc_drv.c SCSI misc on 20200613 2020-06-13 13:17:49 -07:00
sun3_scsi_vme.c
sun3_scsi.c
sun3x_esp.c
sun_esp.c
virtio_scsi.c
vmw_pvscsi.c scsi: vmw_pvscsi: Use true, false for adapter->use_msg 2020-05-07 22:03:54 -04:00
vmw_pvscsi.h
wd33c93.c
wd33c93.h
wd719x.c
wd719x.h
xen-scsifront.c
zalon.c
zorro7xx.c
zorro_esp.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00