On Thu, Sep 16, 2021 at 01:11:14PM +0800, Mark Zhang wrote: > > @@ -4928,10 +4930,10 @@ static void cma_process_remove(struct cma_device *cma_dev) > > mutex_lock(&lock); > > while (!list_empty(&cma_dev->id_list)) { > > struct rdma_id_private *id_priv = list_first_entry( > > - &cma_dev->id_list, struct rdma_id_private, list); > > + &cma_dev->id_list, struct rdma_id_private, device_item); > > > > - list_del(&id_priv->listen_list); > > - list_del_init(&id_priv->list); > > + list_del_init(&id_priv->listen_item); > > Should it still be > list_del(&id_priv->listen_list); > as it isn't dev_id_priv? Actually I misunderstood your question Yes, it should be listen_item - it makes no sense to delete a list - that would just randomly remove the first item. At this point we are iterating over a device list and the rules have device id_privs using the list_item side of the union. Only IDs on the listen_any_list use the listen_list side. Jason