Module Name: src
Committed By: riastradh
Date: Sat May 7 16:01:00 UTC 2016
Modified Files:
src/share/man/man9: wapbl.9
Log Message:
Clarify wording about shared and exclusive locks.
Maybe this isn't important for users of wapbl, but it likely is
helpful for working in wapbl internals.
To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/share/man/man9/wapbl.9
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/share/man/man9/wapbl.9
diff -u src/share/man/man9/wapbl.9:1.12 src/share/man/man9/wapbl.9:1.13
--- src/share/man/man9/wapbl.9:1.12 Sat May 7 06:47:44 2016
+++ src/share/man/man9/wapbl.9 Sat May 7 16:01:00 2016
@@ -1,4 +1,4 @@
-.\" $NetBSD: wapbl.9,v 1.12 2016/05/07 06:47:44 riastradh Exp $
+.\" $NetBSD: wapbl.9,v 1.13 2016/05/07 16:01:00 riastradh Exp $
.\"
.\" Copyright (c) 2015 The NetBSD Foundation, Inc.
.\" All rights reserved.
@@ -156,22 +156,31 @@ method should call
.Pp
Before issuing any
.Xr buffercache 9
-writes, the file system must lock the current
+writes, the file system must acquire a shared lock on the current
.Nm
transaction with
.Fn wapbl_begin ,
which may sleep until there is room in the transaction for new writes.
-After issuing the writes, the file system must unlock the transaction
-with
+After issuing the writes, the file system must release its shared lock
+on the transaction with
.Fn wapbl_end .
Either all writes issued between
.Fn wapbl_begin
and
.Fn wapbl_end
will complete, or none of them will.
+.Pp
+File systems may also witness an
+.Em exclusive
+lock on the current transaction when
+.Nm
+is flushing the transaction to disk, or aborting a flush, and invokes a
+file system's callback.
File systems can assert that the transaction is locked with
.Fn wapbl_jlock_assert ,
-or not exclusively locked, with
+or not
+.Em exclusively
+locked, with
.Fn wapbl_junlock_assert .
.Pp
If a file system requires multiple transactions to initialize an
@@ -271,8 +280,8 @@ is a callback that
.Nm
will invoke as
.Fa flushfn Ns ( Fa mp , Fa deallocblks , Fa dealloclens , Fa dealloccnt )
-just before it flushes a transaction to disk, with the transaction
-locked exclusively, where
+just before it flushes a transaction to disk, with the an exclusive
+lock held on the transaction, where
.Fa mp
is the mount point passed to
.Fn wapbl_start ,
@@ -312,9 +321,10 @@ free memory associated with
and return zero.
.It Fn wapbl_begin wl file line
Wait for space in the current transaction for new writes, flushing it
-if necessary, and lock it.
+if necessary, and acquire a shared lock on it.
.Pp
-The lock is not exclusive: other threads may lock the transaction too.
+The lock is not exclusive: other threads may acquire shared locks on
+the transaction too.
The lock is not recursive: a thread may not acquire it again without
calling
.Fa wapbl_end
@@ -328,15 +338,20 @@ and
are the file name and line number of the caller for debugging
purposes.
.It Fn wapbl_end wl
-Unlock the transaction.
+Release a shared lock on the transaction acquired with
+.Fn wapbl_begin .
.It Fn wapbl_flush wl wait
Flush the current transaction to disk.
If
.Fa wait
is nonzero, wait for all writes in the current transaction to
complete.
+.Pp
+The current transaction must not be locked.
.It Fn wapbl_discard wl
Discard the current transaction, permanently losing any writes in it.
+.Pp
+The current transaction must not be locked.
.It Fn wapbl_add_buf wl bp
Add the buffer
.Fa bp
@@ -421,7 +436,8 @@ and
.Fn wapbl_end .
.Pp
There is no way to assert that the current transaction is not locked at
-all -- i.e., that the caller may lock the transaction with
+all -- i.e., that the caller may acquire a shared lock on the
+transaction with
.Fn wapbl_begin
without danger of deadlock.
.El