summaryrefslogtreecommitdiff
path: root/sys/nfs
diff options
context:
space:
mode:
Diffstat (limited to 'sys/nfs')
-rw-r--r--sys/nfs/nfs_bio.c8
-rw-r--r--sys/nfs/nfs_serv.c16
-rw-r--r--sys/nfs/nfs_socket.c2
-rw-r--r--sys/nfs/nfs_subs.c60
-rw-r--r--sys/nfs/nfs_vnops.c16
5 files changed, 66 insertions, 36 deletions
diff --git a/sys/nfs/nfs_bio.c b/sys/nfs/nfs_bio.c
index 3a422dc184d4..e10649d08b3d 100644
--- a/sys/nfs/nfs_bio.c
+++ b/sys/nfs/nfs_bio.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* From: @(#)nfs_bio.c 7.19 (Berkeley) 4/16/91
- * $Id: nfs_bio.c,v 1.5 1994/02/06 22:20:09 davidg Exp $
+ * $Id: nfs_bio.c,v 1.6 1994/06/12 04:05:39 davidg Exp $
*/
#include "param.h"
@@ -175,8 +175,6 @@ nfs_bioread(vp, uio, ioflag, cred)
error = uiomove(bp->b_un.b_addr + on, (int)n, uio);
switch (vp->v_type) {
case VREG:
- if (n+on == biosize || uio->uio_offset == np->n_size)
- bp->b_flags |= B_AGE;
break;
case VLNK:
n = 0;
@@ -298,12 +296,10 @@ again:
brelse(bp);
return (error);
}
+ bp->b_proc = (struct proc *)0;
if ((n+on) == biosize) {
- bp->b_flags |= B_AGE;
- bp->b_proc = (struct proc *)0;
bawrite(bp);
} else {
- bp->b_proc = (struct proc *)0;
bdwrite(bp);
}
} while (error == 0 && uio->uio_resid > 0 && n != 0);
diff --git a/sys/nfs/nfs_serv.c b/sys/nfs/nfs_serv.c
index 6205a268448e..20f7015c1f26 100644
--- a/sys/nfs/nfs_serv.c
+++ b/sys/nfs/nfs_serv.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* From: @(#)nfs_serv.c 7.40 (Berkeley) 5/15/91
- * $Id: nfs_serv.c,v 1.5 1993/12/19 00:54:12 wollman Exp $
+ * $Id: nfs_serv.c,v 1.6 1994/06/11 23:33:53 karl Exp $
*/
/*
@@ -667,10 +667,16 @@ nfsrv_create(mrep, md, dpos, cred, xid, mrq, repstat, p)
vput(nd.ni_dvp);
VOP_ABORTOP(&nd);
vap->va_size = fxdr_unsigned(long, *(tl+3)); /* 28 Aug 92*/
-/* 08 Sep 92*/ if (vap->va_size != -1 && (error = VOP_SETATTR(vp, vap, cred, p))) {
- vput(vp);
- nfsm_reply(0);
- }
+ if (vap->va_size != -1) {
+ if (error = nfsrv_access(vp, VWRITE, cred, p)) {
+ vput(vp);
+ nfsm_reply(0);
+ }
+ if (error = VOP_SETATTR(vp, vap, cred, p)) {
+ vput(vp);
+ nfsm_reply(0);
+ }
+ }
}
bzero((caddr_t)fhp, sizeof(nfh));
fhp->fh_fsid = vp->v_mount->mnt_stat.f_fsid;
diff --git a/sys/nfs/nfs_socket.c b/sys/nfs/nfs_socket.c
index 41b386d70dfc..f3c3c880785b 100644
--- a/sys/nfs/nfs_socket.c
+++ b/sys/nfs/nfs_socket.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* From: @(#)nfs_socket.c 7.23 (Berkeley) 4/20/91
- * $Id: nfs_socket.c,v 1.4.2.1 1994/05/03 21:04:53 rgrimes Exp $
+ * $Id: nfs_socket.c,v 1.5 1994/05/03 17:49:16 davidg Exp $
*/
/*
diff --git a/sys/nfs/nfs_subs.c b/sys/nfs/nfs_subs.c
index 14e011882160..d512bde223bf 100644
--- a/sys/nfs/nfs_subs.c
+++ b/sys/nfs/nfs_subs.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* From: @(#)nfs_subs.c 7.41 (Berkeley) 5/15/91
- * $Id: nfs_subs.c,v 1.5 1993/12/19 00:54:15 wollman Exp $
+ * $Id: nfs_subs.c,v 1.6 1994/04/14 07:50:11 davidg Exp $
*/
/*
@@ -262,6 +262,12 @@ nfsm_mbuftouio(mrep, uiop, siz, dpos)
return (error);
}
+void nfsm_nullfree()
+{
+ /* Nothing to do here */
+}
+
+
/*
* copies a uio scatter/gather list to an mbuf chain...
*/
@@ -278,7 +284,7 @@ nfsm_uiotombuf(uiop, mq, siz, bpos)
int uiosiz, clflg, rem;
char *cp;
- if (siz > MLEN) /* or should it >= MCLBYTES ?? */
+ if (siz > MLEN && uiop->uio_segflg != UIO_SYSSPACE)
clflg = 1;
else
clflg = 0;
@@ -292,31 +298,43 @@ nfsm_uiotombuf(uiop, mq, siz, bpos)
if (left > siz)
left = siz;
uiosiz = left;
- while (left > 0) {
+ if (uiop->uio_segflg == UIO_SYSSPACE) {
MGET(mp, M_WAIT, MT_DATA);
- if (clflg)
- MCLGET(mp, M_WAIT);
- mp->m_len = NFSMSIZ(mp);
+ mp->m_flags |= M_EXT;
+ mp->m_data = mp->m_ext.ext_buf = uiocp;
+ mp->m_len = mp->m_ext.ext_size = uiosiz;
+ mp->m_ext.ext_free = nfsm_nullfree;
mp2->m_next = mp;
mp2 = mp;
- xfer = (left > mp->m_len) ? mp->m_len : left;
+ uiop->uio_offset += uiosiz;
+ uiop->uio_resid -= uiosiz;
+ } else {
+ while (left > 0) {
+ MGET(mp, M_WAIT, MT_DATA);
+ if (clflg)
+ MCLGET(mp, M_WAIT);
+ mp->m_len = NFSMSIZ(mp);
+ mp2->m_next = mp;
+ mp2 = mp;
+ xfer = (left > mp->m_len) ? mp->m_len : left;
#ifdef notdef
- /* Not Yet.. */
- if (uiop->uio_iov->iov_op != NULL)
- (*(uiop->uio_iov->iov_op))
- (uiocp, mtod(mp, caddr_t), xfer);
- else
+ /* Not Yet.. */
+ if (uiop->uio_iov->iov_op != NULL)
+ (*(uiop->uio_iov->iov_op))
+ (uiocp, mtod(mp, caddr_t), xfer);
+ else
+ if (uiop->uio_segflg == UIO_SYSSPACE)
+ bcopy(uiocp, mtod(mp, caddr_t), xfer);
+ else
#endif
- if (uiop->uio_segflg == UIO_SYSSPACE)
- bcopy(uiocp, mtod(mp, caddr_t), xfer);
- else
copyin(uiocp, mtod(mp, caddr_t), xfer);
- len = mp->m_len;
- mp->m_len = xfer;
- left -= xfer;
- uiocp += xfer;
- uiop->uio_offset += xfer;
- uiop->uio_resid -= xfer;
+ len = mp->m_len;
+ mp->m_len = xfer;
+ left -= xfer;
+ uiocp += xfer;
+ uiop->uio_offset += xfer;
+ uiop->uio_resid -= xfer;
+ }
}
if (uiop->uio_iov->iov_len <= siz) {
uiop->uio_iovcnt--;
diff --git a/sys/nfs/nfs_vnops.c b/sys/nfs/nfs_vnops.c
index b5548e751576..0066b77b13b6 100644
--- a/sys/nfs/nfs_vnops.c
+++ b/sys/nfs/nfs_vnops.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* From: @(#)nfs_vnops.c 7.60 (Berkeley) 5/24/91
- * $Id: nfs_vnops.c,v 1.7 1994/01/31 23:40:50 martin Exp $
+ * $Id: nfs_vnops.c,v 1.8 1994/06/14 03:41:10 davidg Exp $
*/
/*
@@ -278,9 +278,19 @@ nfs_open(vp, mode, cred, p)
register enum vtype vtyp;
vtyp = vp->v_type;
- if (vtyp == VREG || vtyp == VDIR || vtyp == VLNK)
+ if (vtyp == VREG || vtyp == VDIR || vtyp == VLNK) {
+ struct nfsnode *np;
+ struct vattr vattr;
+ np = VTONFS(vp);
+ if (nfs_dogetattr(vp, &vattr, cred, 1, p) == 0) {
+ if (np->n_mtime != vattr.va_mtime.tv_sec) {
+ np->n_direofoffset = 0;
+ vinvalbuf(vp, TRUE);
+ np->n_mtime = vattr.va_mtime.tv_sec;
+ }
+ }
return (0);
- else
+ } else
return (EACCES);
}