On (23/01/15 18:32), Dawei Li wrote: > > void ksmbd_conn_free(struct ksmbd_conn *conn) > { > - write_lock(&conn_list_lock); > - list_del(&conn->conns_list); > - write_unlock(&conn_list_lock); > + spin_lock(&conn_list_lock); > + list_del_rcu(&conn->conns_list); > + spin_unlock(&conn_list_lock); > > xa_destroy(&conn->sessions); > kvfree(conn->request_buf); >From a quick look this does not seem like a correct RCU usage. E.g. where do you wait for grace periods and synchronize readers/writers?