ChangeSet 1.1539.1.5, 2005/02/05 17:09:11-08:00, [EMAIL PROTECTED] [NET]: Add barriers for dst refcnt. In light of the recent discussion about sk_buff, I think we need the following patch for dst_entry. This adds a memory barrier before dst_release drops the refcnt, and a read memory barrier before dst_destroy starts destroying the entry. Signed-off-by: Herbert Xu <[EMAIL PROTECTED]> Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
include/net/dst.h | 4 +++- net/core/dst.c | 9 +++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff -Nru a/include/net/dst.h b/include/net/dst.h --- a/include/net/dst.h 2005-02-09 09:06:27 -08:00 +++ b/include/net/dst.h 2005-02-09 09:06:27 -08:00 @@ -104,8 +104,10 @@ static inline void dst_release(struct dst_entry * dst) { - if (dst) + if (dst) { + smp_mb__before_atomic_dec(); atomic_dec(&dst->__refcnt); + } } extern void * dst_alloc(struct dst_ops * ops); diff -Nru a/net/core/dst.c b/net/core/dst.c --- a/net/core/dst.c 2005-02-09 09:06:27 -08:00 +++ b/net/core/dst.c 2005-02-09 09:06:27 -08:00 @@ -142,8 +142,13 @@ void dst_destroy(struct dst_entry * dst) { - struct neighbour *neigh = dst->neighbour; - struct hh_cache *hh = dst->hh; + struct neighbour *neigh; + struct hh_cache *hh; + + smp_rmb(); + + neigh = dst->neighbour; + hh = dst->hh; dst->hh = NULL; if (hh && atomic_dec_and_test(&hh->hh_refcnt)) - To unsubscribe from this list: send the line "unsubscribe bk-commits-24" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html