[Midnightbsd-cvs] src [9140] trunk/sys/kern/vfs_bio.c: add babarrierwrite
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sat Oct 1 22:21:12 EDT 2016
Revision: 9140
http://svnweb.midnightbsd.org/src/?rev=9140
Author: laffer1
Date: 2016-10-01 22:21:12 -0400 (Sat, 01 Oct 2016)
Log Message:
-----------
add babarrierwrite
Modified Paths:
--------------
trunk/sys/kern/vfs_bio.c
Modified: trunk/sys/kern/vfs_bio.c
===================================================================
--- trunk/sys/kern/vfs_bio.c 2016-10-02 02:20:26 UTC (rev 9139)
+++ trunk/sys/kern/vfs_bio.c 2016-10-02 02:21:12 UTC (rev 9140)
@@ -206,6 +206,9 @@
static long notbufdflashes;
SYSCTL_LONG(_vfs, OID_AUTO, notbufdflashes, CTLFLAG_RD, ¬bufdflashes, 0,
"Number of dirty buffer flushes done by the bufdaemon helpers");
+static long barrierwrites;
+SYSCTL_LONG(_vfs, OID_AUTO, barrierwrites, CTLFLAG_RW, &barrierwrites, 0,
+ "Number of barrier writes");
/*
* Wakeup point for bufdaemon, as well as indicator of whether it is already
@@ -914,6 +917,9 @@
return (0);
}
+ if (bp->b_flags & B_BARRIER)
+ barrierwrites++;
+
oldflags = bp->b_flags;
BUF_ASSERT_HELD(bp);
@@ -1038,6 +1044,8 @@
CTR3(KTR_BUF, "bdwrite(%p) vp %p flags %X", bp, bp->b_vp, bp->b_flags);
KASSERT(bp->b_bufobj != NULL, ("No b_bufobj %p", bp));
+ KASSERT((bp->b_flags & B_BARRIER) == 0,
+ ("Barrier request in delayed write %p", bp));
BUF_ASSERT_HELD(bp);
if (bp->b_flags & B_INVAL) {
@@ -1198,6 +1206,40 @@
}
/*
+ * babarrierwrite:
+ *
+ * Asynchronous barrier write. Start output on a buffer, but do not
+ * wait for it to complete. Place a write barrier after this write so
+ * that this buffer and all buffers written before it are committed to
+ * the disk before any buffers written after this write are committed
+ * to the disk. The buffer is released when the output completes.
+ */
+void
+babarrierwrite(struct buf *bp)
+{
+
+ bp->b_flags |= B_ASYNC | B_BARRIER;
+ (void) bwrite(bp);
+}
+
+/*
+ * bbarrierwrite:
+ *
+ * Synchronous barrier write. Start output on a buffer and wait for
+ * it to complete. Place a write barrier after this write so that
+ * this buffer and all buffers written before it are committed to
+ * the disk before any buffers written after this write are committed
+ * to the disk. The buffer is released when the output completes.
+ */
+int
+bbarrierwrite(struct buf *bp)
+{
+
+ bp->b_flags |= B_BARRIER;
+ return (bwrite(bp));
+}
+
+/*
* bwillwrite:
*
* Called prior to the locking of any vnodes when we are expecting to
More information about the Midnightbsd-cvs
mailing list