[PATCH v3 02/57] scsi: scsi_debug: Prepare for enabling lock context analysis
Bart Van Assche <[email protected]> Thu, 30 Jul 2026 15:44:45 -0700
| Newsgroups | org.kernel.vger.linux-scsi |
|---|---|
| Message-ID | <02c833ea2e87c7fd3f2a8490f302cfa7383647a4.1785451174.git.bvanassche@acm.org> |
Suppress lock context analysis for the functions that perform conditional locking to prevent that the Clang thread-safety analyzer complains about these functions. Remove incorrect __acquire() and __release() annotations. Signed-off-by: Bart Van Assche <[email protected]> --- drivers/scsi/scsi_debug.c | 65 +++++++++++++++++---------------------- 1 file changed, 29 insertions(+), 36 deletions(-) diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 9d1c9c41d0f9..d88164d5f409 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -4006,42 +4006,39 @@ static inline struct sdeb_store_info *devip2sip(struct sdebug_dev_info *devip, static inline void sdeb_read_lock(rwlock_t *lock) + __context_unsafe(conditional locking) { - if (sdebug_no_rwlock) - __acquire(lock); - else + if (!sdebug_no_rwlock) read_lock(lock); } static inline void sdeb_read_unlock(rwlock_t *lock) + __context_unsafe(conditional locking) { - if (sdebug_no_rwlock) - __release(lock); - else + if (!sdebug_no_rwlock) read_unlock(lock); } static inline void sdeb_write_lock(rwlock_t *lock) + __context_unsafe(conditional locking) { - if (sdebug_no_rwlock) - __acquire(lock); - else + if (!sdebug_no_rwlock) write_lock(lock); } static inline void sdeb_write_unlock(rwlock_t *lock) + __context_unsafe(conditional locking) { - if (sdebug_no_rwlock) - __release(lock); - else + if (!sdebug_no_rwlock) write_unlock(lock); } static inline void sdeb_data_read_lock(struct sdeb_store_info *sip) + __context_unsafe(conditional locking) { BUG_ON(!sip); @@ -4050,6 +4047,7 @@ sdeb_data_read_lock(struct sdeb_store_info *sip) static inline void sdeb_data_read_unlock(struct sdeb_store_info *sip) + __context_unsafe(conditional locking) { BUG_ON(!sip); @@ -4058,6 +4056,7 @@ sdeb_data_read_unlock(struct sdeb_store_info *sip) static inline void sdeb_data_write_lock(struct sdeb_store_info *sip) + __context_unsafe(conditional locking) { BUG_ON(!sip); @@ -4066,6 +4065,7 @@ sdeb_data_write_lock(struct sdeb_store_info *sip) static inline void sdeb_data_write_unlock(struct sdeb_store_info *sip) + __context_unsafe(conditional locking) { BUG_ON(!sip); @@ -4074,6 +4074,7 @@ sdeb_data_write_unlock(struct sdeb_store_info *sip) static inline void sdeb_data_sector_read_lock(struct sdeb_store_info *sip) + __context_unsafe(conditional locking) { BUG_ON(!sip); @@ -4082,6 +4083,7 @@ sdeb_data_sector_read_lock(struct sdeb_store_info *sip) static inline void sdeb_data_sector_read_unlock(struct sdeb_store_info *sip) + __context_unsafe(conditional locking) { BUG_ON(!sip); @@ -4090,6 +4092,7 @@ sdeb_data_sector_read_unlock(struct sdeb_store_info *sip) static inline void sdeb_data_sector_write_lock(struct sdeb_store_info *sip) + __context_unsafe(conditional locking) { BUG_ON(!sip); @@ -4098,6 +4101,7 @@ sdeb_data_sector_write_lock(struct sdeb_store_info *sip) static inline void sdeb_data_sector_write_unlock(struct sdeb_store_info *sip) + __context_unsafe(conditional locking) { BUG_ON(!sip); @@ -4119,6 +4123,7 @@ sdeb_data_sector_write_unlock(struct sdeb_store_info *sip) static inline void sdeb_data_lock(struct sdeb_store_info *sip, bool atomic) + __context_unsafe(conditional locking) { if (atomic) sdeb_data_write_lock(sip); @@ -4128,6 +4133,7 @@ sdeb_data_lock(struct sdeb_store_info *sip, bool atomic) static inline void sdeb_data_unlock(struct sdeb_store_info *sip, bool atomic) + __context_unsafe(conditional locking) { if (atomic) sdeb_data_write_unlock(sip); @@ -4138,6 +4144,7 @@ sdeb_data_unlock(struct sdeb_store_info *sip, bool atomic) /* Allow many reads but only 1x write per sector */ static inline void sdeb_data_sector_lock(struct sdeb_store_info *sip, bool do_write) + __context_unsafe(conditional locking) { if (do_write) sdeb_data_sector_write_lock(sip); @@ -4147,6 +4154,7 @@ sdeb_data_sector_lock(struct sdeb_store_info *sip, bool do_write) static inline void sdeb_data_sector_unlock(struct sdeb_store_info *sip, bool do_write) + __context_unsafe(conditional locking) { if (do_write) sdeb_data_sector_write_unlock(sip); @@ -4156,13 +4164,9 @@ sdeb_data_sector_unlock(struct sdeb_store_info *sip, bool do_write) static inline void sdeb_meta_read_lock(struct sdeb_store_info *sip) + __context_unsafe(conditional locking) { - if (sdebug_no_rwlock) { - if (sip) - __acquire(&sip->macc_meta_lck); - else - __acquire(&sdeb_fake_rw_lck); - } else { + if (!sdebug_no_rwlock) { if (sip) read_lock(&sip->macc_meta_lck); else @@ -4172,13 +4176,9 @@ sdeb_meta_read_lock(struct sdeb_store_info *sip) static inline void sdeb_meta_read_unlock(struct sdeb_store_info *sip) + __context_unsafe(conditional locking) { - if (sdebug_no_rwlock) { - if (sip) - __release(&sip->macc_meta_lck); - else - __release(&sdeb_fake_rw_lck); - } else { + if (!sdebug_no_rwlock) { if (sip) read_unlock(&sip->macc_meta_lck); else @@ -4188,13 +4188,9 @@ sdeb_meta_read_unlock(struct sdeb_store_info *sip) static inline void sdeb_meta_write_lock(struct sdeb_store_info *sip) + __context_unsafe(conditional locking) { - if (sdebug_no_rwlock) { - if (sip) - __acquire(&sip->macc_meta_lck); - else - __acquire(&sdeb_fake_rw_lck); - } else { + if (!sdebug_no_rwlock) { if (sip) write_lock(&sip->macc_meta_lck); else @@ -4204,13 +4200,9 @@ sdeb_meta_write_lock(struct sdeb_store_info *sip) static inline void sdeb_meta_write_unlock(struct sdeb_store_info *sip) + __context_unsafe(conditional locking) { - if (sdebug_no_rwlock) { - if (sip) - __release(&sip->macc_meta_lck); - else - __release(&sdeb_fake_rw_lck); - } else { + if (!sdebug_no_rwlock) { if (sip) write_unlock(&sip->macc_meta_lck); else @@ -5239,6 +5231,7 @@ static int resp_write_scat(struct scsi_cmnd *scp, static int resp_write_same(struct scsi_cmnd *scp, u64 lba, u32 num, u32 ei_lba, bool unmap, bool ndob) + __context_unsafe(conditional locking) { struct scsi_device *sdp = scp->device; struct sdebug_dev_info *devip = (struct sdebug_dev_info *)sdp->hostdata;