]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
IB/cm: Drop lockdep assert and WARN when freeing old msg
authorVlad Dumitrescu <vdumitrescu@nvidia.com>
Mon, 28 Apr 2025 11:30:18 +0000 (14:30 +0300)
committerLeon Romanovsky <leon@kernel.org>
Mon, 5 May 2025 15:44:12 +0000 (11:44 -0400)
The send completion handler can run after cm_id has advanced to another
message.  The cm_id lock is not needed in this case, but a recent change
re-used cm_free_priv_msg(), which asserts that the lock is held and
WARNs if the cm_id's currently outstanding msg is different than the one
being freed.

Fixes: 1e5159219076 ("IB/cm: Do not hold reference on cm_id unless needed")
Signed-off-by: Vlad Dumitrescu <vdumitrescu@nvidia.com>
Reviewed-by: Sean Hefty <shefty@nvidia.com>
Link: https://patch.msgid.link/0c364c29142f72b7875fdeba51f3c9bd6ca863ee.1745839788.git.leon@kernel.org
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/core/cm.c

index effa53dd6800277e5b21e4139ab813586e15612d..e64cbd034a2a19e60efdb5eb1e54312c3f76685c 100644 (file)
@@ -3786,7 +3786,8 @@ static void cm_process_send_error(struct cm_id_private *cm_id_priv,
        spin_lock_irq(&cm_id_priv->lock);
        if (msg != cm_id_priv->msg) {
                spin_unlock_irq(&cm_id_priv->lock);
-               cm_free_priv_msg(msg);
+               cm_free_msg(msg);
+               cm_deref_id(cm_id_priv);
                return;
        }
        cm_free_priv_msg(msg);