summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/overlay
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/io/overlay')
-rw-r--r--usr/src/uts/common/io/overlay/overlay.c3
-rw-r--r--usr/src/uts/common/io/overlay/overlay_mux.c10
2 files changed, 11 insertions, 2 deletions
diff --git a/usr/src/uts/common/io/overlay/overlay.c b/usr/src/uts/common/io/overlay/overlay.c
index 51bb472c97..288f17ccb8 100644
--- a/usr/src/uts/common/io/overlay/overlay.c
+++ b/usr/src/uts/common/io/overlay/overlay.c
@@ -1108,7 +1108,8 @@ out:
mutex_enter(&odd->odd_lock);
overlay_io_done(odd, OVERLAY_F_IN_TX);
mutex_exit(&odd->odd_lock);
- return (mp_chain);
+ freemsgchain(mp_chain);
+ return (NULL);
}
/* ARGSUSED */
diff --git a/usr/src/uts/common/io/overlay/overlay_mux.c b/usr/src/uts/common/io/overlay/overlay_mux.c
index de669ce645..d847beb1c2 100644
--- a/usr/src/uts/common/io/overlay/overlay_mux.c
+++ b/usr/src/uts/common/io/overlay/overlay_mux.c
@@ -351,8 +351,16 @@ overlay_mux_tx(overlay_mux_t *mux, struct msghdr *hdr, mblk_t *mp)
/*
* It'd be nice to be able to use MSG_MBLK_QUICKRELE, unfortunately,
* that isn't actually supported by UDP at this time.
+ *
+ * Send with MSG_DONTWAIT to indicate clogged UDP sockets upstack.
+ */
+ ret = ksocket_sendmblk(mux->omux_ksock, hdr, MSG_DONTWAIT, &mp, kcred);
+ /*
+ * NOTE: ksocket_sendmblk() may send partial packets downstack,
+ * returning what's not sent in &mp (i.e. mp pre-call might be a
+ * b_cont of mp post-call). We can't hold up this message (it's a
+ * datagram), so we drop, and let the caller cope.
*/
- ret = ksocket_sendmblk(mux->omux_ksock, hdr, 0, &mp, kcred);
if (ret != 0)
freemsg(mp);