From: Bart Van Assche bvanassche@acm.org
mainline inclusion from mainline-v6.10-rc1 commit 2a6751e052ab4789630bc889c814037068723bc1 category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/IAVLO6?from=project-issue CVE: NA
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?i...
--------------------------------
Document locking assumptions with lockdep_assert_held() instead of source code comments. The advantage of lockdep_assert_held() is that it is verified at runtime if lockdep is enabled in the kernel config.
Cc: Christoph Hellwig hch@lst.de Cc: Josef Bacik jbacik@fb.com Cc: Yu Kuai yukuai3@huawei.com Cc: Markus Pargmann mpa@pengutronix.de Signed-off-by: Bart Van Assche bvanassche@acm.org Link: https://lore.kernel.org/r/20240510202313.25209-4-bvanassche@acm.org Signed-off-by: Jens Axboe axboe@kernel.dk Conflicts: drivers/block/nbd.c [commit de4eda9de2d9 ("use less confusing names for iov_iter direction initializers") changes context in mainline.] Signed-off-by: Yu Kuai yukuai3@huawei.com --- drivers/block/nbd.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c index 5cbbee17da42..549e97d55adf 100644 --- a/drivers/block/nbd.c +++ b/drivers/block/nbd.c @@ -564,7 +564,6 @@ static inline int was_interrupted(int result) return result == -ERESTARTSYS || result == -EINTR; }
-/* always call with the tx_lock held */ static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd, int index) { struct request *req = blk_mq_rq_from_pdu(cmd); @@ -581,6 +580,9 @@ static int nbd_send_cmd(struct nbd_device *nbd, struct nbd_cmd *cmd, int index) u32 nbd_cmd_flags = 0; int sent = nsock->sent, skip = 0;
+ lockdep_assert_held(&cmd->lock); + lockdep_assert_held(&nsock->tx_lock); + iov_iter_kvec(&from, WRITE, &iov, 1, sizeof(request));
type = req_to_nbd_cmd_type(req); @@ -989,6 +991,8 @@ static int nbd_handle_cmd(struct nbd_cmd *cmd, int index) struct nbd_sock *nsock; int ret;
+ lockdep_assert_held(&cmd->lock); + config = nbd_get_config_unlocked(nbd); if (!config) { dev_err_ratelimited(disk_to_dev(nbd->disk),