Index: sys/sys/sbuf.h =================================================================== --- sys/sys/sbuf.h (revision 262601) +++ sys/sys/sbuf.h (working copy) @@ -41,6 +41,9 @@ */ struct sbuf { char *s_buf; /* storage buffer */ +#define SBUF_SSO_LEN 64 /* sso storage buffer length */ + char s_sso_buf[SBUF_SSO_LEN]; + /* sso storage buffer */ sbuf_drain_func *s_drain_func; /* drain function */ void *s_drain_arg; /* user-supplied drain argument */ int s_error; /* current error code */ Index: sys/kern/subr_sbuf.c =================================================================== --- sys/kern/subr_sbuf.c (revision 262601) +++ sys/kern/subr_sbuf.c (working copy) @@ -157,6 +157,11 @@ if (!SBUF_CANEXTEND(s)) return (-1); newsize = sbuf_extendsize(s->s_size + addlen); + if (s->s_buf == s->s_sso_buf && newsize <= SBUF_SSO_LEN) { + s->s_size = newsize; + return (0); + } + newbuf = SBMALLOC(newsize); if (newbuf == NULL) return (-1); @@ -195,6 +200,11 @@ if ((flags & SBUF_AUTOEXTEND) != 0) s->s_size = sbuf_extendsize(s->s_size); + if (s->s_size <= SBUF_SSO_LEN) { + s->s_buf = s->s_sso_buf; + return (s); + } + s->s_buf = SBMALLOC(s->s_size); if (s->s_buf == NULL) return (NULL);