Commit e9c47801 authored by Damien Le Moal's avatar Damien Le Moal Committed by Martin K. Petersen
Browse files

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: default avatarDouglas Gilbert <dgilbert@interlog.com>
Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 71bb9ab6
Loading
Loading
Loading
Loading
+44 −24
Original line number Diff line number Diff line
@@ -3167,46 +3167,66 @@ 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 (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 (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 (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 (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)
{