]> git.ipfire.org Git - people/ms/linux.git/commitdiff
scsi: scsi_debug: Silence unexpected unlock warnings
authorDamien Le Moal <damien.lemoal@opensource.wdc.com>
Tue, 1 Mar 2022 11:30:08 +0000 (20:30 +0900)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 9 Mar 2022 03:30:34 +0000 (22:30 -0500)
The return statement inside the sdeb_read_lock(), sdeb_read_unlock(),
sdeb_write_lock() and sdeb_write_unlock() confuse sparse, leading to many
warnings about unexpected unlocks in the resp_xxx() functions.

Modify the lock/unlock functions using the __acquire() and __release()
inline annotations for the sdebug_no_rwlock == true case to avoid these
warnings.

Link: https://lore.kernel.org/r/20220301113009.595857-2-damien.lemoal@opensource.wdc.com
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/scsi_debug.c

index 0d25b30922efc8bdf311881a432b214ebbe097fd..f4e97f2224b224fc3f1ff757c6ef32c7ae86e571 100644 (file)
@@ -3167,45 +3167,65 @@ static int prot_verify_read(struct scsi_cmnd *scp, sector_t start_sec,
 static inline void
 sdeb_read_lock(struct sdeb_store_info *sip)
 {
-       if (sdebug_no_rwlock)
-               return;
-       if (sip)
-               read_lock(&sip->macc_lck);
-       else
-               read_lock(&sdeb_fake_rw_lck);
+       if (sdebug_no_rwlock) {
+               if (sip)
+                       __acquire(&sip->macc_lck);
+               else
+                       __acquire(&sdeb_fake_rw_lck);
+       } else {
+               if (sip)
+                       read_lock(&sip->macc_lck);
+               else
+                       read_lock(&sdeb_fake_rw_lck);
+       }
 }
 
 static inline void
 sdeb_read_unlock(struct sdeb_store_info *sip)
 {
-       if (sdebug_no_rwlock)
-               return;
-       if (sip)
-               read_unlock(&sip->macc_lck);
-       else
-               read_unlock(&sdeb_fake_rw_lck);
+       if (sdebug_no_rwlock) {
+               if (sip)
+                       __release(&sip->macc_lck);
+               else
+                       __release(&sdeb_fake_rw_lck);
+       } else {
+               if (sip)
+                       read_unlock(&sip->macc_lck);
+               else
+                       read_unlock(&sdeb_fake_rw_lck);
+       }
 }
 
 static inline void
 sdeb_write_lock(struct sdeb_store_info *sip)
 {
-       if (sdebug_no_rwlock)
-               return;
-       if (sip)
-               write_lock(&sip->macc_lck);
-       else
-               write_lock(&sdeb_fake_rw_lck);
+       if (sdebug_no_rwlock) {
+               if (sip)
+                       __acquire(&sip->macc_lck);
+               else
+                       __acquire(&sdeb_fake_rw_lck);
+       } else {
+               if (sip)
+                       write_lock(&sip->macc_lck);
+               else
+                       write_lock(&sdeb_fake_rw_lck);
+       }
 }
 
 static inline void
 sdeb_write_unlock(struct sdeb_store_info *sip)
 {
-       if (sdebug_no_rwlock)
-               return;
-       if (sip)
-               write_unlock(&sip->macc_lck);
-       else
-               write_unlock(&sdeb_fake_rw_lck);
+       if (sdebug_no_rwlock) {
+               if (sip)
+                       __release(&sip->macc_lck);
+               else
+                       __release(&sdeb_fake_rw_lck);
+       } else {
+               if (sip)
+                       write_unlock(&sip->macc_lck);
+               else
+                       write_unlock(&sdeb_fake_rw_lck);
+       }
 }
 
 static int resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)