summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordyson <dyson@FreeBSD.org>1996-07-27 18:49:18 +0000
committerdyson <dyson@FreeBSD.org>1996-07-27 18:49:18 +0000
commit48e897bb4eab0ed69fa719d996cb7611391cfeec (patch)
treeb32d582d31d6f0a8234410c4964f604fbad8be95
parent3695a870502202d13641117fb57133ae5673a942 (diff)
downloadFreeBSD-src-48e897bb4eab0ed69fa719d996cb7611391cfeec.zip
FreeBSD-src-48e897bb4eab0ed69fa719d996cb7611391cfeec.tar.gz
Modification to vfs_cluster to allow clustering of NFS delayed writes.
Submitted by: Doug Rabson <dfr@render.com>
-rw-r--r--sys/kern/vfs_cluster.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/sys/kern/vfs_cluster.c b/sys/kern/vfs_cluster.c
index 721e6b3..eef904e 100644
--- a/sys/kern/vfs_cluster.c
+++ b/sys/kern/vfs_cluster.c
@@ -33,7 +33,7 @@
* SUCH DAMAGE.
*
* @(#)vfs_cluster.c 8.7 (Berkeley) 2/13/94
- * $Id: vfs_cluster.c,v 1.35 1996/03/02 04:40:56 dyson Exp $
+ * $Id: vfs_cluster.c,v 1.36 1996/06/03 04:40:35 dyson Exp $
*/
#include <sys/param.h>
@@ -616,11 +616,15 @@ cluster_wbuild(vp, size, start_lbn, len)
bp->b_bcount = 0;
bp->b_bufsize = 0;
bp->b_npages = 0;
+ if (tbp->b_wcred != NOCRED) {
+ bp->b_wcred = tbp->b_wcred;
+ crhold(bp->b_wcred);
+ }
bp->b_blkno = tbp->b_blkno;
bp->b_lblkno = tbp->b_lblkno;
(vm_offset_t) bp->b_data |= ((vm_offset_t) tbp->b_data) & PAGE_MASK;
- bp->b_flags |= B_CALL | B_BUSY | B_CLUSTER | (tbp->b_flags & B_VMIO);
+ bp->b_flags |= B_CALL | B_BUSY | B_CLUSTER | (tbp->b_flags & (B_VMIO|B_NEEDCOMMIT));
bp->b_iodone = cluster_callback;
pbgetvp(vp, bp);
@@ -632,7 +636,12 @@ cluster_wbuild(vp, size, start_lbn, len)
break;
}
- if ((tbp->b_flags & (B_VMIO|B_CLUSTEROK|B_INVAL|B_BUSY|B_DELWRI)) != (B_DELWRI|B_CLUSTEROK|(bp->b_flags & B_VMIO))) {
+ if ((tbp->b_flags & (B_VMIO|B_CLUSTEROK|B_INVAL|B_BUSY|B_DELWRI|B_NEEDCOMMIT)) != (B_DELWRI|B_CLUSTEROK|(bp->b_flags & (B_VMIO|B_NEEDCOMMIT)))) {
+ splx(s);
+ break;
+ }
+
+ if (tbp->b_wcred != bp->b_wcred) {
splx(s);
break;
}
@@ -676,6 +685,8 @@ cluster_wbuild(vp, size, start_lbn, len)
pmap_qenter(trunc_page((vm_offset_t) bp->b_data),
(vm_page_t *) bp->b_pages, bp->b_npages);
totalwritten += bp->b_bufsize;
+ bp->b_dirtyoff = 0;
+ bp->b_dirtyend = bp->b_bufsize;
bawrite(bp);
len -= i;
OpenPOWER on IntegriCloud