From 7de64ed7774e2cfa9a3fd94e39045651b2118f0e Mon Sep 17 00:00:00 2001 From: dfr Date: Sat, 19 Apr 1997 14:28:36 +0000 Subject: 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 --- sys/nfs/nfs_bio.c | 4 +++- sys/nfsclient/nfs_bio.c | 4 +++- 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; } /* -- cgit v1.1