On 12/06/2012 02:08 PM, Thomas Graf wrote:
On 12/06/12 at 01:57pm, Vlad Yasevich wrote:
On 12/06/2012 01:44 PM, Thomas Graf wrote:
On 12/06/12 at 01:35pm, Vlad Yasevich wrote:
We may want to mark transports as dead sooner. Probably right about
the time we pull them off the list.
We mark it dead in sctp_transport_free() which is called at the
end of sctp_assoc_rm_peer(). Do you want to mark it dead at the
beginning of sctp_assoc_rm_peer() as well? (We still need to
mark in sctp_transport_free() anyway).
Crud.. sctp_transport_free() is called directly in places... Hmm...
the one in sctp_association_free() may need to be list_del_rcu()...
It's not really needed but it wouldn't be wrong from a
documentation perspective. The assoc is always unhashed
while holding head->lock before sctp_association_free()
and all current RCU readers of transport_addr_list access
the the assoc while holding a read-lock on head->lock.
Let me respin this patch and do a list_del_rcu() there
to document the RCU'iness of it.
Right, but there may be chunks that have cached association with a ref
before sctp_association_free() is called. Now, after free they may
be looking at the transport list for whatever reason... Most places
check assoc->dead, but I don't want to get caught. So, there is
a remote chance that someone may look at transports and would crash
without rcu.
-vlad
--
To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html