Print this page
OS-7088 cyclics corked on overlay socket with full queue

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/overlay/overlay_mux.c
          +++ new/usr/src/uts/common/io/overlay/overlay_mux.c
↓ open down ↓ 337 lines elided ↑ open up ↑
 338  338  }
 339  339  
 340  340  int
 341  341  overlay_mux_tx(overlay_mux_t *mux, struct msghdr *hdr, mblk_t *mp)
 342  342  {
 343  343          int ret;
 344  344  
 345  345          /*
 346  346           * It'd be nice to be able to use MSG_MBLK_QUICKRELE, unfortunately,
 347  347           * that isn't actually supported by UDP at this time.
      348 +         *
      349 +         * Send with MSG_DONTWAIT to indicate clogged UDP sockets upstack.
 348  350           */
 349      -        ret = ksocket_sendmblk(mux->omux_ksock, hdr, 0, &mp, kcred);
      351 +        ret = ksocket_sendmblk(mux->omux_ksock, hdr, MSG_DONTWAIT, &mp, kcred);
      352 +        /*
      353 +         * NOTE: ksocket_sendmblk() may send partial packets downstack,
      354 +         * returning what's not sent in &mp (i.e. mp pre-call might be a
      355 +         * b_cont of mp post-call).  We can't hold up this message (it's a
      356 +         * datagram), so we drop, and let the caller cope.
      357 +         */
 350  358          if (ret != 0)
 351  359                  freemsg(mp);
 352  360  
 353  361          return (ret);
 354  362  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX