]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: zfcp: Clarify zfcp_port refcount ownership during "link" test
authorSteffen Maier <maier@linux.ibm.com>
Thu, 5 Dec 2024 14:19:31 +0000 (15:19 +0100)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 10 Dec 2024 02:54:54 +0000 (21:54 -0500)
Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
Signed-off-by: Steffen Maier <maier@linux.ibm.com>
Signed-off-by: Nihar Panda <niharp@linux.ibm.com>
Link: https://lore.kernel.org/r/20241205141932.1227039-3-niharp@linux.ibm.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/s390/scsi/zfcp_fc.c

index d6516ab004378650f18af05d3d3c233ab1b26762..1d50f463afe7fbb486e025cb64268c12f83a09b6 100644 (file)
@@ -537,6 +537,11 @@ static void zfcp_fc_adisc_handler(void *data)
        /* port is still good, nothing to do */
  out:
        atomic_andnot(ZFCP_STATUS_PORT_LINK_TEST, &port->status);
+       /*
+        * port ref comes from get_device() in zfcp_fc_test_link() and
+        * work item zfcp_fc_link_test_work() passes ref via
+        * zfcp_fc_adisc() to here, if zfcp_fc_adisc() could send ADISC
+        */
        put_device(&port->dev);
        kmem_cache_free(zfcp_fc_req_cache, fc_req);
 }
@@ -603,7 +608,7 @@ void zfcp_fc_link_test_work(struct work_struct *work)
 
        retval = zfcp_fc_adisc(port);
        if (retval == 0)
-               return;
+               return; /* port ref passed to zfcp_fc_adisc(), no put here */
 
        /* send of ADISC was not possible */
        atomic_andnot(ZFCP_STATUS_PORT_LINK_TEST, &port->status);