Hi,
the following diff simplifies the error handling of MGETHDR() in
tcp_output(). Jumps earlier to out, prevents a double check of NULL and
makes the code more readable.
OK?
Bye,
Jan
Index: netinet/tcp_output.c
===================================================================
RCS file: /cvs/src/sys/netinet/tcp_output.c,v
retrieving revision 1.128
diff -u -p -r1.128 tcp_output.c
--- netinet/tcp_output.c 10 Nov 2018 18:40:34 -0000 1.128
+++ netinet/tcp_output.c 6 Nov 2019 14:34:40 -0000
@@ -652,17 +652,17 @@ send:
m->m_data -= hdrlen;
#else
MGETHDR(m, M_DONTWAIT, MT_HEADER);
- if (m != NULL && max_linkhdr + hdrlen > MHLEN) {
+ if (m == NULL) {
+ error = ENOBUFS;
+ goto out;
+ }
+ if (max_linkhdr + hdrlen > MHLEN) {
MCLGET(m, M_DONTWAIT);
if ((m->m_flags & M_EXT) == 0) {
m_freem(m);
m = NULL;
}
}
- if (m == NULL) {
- error = ENOBUFS;
- goto out;
- }
m->m_data += max_linkhdr;
m->m_len = hdrlen;
if (len <= m_trailingspace(m)) {
@@ -701,16 +701,16 @@ send:
tcpstat_inc(tcps_sndwinup);
MGETHDR(m, M_DONTWAIT, MT_HEADER);
- if (m != NULL && max_linkhdr + hdrlen > MHLEN) {
+ if (m == NULL) {
+ error = ENOBUFS;
+ goto out;
+ }
+ if (max_linkhdr + hdrlen > MHLEN) {
MCLGET(m, M_DONTWAIT);
if ((m->m_flags & M_EXT) == 0) {
m_freem(m);
m = NULL;
}
- }
- if (m == NULL) {
- error = ENOBUFS;
- goto out;
}
m->m_data += max_linkhdr;
m->m_len = hdrlen;