diff -r 797a7ded31cc -r 77bdf9b535b7 sys/netinet/siftr.c --- a/sys/netinet/siftr.c Sat Jun 19 12:34:27 2010 +1000 +++ b/sys/netinet/siftr.c Sun Jun 20 02:57:56 2010 +1000 @@ -1204,7 +1204,7 @@ struct flow_hash_node *counter, *tmp_counter; struct sbuf *s = NULL; int i, key_index, ret, error = 0; - uint32_t total_skipped_pkts = 0; + uint32_t bytes_to_write, total_skipped_pkts = 0; uint16_t lport, fport; uint8_t *key, ipver; @@ -1413,7 +1413,14 @@ sbuf_printf(s, "\n"); sbuf_finish(s); - alq_writen(siftr_alq, sbuf_data(s), sbuf_len(s), ALQ_WAITOK); + + i = 0; + do { + bytes_to_write = min(SIFTR_ALQ_BUFLEN, sbuf_len(s)-i); + alq_writen(siftr_alq, sbuf_data(s)+i, bytes_to_write, ALQ_WAITOK); + i += bytes_to_write; + } while (i < sbuf_len(s)); + alq_close(siftr_alq); siftr_alq = NULL; }