summaryrefslogtreecommitdiffstats
path: root/sys/sys/bufobj.h
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2013-05-31 00:43:41 +0000
committerjeff <jeff@FreeBSD.org>2013-05-31 00:43:41 +0000
commitd7efebc4db8c1b875c915fb1a2759cb9df4f2956 (patch)
tree47c74a9a8f1d3fbea9e54f402b3cf363e92546a4 /sys/sys/bufobj.h
parent7c988b2ec361d43cc84f05e89080a923a7101a76 (diff)
downloadFreeBSD-src-d7efebc4db8c1b875c915fb1a2759cb9df4f2956.zip
FreeBSD-src-d7efebc4db8c1b875c915fb1a2759cb9df4f2956.tar.gz
- Convert the bufobj lock to rwlock.
- Use a shared bufobj lock in getblk() and inmem(). - Convert softdep's lk to rwlock to match the bufobj lock. - Move INFREECNT to b_flags and protect it with the buf lock. - Remove unnecessary locking around bremfree() and BKGRDINPROG. Sponsored by: EMC / Isilon Storage Division Discussed with: mckusick, kib, mdf
Diffstat (limited to 'sys/sys/bufobj.h')
-rw-r--r--sys/sys/bufobj.h17
1 files changed, 10 insertions, 7 deletions
diff --git a/sys/sys/bufobj.h b/sys/sys/bufobj.h
index ca2a2bc..44a4f70 100644
--- a/sys/sys/bufobj.h
+++ b/sys/sys/bufobj.h
@@ -53,7 +53,7 @@
#include <sys/queue.h>
#include <sys/_lock.h>
-#include <sys/_mutex.h>
+#include <sys/_rwlock.h>
#include <sys/_pctrie.h>
struct bufobj;
@@ -89,7 +89,7 @@ struct buf_ops {
#define BO_BDFLUSH(bo, bp) ((bo)->bo_ops->bop_bdflush((bo), (bp)))
struct bufobj {
- struct mtx bo_mtx; /* Mutex which protects "i" things */
+ struct rwlock bo_lock; /* Lock which protects "i" things */
struct buf_ops *bo_ops; /* - Buffer operations */
struct vm_object *bo_object; /* v Place to store VM object */
LIST_ENTRY(bufobj) bo_synclist; /* S dirty vnode list */
@@ -113,11 +113,14 @@ struct bufobj {
#define BO_ONWORKLST (1 << 0) /* On syncer work-list */
#define BO_WWAIT (1 << 1) /* Wait for output to complete */
-#define BO_MTX(bo) (&(bo)->bo_mtx)
-#define BO_LOCK(bo) mtx_lock(BO_MTX((bo)))
-#define BO_UNLOCK(bo) mtx_unlock(BO_MTX((bo)))
-#define ASSERT_BO_LOCKED(bo) mtx_assert(BO_MTX((bo)), MA_OWNED)
-#define ASSERT_BO_UNLOCKED(bo) mtx_assert(BO_MTX((bo)), MA_NOTOWNED)
+#define BO_LOCKPTR(bo) (&(bo)->bo_lock)
+#define BO_LOCK(bo) rw_wlock(BO_LOCKPTR((bo)))
+#define BO_UNLOCK(bo) rw_wunlock(BO_LOCKPTR((bo)))
+#define BO_RLOCK(bo) rw_rlock(BO_LOCKPTR((bo)))
+#define BO_RUNLOCK(bo) rw_runlock(BO_LOCKPTR((bo)))
+#define ASSERT_BO_WLOCKED(bo) rw_assert(BO_LOCKPTR((bo)), RA_WLOCKED)
+#define ASSERT_BO_LOCKED(bo) rw_assert(BO_LOCKPTR((bo)), RA_LOCKED)
+#define ASSERT_BO_UNLOCKED(bo) rw_assert(BO_LOCKPTR((bo)), RA_UNLOCKED)
void bufobj_wdrop(struct bufobj *bo);
void bufobj_wref(struct bufobj *bo);
OpenPOWER on IntegriCloud