diff options
author | dfr <dfr@FreeBSD.org> | 1997-04-18 14:12:17 +0000 |
---|---|---|
committer | dfr <dfr@FreeBSD.org> | 1997-04-18 14:12:17 +0000 |
commit | 16ac81a5c5a3fec0f0cb4ff7456a1833d5cb437d (patch) | |
tree | 2f12ed0ddcb4e09044c615474f2ba55c8e8d89dc /sys | |
parent | 150f99d8a9ca8fedd21b7b730a5ca940efa0a5ca (diff) | |
download | FreeBSD-src-16ac81a5c5a3fec0f0cb4ff7456a1833d5cb437d.zip FreeBSD-src-16ac81a5c5a3fec0f0cb4ff7456a1833d5cb437d.tar.gz |
Don't allow partial buffers to be cluster-comitted.
Zero the b_dirty{off,end} after cluster-comitting a group of buffers.
With these fixes, I was able to complete a 'make world' with remote src
and obj directories.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/vfs_cluster.c | 3 | ||||
-rw-r--r-- | sys/nfs/nfs_bio.c | 11 | ||||
-rw-r--r-- | sys/nfsclient/nfs_bio.c | 11 |
3 files changed, 16 insertions, 9 deletions
diff --git a/sys/kern/vfs_cluster.c b/sys/kern/vfs_cluster.c index 9c8b143..3a26e17 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.43 1997/03/07 14:40:54 dyson Exp $ + * $Id: vfs_cluster.c,v 1.44 1997/04/01 11:48:30 bde Exp $ */ #include <sys/param.h> @@ -468,6 +468,7 @@ cluster_callback(bp) tbp->b_flags |= B_ERROR; tbp->b_error = error; } + tbp->b_dirtyoff = tbp->b_dirtyend = 0; biodone(tbp); } relpbuf(bp); diff --git a/sys/nfs/nfs_bio.c b/sys/nfs/nfs_bio.c index b5912b5..a63fd78 100644 --- a/sys/nfs/nfs_bio.c +++ b/sys/nfs/nfs_bio.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_bio.c 8.9 (Berkeley) 3/30/95 - * $Id: nfs_bio.c,v 1.33 1997/03/09 10:21:26 bde Exp $ + * $Id: nfs_bio.c,v 1.34 1997/04/03 07:52:00 dfr Exp $ */ @@ -962,9 +962,12 @@ nfs_doio(bp, cr, p) iomode = NFSV3WRITE_FILESYNC; bp->b_flags |= B_WRITEINPROG; error = nfs_writerpc(vp, uiop, cr, &iomode, &must_commit); - if (!error && iomode == NFSV3WRITE_UNSTABLE) - bp->b_flags |= B_NEEDCOMMIT | B_CLUSTEROK; - else + if (!error && iomode == NFSV3WRITE_UNSTABLE) { + bp->b_flags |= B_NEEDCOMMIT; + if (bp->b_dirtyoff == 0 + && bp->b_dirtyend == bp->b_bufsize) + bp->b_flags |= B_CLUSTEROK; + } else bp->b_flags &= ~B_NEEDCOMMIT; bp->b_flags &= ~B_WRITEINPROG; diff --git a/sys/nfsclient/nfs_bio.c b/sys/nfsclient/nfs_bio.c index b5912b5..a63fd78 100644 --- a/sys/nfsclient/nfs_bio.c +++ b/sys/nfsclient/nfs_bio.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * @(#)nfs_bio.c 8.9 (Berkeley) 3/30/95 - * $Id: nfs_bio.c,v 1.33 1997/03/09 10:21:26 bde Exp $ + * $Id: nfs_bio.c,v 1.34 1997/04/03 07:52:00 dfr Exp $ */ @@ -962,9 +962,12 @@ nfs_doio(bp, cr, p) iomode = NFSV3WRITE_FILESYNC; bp->b_flags |= B_WRITEINPROG; error = nfs_writerpc(vp, uiop, cr, &iomode, &must_commit); - if (!error && iomode == NFSV3WRITE_UNSTABLE) - bp->b_flags |= B_NEEDCOMMIT | B_CLUSTEROK; - else + if (!error && iomode == NFSV3WRITE_UNSTABLE) { + bp->b_flags |= B_NEEDCOMMIT; + if (bp->b_dirtyoff == 0 + && bp->b_dirtyend == bp->b_bufsize) + bp->b_flags |= B_CLUSTEROK; + } else bp->b_flags &= ~B_NEEDCOMMIT; bp->b_flags &= ~B_WRITEINPROG; |