diff options
author | Richard Scheffenegger <rscheff@FreeBSD.org> | 2021-03-31 16:25:53 +0000 |
---|---|---|
committer | Richard Scheffenegger <rscheff@FreeBSD.org> | 2021-04-16 19:27:15 +0000 |
commit | dc5281a7d43917c55905d8b83a5bef69b8013071 (patch) | |
tree | c0b44405a59a4038e35789f193eef426abf43c32 | |
parent | 9cfb2dfada93c84934046d8f8b97c9b2ebb2c02a (diff) | |
download | src-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.c | 2 | ||||
-rw-r--r-- | sys/sys/sbuf.h | 1 |
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 *); |