diff options
author | Richard Scheffenegger <rscheff@FreeBSD.org> | 2021-03-31 16:25:53 +0000 |
---|---|---|
committer | Richard Scheffenegger <rscheff@FreeBSD.org> | 2021-03-31 17:17:37 +0000 |
commit | c804c8f2c58ba42d476de07fbceff9ac4dd95f0e (patch) | |
tree | 74e2c1a8c17bc953ebec9a14a089a029ad58f3e9 | |
parent | baacf701372bfeb3927c6b9e0b85d6eff198c6a3 (diff) | |
download | src-c804c8f2c58ba42d476de07fbceff9ac4dd95f0e.tar.gz src-c804c8f2c58ba42d476de07fbceff9ac4dd95f0e.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
-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 20a831aa75b2..66822115dbcb 100644 --- a/sys/kern/subr_sbuf.c +++ b/sys/kern/subr_sbuf.c @@ -383,7 +383,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 10b59f360cd0..d87e3917b84c 100644 --- a/sys/sys/sbuf.h +++ b/sys/sys/sbuf.h @@ -95,6 +95,7 @@ int sbuf_vprintf(struct sbuf *, const char *, __va_list) int sbuf_nl_terminate(struct sbuf *); 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 *); |