git: bd56aad33c25 - main - buf: define and use BUF_DISOWNED

From: Ryan Libby <rlibby_at_FreeBSD.org>
Date: Tue, 21 May 2024 18:16:46 UTC
The branch main has been updated by rlibby:

URL: https://cgit.FreeBSD.org/src/commit/?id=bd56aad33c2533615f76c17795f0aa70b7686309

commit bd56aad33c2533615f76c17795f0aa70b7686309
Author:     Ryan Libby <rlibby@FreeBSD.org>
AuthorDate: 2024-05-21 17:21:50 +0000
Commit:     Ryan Libby <rlibby@FreeBSD.org>
CommitDate: 2024-05-21 17:21:50 +0000

    buf: define and use BUF_DISOWNED
    
    Implement an API where previously code was directly reaching into the
    buf's internal lock.
    
    Reviewed by:    mckusick, imp, kib, markj
    Sponsored by:   Dell EMC Isilon
    Differential Revision:  https://reviews.freebsd.org/D45249
---
 sys/geom/geom_vfs.c | 4 ++--
 sys/sys/buf.h       | 7 +++++++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/sys/geom/geom_vfs.c b/sys/geom/geom_vfs.c
index 893c8dfffa6f..87b2fea21baa 100644
--- a/sys/geom/geom_vfs.c
+++ b/sys/geom/geom_vfs.c
@@ -124,12 +124,12 @@ g_vfs_done(struct bio *bip)
 			mp = cdevp->si_mountpt;
 		if (mp != NULL) {
 			if (bp->b_iocmd == BIO_READ) {
-				if (LK_HOLDER(bp->b_lock.lk_lock) == LK_KERNPROC)
+				if (BUF_DISOWNED(bp))
 					mp->mnt_stat.f_asyncreads++;
 				else
 					mp->mnt_stat.f_syncreads++;
 			} else if (bp->b_iocmd == BIO_WRITE) {
-				if (LK_HOLDER(bp->b_lock.lk_lock) == LK_KERNPROC)
+				if (BUF_DISOWNED(bp))
 					mp->mnt_stat.f_asyncwrites++;
 				else
 					mp->mnt_stat.f_syncwrites++;
diff --git a/sys/sys/buf.h b/sys/sys/buf.h
index 70fb2812c3ba..cee9547912a6 100644
--- a/sys/sys/buf.h
+++ b/sys/sys/buf.h
@@ -341,6 +341,13 @@ struct buf {
  */
 #define	BUF_ISLOCKED(bp)						\
 	lockstatus(&(bp)->b_lock)
+
+/*
+ * Check if a buffer lock is currently held by LK_KERNPROC.
+ */
+#define	BUF_DISOWNED(bp)						\
+	lockmgr_disowned(&(bp)->b_lock)
+
 /*
  * Free a buffer lock.
  */