Author: np
Date: Wed May 24 20:01:12 2017
New Revision: 318804
URL: https://svnweb.freebsd.org/changeset/base/318804

Log:
  MFC r313346:
  
  cxgbe/t4_tom: Fix CLIP entry refcounting on the passive side.  Every
  IPv6 connection being handled by the TOE should have a reference on its
  CLIP entry.
  
  Sponsored by: Chelsio Communications

Modified:
  stable/10/sys/dev/cxgbe/tom/t4_connect.c
  stable/10/sys/dev/cxgbe/tom/t4_listen.c
  stable/10/sys/dev/cxgbe/tom/t4_tom.c
  stable/10/sys/dev/cxgbe/tom/t4_tom.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/cxgbe/tom/t4_connect.c
==============================================================================
--- stable/10/sys/dev/cxgbe/tom/t4_connect.c    Wed May 24 19:57:22 2017        
(r318803)
+++ stable/10/sys/dev/cxgbe/tom/t4_connect.c    Wed May 24 20:01:12 2017        
(r318804)
@@ -402,7 +402,7 @@ t4_connect(struct toedev *tod, struct so
                if ((inp->inp_vflag & INP_IPV6) == 0)
                        DONT_OFFLOAD_ACTIVE_OPEN(ENOTSUP);
 
-               toep->ce = hold_lip(td, &inp->in6p_laddr);
+               toep->ce = hold_lip(td, &inp->in6p_laddr, NULL);
                if (toep->ce == NULL)
                        DONT_OFFLOAD_ACTIVE_OPEN(ENOENT);
 

Modified: stable/10/sys/dev/cxgbe/tom/t4_listen.c
==============================================================================
--- stable/10/sys/dev/cxgbe/tom/t4_listen.c     Wed May 24 19:57:22 2017        
(r318803)
+++ stable/10/sys/dev/cxgbe/tom/t4_listen.c     Wed May 24 20:01:12 2017        
(r318804)
@@ -207,7 +207,7 @@ alloc_lctx(struct adapter *sc, struct in
            !IN6_ARE_ADDR_EQUAL(&in6addr_any, &inp->in6p_laddr)) {
                struct tom_data *td = sc->tom_softc;
 
-               lctx->ce = hold_lip(td, &inp->in6p_laddr);
+               lctx->ce = hold_lip(td, &inp->in6p_laddr, NULL);
                if (lctx->ce == NULL) {
                        free(lctx, M_CXGBE);
                        return (NULL);
@@ -1639,6 +1639,8 @@ reset:
        INP_WLOCK_ASSERT(new_inp);
        MPASS(so->so_vnet == lctx->vnet);
        toep->vnet = lctx->vnet;
+       if (inc.inc_flags & INC_ISIPV6)
+               toep->ce = hold_lip(sc->tom_softc, &inc.inc6_laddr, lctx->ce);
 
        /*
         * This is for the unlikely case where the syncache entry that we added

Modified: stable/10/sys/dev/cxgbe/tom/t4_tom.c
==============================================================================
--- stable/10/sys/dev/cxgbe/tom/t4_tom.c        Wed May 24 19:57:22 2017        
(r318803)
+++ stable/10/sys/dev/cxgbe/tom/t4_tom.c        Wed May 24 20:01:12 2017        
(r318804)
@@ -745,12 +745,12 @@ search_lip(struct tom_data *td, struct i
 }
 
 struct clip_entry *
-hold_lip(struct tom_data *td, struct in6_addr *lip)
+hold_lip(struct tom_data *td, struct in6_addr *lip, struct clip_entry *ce)
 {
-       struct clip_entry *ce;
 
        mtx_lock(&td->clip_table_lock);
-       ce = search_lip(td, lip);
+       if (ce == NULL)
+               ce = search_lip(td, lip);
        if (ce != NULL)
                ce->refcount++;
        mtx_unlock(&td->clip_table_lock);

Modified: stable/10/sys/dev/cxgbe/tom/t4_tom.h
==============================================================================
--- stable/10/sys/dev/cxgbe/tom/t4_tom.h        Wed May 24 19:57:22 2017        
(r318803)
+++ stable/10/sys/dev/cxgbe/tom/t4_tom.h        Wed May 24 20:01:12 2017        
(r318804)
@@ -293,7 +293,8 @@ uint64_t calc_opt0(struct socket *, stru
 uint64_t select_ntuple(struct vi_info *, struct l2t_entry *);
 void set_tcpddp_ulp_mode(struct toepcb *);
 int negative_advice(int);
-struct clip_entry *hold_lip(struct tom_data *, struct in6_addr *);
+struct clip_entry *hold_lip(struct tom_data *, struct in6_addr *,
+    struct clip_entry *);
 void release_lip(struct tom_data *, struct clip_entry *);
 
 /* t4_connect.c */
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to