scsi: scsi_debug: Silence unexpected unlock warnings

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>
This commit is contained in:
Damien Le Moal 2022-03-01 20:30:08 +09:00 committed by Martin K. Petersen
parent 71bb9ab6e3
commit e9c478014b

View 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)