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


1090 
1091                 ret = odd->odd_plugin->ovp_ops->ovpo_encap(odd->odd_mh, mp,
1092                     &einfo, &ep);
1093                 if (ret != 0 || ep == NULL) {
1094                         freemsg(mp);
1095                         goto out;
1096                 }
1097 
1098                 ASSERT(ep->b_cont == mp || ep == mp);
1099                 ret = overlay_mux_tx(odd->odd_mux, &hdr, ep);
1100                 if (ret != 0)
1101                         goto out;
1102 
1103                 mp = mp_chain;
1104         }
1105 
1106 out:
1107         mutex_enter(&odd->odd_lock);
1108         overlay_io_done(odd, OVERLAY_F_IN_TX);
1109         mutex_exit(&odd->odd_lock);
1110         return (mp_chain);

1111 }
1112 
1113 /* ARGSUSED */
1114 static void
1115 overlay_m_ioctl(void *arg, queue_t *q, mblk_t *mp)
1116 {
1117         miocnak(q, mp, 0, ENOTSUP);
1118 }
1119 
1120 /* ARGSUSED */
1121 static boolean_t
1122 overlay_m_getcapab(void *arg, mac_capab_t cap, void *cap_data)
1123 {
1124         /*
1125          * Tell MAC we're an overlay.
1126          */
1127         if (cap == MAC_CAPAB_OVERLAY)
1128                 return (B_TRUE);
1129         return (B_FALSE);
1130 }




1090 
1091                 ret = odd->odd_plugin->ovp_ops->ovpo_encap(odd->odd_mh, mp,
1092                     &einfo, &ep);
1093                 if (ret != 0 || ep == NULL) {
1094                         freemsg(mp);
1095                         goto out;
1096                 }
1097 
1098                 ASSERT(ep->b_cont == mp || ep == mp);
1099                 ret = overlay_mux_tx(odd->odd_mux, &hdr, ep);
1100                 if (ret != 0)
1101                         goto out;
1102 
1103                 mp = mp_chain;
1104         }
1105 
1106 out:
1107         mutex_enter(&odd->odd_lock);
1108         overlay_io_done(odd, OVERLAY_F_IN_TX);
1109         mutex_exit(&odd->odd_lock);
1110         freemsgchain(mp_chain);
1111         return (NULL);
1112 }
1113 
1114 /* ARGSUSED */
1115 static void
1116 overlay_m_ioctl(void *arg, queue_t *q, mblk_t *mp)
1117 {
1118         miocnak(q, mp, 0, ENOTSUP);
1119 }
1120 
1121 /* ARGSUSED */
1122 static boolean_t
1123 overlay_m_getcapab(void *arg, mac_capab_t cap, void *cap_data)
1124 {
1125         /*
1126          * Tell MAC we're an overlay.
1127          */
1128         if (cap == MAC_CAPAB_OVERLAY)
1129                 return (B_TRUE);
1130         return (B_FALSE);
1131 }