aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Scheffenegger <rscheff@FreeBSD.org>2021-03-31 16:25:53 +0000
committerRichard Scheffenegger <rscheff@FreeBSD.org>2021-04-16 19:27:15 +0000
commitdc5281a7d43917c55905d8b83a5bef69b8013071 (patch)
treec0b44405a59a4038e35789f193eef426abf43c32
parent9cfb2dfada93c84934046d8f8b97c9b2ebb2c02a (diff)
downloadsrc-dc5281a7d43917c55905d8b83a5bef69b8013071.tar.gz
src-dc5281a7d43917c55905d8b83a5bef69b8013071.zip
Export sbuf_drain to orchestrate lock and drain action
While exporting large amounts of data to a sysctl request, datastructures may need to be locked. Exporting the sbuf_drain function allows the coordination between drain events and held locks, to avoid stalls. PR: 254333 Reviewed By: jhb MFC after: 2 weeks Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D29481 (cherry picked from commit c804c8f2c58ba42d476de07fbceff9ac4dd95f0e)
-rw-r--r--sys/kern/subr_sbuf.c2
-rw-r--r--sys/sys/sbuf.h1
2 files changed, 2 insertions, 1 deletions
diff --git a/sys/kern/subr_sbuf.c b/sys/kern/subr_sbuf.c
index 8fba9710debc..c8f2af2ebca2 100644
--- a/sys/kern/subr_sbuf.c
+++ b/sys/kern/subr_sbuf.c
@@ -375,7 +375,7 @@ sbuf_set_drain(struct sbuf *s, sbuf_drain_func *func, void *ctx)
/*
* Call the drain and process the return.
*/
-static int
+int
sbuf_drain(struct sbuf *s)
{
int len;
diff --git a/sys/sys/sbuf.h b/sys/sys/sbuf.h
index a3b0a179c268..1927996c8f38 100644
--- a/sys/sys/sbuf.h
+++ b/sys/sys/sbuf.h
@@ -92,6 +92,7 @@ int sbuf_vprintf(struct sbuf *, const char *, __va_list)
__printflike(2, 0);
int sbuf_putc(struct sbuf *, int);
void sbuf_set_drain(struct sbuf *, sbuf_drain_func *, void *);
+int sbuf_drain(struct sbuf *);
int sbuf_trim(struct sbuf *);
int sbuf_error(const struct sbuf *);
int sbuf_finish(struct sbuf *);