RDMA/cm: Add a note explaining how the timewait is eventually freed
authorJason Gunthorpe <jgg@mellanox.com>
Wed, 6 May 2020 07:46:57 +0000 (10:46 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Wed, 13 May 2020 00:32:53 +0000 (21:32 -0300)
The way the cm_timewait_info is converted into a work and then freed
is very subtle and surprising, add a note clarifying the lifetime
here.

Link: https://lore.kernel.org/r/20200506074701.9775-7-leon@kernel.org
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/cm.c

index 6a2a5f6..74c46b0 100644 (file)
@@ -1025,6 +1025,11 @@ static void cm_enter_timewait(struct cm_id_private *cm_id_priv)
                                   msecs_to_jiffies(wait_time));
        spin_unlock_irqrestore(&cm.lock, flags);
 
+       /*
+        * The timewait_info is converted into a work and gets freed during
+        * cm_free_work() in cm_timewait_handler().
+        */
+       BUILD_BUG_ON(offsetof(struct cm_timewait_info, work) != 0);
        cm_id_priv->timewait_info = NULL;
 }