summaryrefslogtreecommitdiffstats
path: root/sys/fs
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/fs
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/fs')
-rw-r--r--sys/fs/ext2fs/ext2_inode.c1
-rw-r--r--sys/fs/nandfs/nandfs_segment.c3
-rw-r--r--sys/fs/nandfs/nandfs_vnops.c3
-rw-r--r--sys/fs/nfsclient/nfs_clvnops.c2
-rw-r--r--sys/fs/nfsserver/nfs_nfsdport.c2
5 files changed, 7 insertions, 4 deletions
diff --git a/sys/fs/ext2fs/ext2_inode.c b/sys/fs/ext2fs/ext2_inode.c
index ab09588..4c4e7b6 100644
--- a/sys/fs/ext2fs/ext2_inode.c
+++ b/sys/fs/ext2fs/ext2_inode.c
@@ -43,6 +43,7 @@
#include <sys/buf.h>
#include <sys/vnode.h>
#include <sys/malloc.h>
+#include <sys/rwlock.h>
#include <vm/vm.h>
#include <vm/vm_extern.h>
diff --git a/sys/fs/nandfs/nandfs_segment.c b/sys/fs/nandfs/nandfs_segment.c
index 7433e77..8b1dc41 100644
--- a/sys/fs/nandfs/nandfs_segment.c
+++ b/sys/fs/nandfs/nandfs_segment.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
#include <sys/mount.h>
#include <sys/mutex.h>
#include <sys/namei.h>
+#include <sys/rwlock.h>
#include <sys/sysctl.h>
#include <sys/vnode.h>
#include <sys/buf.h>
@@ -702,7 +703,7 @@ nandfs_save_buf(struct buf *bp, uint64_t blocknr, struct nandfs_device *fsdev)
if (bp->b_bufobj != bo) {
BO_LOCK(bp->b_bufobj);
BUF_LOCK(bp, LK_EXCLUSIVE | LK_NOWAIT | LK_INTERLOCK,
- BO_MTX(bp->b_bufobj));
+ BO_LOCKPTR(bp->b_bufobj));
KASSERT(BUF_ISLOCKED(bp), ("Problem with locking buffer"));
}
diff --git a/sys/fs/nandfs/nandfs_vnops.c b/sys/fs/nandfs/nandfs_vnops.c
index b226d30..056ca90 100644
--- a/sys/fs/nandfs/nandfs_vnops.c
+++ b/sys/fs/nandfs/nandfs_vnops.c
@@ -46,6 +46,7 @@ __FBSDID("$FreeBSD$");
#include <sys/bio.h>
#include <sys/fcntl.h>
#include <sys/dirent.h>
+#include <sys/rwlock.h>
#include <sys/stat.h>
#include <sys/priv.h>
@@ -556,7 +557,7 @@ restart_locked:
continue;
if (BUF_LOCK(bp,
LK_EXCLUSIVE | LK_SLEEPFAIL | LK_INTERLOCK,
- BO_MTX(bo)) == ENOLCK)
+ BO_LOCKPTR(bo)) == ENOLCK)
goto restart;
bp->b_flags |= (B_INVAL | B_RELBUF);
bp->b_flags &= ~(B_ASYNC | B_MANAGED);
diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c
index 490382d..dad5969 100644
--- a/sys/fs/nfsclient/nfs_clvnops.c
+++ b/sys/fs/nfsclient/nfs_clvnops.c
@@ -2852,7 +2852,7 @@ loop:
error = BUF_TIMELOCK(bp,
LK_EXCLUSIVE | LK_SLEEPFAIL | LK_INTERLOCK,
- BO_MTX(bo), "nfsfsync", slpflag, slptimeo);
+ BO_LOCKPTR(bo), "nfsfsync", slpflag, slptimeo);
if (error == 0) {
BUF_UNLOCK(bp);
goto loop;
diff --git a/sys/fs/nfsserver/nfs_nfsdport.c b/sys/fs/nfsserver/nfs_nfsdport.c
index fe2735a..dfb1303 100644
--- a/sys/fs/nfsserver/nfs_nfsdport.c
+++ b/sys/fs/nfsserver/nfs_nfsdport.c
@@ -1321,7 +1321,7 @@ nfsvno_fsync(struct vnode *vp, u_int64_t off, int cnt, struct ucred *cred,
*/
if ((bp = gbincore(&vp->v_bufobj, lblkno)) != NULL) {
if (BUF_LOCK(bp, LK_EXCLUSIVE | LK_SLEEPFAIL |
- LK_INTERLOCK, BO_MTX(bo)) == ENOLCK) {
+ LK_INTERLOCK, BO_LOCKPTR(bo)) == ENOLCK) {
BO_LOCK(bo);
continue; /* retry */
}
OpenPOWER on IntegriCloud