From: Xin Long <[email protected]>
Date: Fri, 17 Feb 2017 16:35:24 +0800
> + list = rhltable_lookup(&sctp_transport_hashtable, &arg,
> + sctp_hash_params);
> +
> + rhl_for_each_entry_rcu(transport, tmp, list, node)
> + if (transport->asoc->ep == t->asoc->ep) {
> + err = -EEXIST;
> + goto out;
> + }
> +
> err = rhltable_insert_key(&sctp_transport_hashtable, &arg,
> &t->node, sctp_hash_params);
> +
> +out:
Well, what if another thread of control inserts a matching transport
after you've checked the list but before rhltable_insert_key() does
it's work?
What write side lock is being held to protect the table from
modifications here?