summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordfr <dfr@FreeBSD.org>1997-04-19 14:28:36 +0000
committerdfr <dfr@FreeBSD.org>1997-04-19 14:28:36 +0000
commit7de64ed7774e2cfa9a3fd94e39045651b2118f0e (patch)
treeb05a36ab911df6ff5b231b2665c2d6576098ad52
parentf2fed2ec029e905e21f6c7b137455d697d6bae7e (diff)
downloadFreeBSD-src-7de64ed7774e2cfa9a3fd94e39045651b2118f0e.zip
FreeBSD-src-7de64ed7774e2cfa9a3fd94e39045651b2118f0e.tar.gz
Fix a bug where a program which appended many small records to a file could
wind up writing zeros instead of real data when the file is on an NFSv2 mounted directory. While tracking this bug down, I noticed that nfs_asyncio was waking *all* the iods when a block was written instead of just one per block. Fixing this gives a 25% performance improvment for writes on v2 (less for v3). Both are 2.2 candidates. PR: kern/2774
-rw-r--r--sys/nfs/nfs_bio.c4
-rw-r--r--sys/nfsclient/nfs_bio.c4
2 files changed, 6 insertions, 2 deletions
diff --git a/sys/nfs/nfs_bio.c b/sys/nfs/nfs_bio.c
index a63fd78..5ecf4e1 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.34 1997/04/03 07:52:00 dfr Exp $
+ * $Id: nfs_bio.c,v 1.35 1997/04/18 14:11:59 dfr Exp $
*/
@@ -502,6 +502,7 @@ nfs_write(ap)
again:
if (uio->uio_offset + n > np->n_size) {
np->n_size = uio->uio_offset + n;
+ np->n_flag |= NMODIFIED;
vnode_pager_setsize(vp, (u_long)np->n_size);
}
bufsize = biosize;
@@ -747,6 +748,7 @@ again:
nmp->nm_bufqiods++;
wakeup((caddr_t)&nfs_iodwant[i]);
gotiod = TRUE;
+ break;
}
/*
diff --git a/sys/nfsclient/nfs_bio.c b/sys/nfsclient/nfs_bio.c
index a63fd78..5ecf4e1 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.34 1997/04/03 07:52:00 dfr Exp $
+ * $Id: nfs_bio.c,v 1.35 1997/04/18 14:11:59 dfr Exp $
*/
@@ -502,6 +502,7 @@ nfs_write(ap)
again:
if (uio->uio_offset + n > np->n_size) {
np->n_size = uio->uio_offset + n;
+ np->n_flag |= NMODIFIED;
vnode_pager_setsize(vp, (u_long)np->n_size);
}
bufsize = biosize;
@@ -747,6 +748,7 @@ again:
nmp->nm_bufqiods++;
wakeup((caddr_t)&nfs_iodwant[i]);
gotiod = TRUE;
+ break;
}
/*
OpenPOWER on IntegriCloud