[PATCH v2 08/12] ublk: Enable lock context analysis
Bart Van Assche <[email protected]> Thu, 30 Jul 2026 12:58:31 -0700
| Newsgroups | org.kernel.vger.linux-block |
|---|---|
| Message-ID | <e69e4314501a81e81e4ac60e53ccbe3ebb40f9f7.1785440858.git.bvanassche@acm.org> |
Add the lock context annotations that are required by Clang. Cc: Ming Lei <[email protected]> Signed-off-by: Bart Van Assche <[email protected]> --- drivers/block/ublk_drv.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 2a22f9dc1f2f..b18b50efd094 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -373,11 +373,13 @@ static inline bool ublk_support_batch_io(const struct ublk_queue *ubq) } static inline void ublk_io_lock(struct ublk_io *io) + __acquires(&io->lock) { spin_lock(&io->lock); } static inline void ublk_io_unlock(struct ublk_io *io) + __releases(&io->lock) { spin_unlock(&io->lock); } @@ -3262,6 +3264,7 @@ static int ublk_check_fetch_buf(const struct ublk_device *ub, __u64 buf_addr) static int __ublk_fetch(struct io_uring_cmd *cmd, struct ublk_device *ub, struct ublk_io *io, u16 q_id) + __must_hold(&ub->mutex) { /* UBLK_IO_FETCH_REQ is only allowed before dev is setup */ if (ublk_dev_ready(ub)) @@ -3689,6 +3692,7 @@ static void ublk_batch_revert_prep_cmd(struct ublk_batch_io_iter *iter, static int ublk_batch_prep_io(struct ublk_queue *ubq, const struct ublk_batch_io_data *data, const struct ublk_elem_header *elem) + __must_hold(&data->ub->mutex) { struct ublk_io *io = &ubq->ios[elem->tag]; const struct ublk_batch_io *uc = &data->header; @@ -4422,6 +4426,7 @@ static bool ublk_validate_user_pid(struct ublk_device *ub, pid_t ublksrv_pid) * UNPREP, daemon death), so re-check it under the mutex and wait again. */ static int ublk_wait_dev_ready_and_lock(struct ublk_device *ub) + __cond_acquires(0, &ub->mutex) { while (true) { if (wait_var_event_interruptible(&ub->nr_queue_ready, @@ -5323,6 +5328,7 @@ static int ublk_char_dev_permission(struct ublk_device *ub, * already holds ub->mutex when calling del_gendisk() which freezes the queue. */ static unsigned int ublk_lock_buf_tree(struct ublk_device *ub) + __acquires(&ub->mutex) { unsigned int memflags = 0; @@ -5334,6 +5340,7 @@ static unsigned int ublk_lock_buf_tree(struct ublk_device *ub) } static void ublk_unlock_buf_tree(struct ublk_device *ub, unsigned int memflags) + __releases(&ub->mutex) { if (ub->ub_disk) blk_mq_unfreeze_queue(ub->ub_disk->queue, memflags);