Execute m_defrag() (or m_collapse(), depends on ic_seglimit variable) before submitting mbuf to the driver level. This should simplify error paths and remove two last stages from bus_dmamap_load_mbuf_sg() -(error)> m_collapse() -> bus_dmamap_load_mbuf_sg() sequence.
P.S. should it be added to the ieee80211_raw_output() too?