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

Reply via email to