OSDN Git Service

scsi: target: core: Use RCU helpers for INQUIRY t10_alua_tg_pt_gp
authorMike Christie <michael.christie@oracle.com>
Wed, 17 Nov 2021 21:39:28 +0000 (15:39 -0600)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 19 Nov 2021 04:06:55 +0000 (23:06 -0500)
Fix the sparse warnings about t10_alua_tg_pt_gp accesses in
target_core_spc.c caused by commit 7324f47d4293 ("scsi: target: Replace
lun_tg_pt_gp_lock with rcu in I/O path")

That commit replaced the lun_tg_pt_gp_lock use in the I/O path, but it
didn't update the INQUIRY code.

Link: https://lore.kernel.org/r/20211117213928.8634-1-michael.christie@oracle.com
Reported-by: kernel test robot <lkp@intel.com>
Reviewed-by: Maurizio Lombardi <mlombard@redhat.com>
Signed-off-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_spc.c

index 22703a0..4c76498 100644 (file)
@@ -40,11 +40,11 @@ static void spc_fill_alua_data(struct se_lun *lun, unsigned char *buf)
         *
         * See spc4r17 section 6.4.2 Table 135
         */
-       spin_lock(&lun->lun_tg_pt_gp_lock);
-       tg_pt_gp = lun->lun_tg_pt_gp;
+       rcu_read_lock();
+       tg_pt_gp = rcu_dereference(lun->lun_tg_pt_gp);
        if (tg_pt_gp)
                buf[5] |= tg_pt_gp->tg_pt_gp_alua_access_type;
-       spin_unlock(&lun->lun_tg_pt_gp_lock);
+       rcu_read_unlock();
 }
 
 static u16
@@ -325,14 +325,14 @@ check_t10_vend_desc:
                 * Get the PROTOCOL IDENTIFIER as defined by spc4r17
                 * section 7.5.1 Table 362
                 */
-               spin_lock(&lun->lun_tg_pt_gp_lock);
-               tg_pt_gp = lun->lun_tg_pt_gp;
+               rcu_read_lock();
+               tg_pt_gp = rcu_dereference(lun->lun_tg_pt_gp);
                if (!tg_pt_gp) {
-                       spin_unlock(&lun->lun_tg_pt_gp_lock);
+                       rcu_read_unlock();
                        goto check_lu_gp;
                }
                tg_pt_gp_id = tg_pt_gp->tg_pt_gp_id;
-               spin_unlock(&lun->lun_tg_pt_gp_lock);
+               rcu_read_unlock();
 
                buf[off] = tpg->proto_id << 4;
                buf[off++] |= 0x1; /* CODE SET == Binary */