projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
use local access checks when NQNFS ACCESS check cannot be used to server
[unix-history]
/
usr
/
src
/
sys
/
nfs
/
nfs_bio.c
diff --git
a/usr/src/sys/nfs/nfs_bio.c
b/usr/src/sys/nfs/nfs_bio.c
index
f65c53d
..
a970fa1
100644
(file)
--- a/
usr/src/sys/nfs/nfs_bio.c
+++ b/
usr/src/sys/nfs/nfs_bio.c
@@
-7,7
+7,7
@@
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)nfs_bio.c 7.3
1
(Berkeley) %G%
+ * @(#)nfs_bio.c 7.3
5
(Berkeley) %G%
*/
#include <sys/param.h>
*/
#include <sys/param.h>
@@
-19,8
+19,9
@@
#include <sys/trace.h>
#include <sys/mount.h>
#include <sys/kernel.h>
#include <sys/trace.h>
#include <sys/mount.h>
#include <sys/kernel.h>
-#include <machine/endian.h>
+
#include <vm/vm.h>
#include <vm/vm.h>
+
#include <nfs/nfsnode.h>
#include <nfs/rpcv2.h>
#include <nfs/nfsv2.h>
#include <nfs/nfsnode.h>
#include <nfs/rpcv2.h>
#include <nfs/nfsv2.h>
@@
-85,10
+86,9
@@
nfs_bioread(vp, uio, ioflag, cred)
*/
if ((nmp->nm_flag & NFSMNT_NQNFS) == 0 && vp->v_type != VLNK) {
if (np->n_flag & NMODIFIED) {
*/
if ((nmp->nm_flag & NFSMNT_NQNFS) == 0 && vp->v_type != VLNK) {
if (np->n_flag & NMODIFIED) {
- np->n_flag &= ~NMODIFIED;
if ((nmp->nm_flag & NFSMNT_MYWRITE) == 0 ||
vp->v_type != VREG)
if ((nmp->nm_flag & NFSMNT_MYWRITE) == 0 ||
vp->v_type != VREG)
-
vinvalbuf(
vp, TRUE, cred, uio->uio_procp);
+
NFS_VINVBUF(np,
vp, TRUE, cred, uio->uio_procp);
np->n_attrstamp = 0;
np->n_direofoffset = 0;
if (error = VOP_GETATTR(vp, &vattr, cred, uio->uio_procp))
np->n_attrstamp = 0;
np->n_direofoffset = 0;
if (error = VOP_GETATTR(vp, &vattr, cred, uio->uio_procp))
@@
-99,7
+99,7
@@
nfs_bioread(vp, uio, ioflag, cred)
return (error);
if (np->n_mtime != vattr.va_mtime.ts_sec) {
np->n_direofoffset = 0;
return (error);
if (np->n_mtime != vattr.va_mtime.ts_sec) {
np->n_direofoffset = 0;
-
vinvalbuf(
vp, TRUE, cred, uio->uio_procp);
+
NFS_VINVBUF(np,
vp, TRUE, cred, uio->uio_procp);
np->n_mtime = vattr.va_mtime.ts_sec;
}
}
np->n_mtime = vattr.va_mtime.ts_sec;
}
}
@@
-122,8
+122,7
@@
nfs_bioread(vp, uio, ioflag, cred)
np->n_direofoffset = 0;
cache_purge(vp);
}
np->n_direofoffset = 0;
cache_purge(vp);
}
- np->n_flag &= ~NMODIFIED;
- vinvalbuf(vp, TRUE, cred, uio->uio_procp);
+ NFS_VINVBUF(np, vp, TRUE, cred, uio->uio_procp);
np->n_brev = np->n_lrev;
}
}
np->n_brev = np->n_lrev;
}
}
@@
-195,7
+194,8
@@
again:
case VDIR:
nfsstats.biocache_readdirs++;
on = 0;
case VDIR:
nfsstats.biocache_readdirs++;
on = 0;
- error = bread(vp, uio->uio_offset, NFS_DIRBLKSIZ, cred, &bp);
+ error = bread(vp, (daddr_t)uio->uio_offset, NFS_DIRBLKSIZ,
+ cred, &bp);
n = min(uio->uio_resid, NFS_DIRBLKSIZ - bp->b_resid);
break;
};
n = min(uio->uio_resid, NFS_DIRBLKSIZ - bp->b_resid);
break;
};
@@
-229,8
+229,7
@@
again:
cache_purge(vp);
}
brelse(bp);
cache_purge(vp);
}
brelse(bp);
- np->n_flag &= ~NMODIFIED;
- vinvalbuf(vp, TRUE, cred, uio->uio_procp);
+ NFS_VINVBUF(np, vp, TRUE, cred, uio->uio_procp);
np->n_brev = np->n_lrev;
continue;
}
np->n_brev = np->n_lrev;
continue;
}
@@
-238,8
+237,7
@@
again:
((np->n_flag & NMODIFIED) && vp->v_type == VDIR)) {
np->n_direofoffset = 0;
brelse(bp);
((np->n_flag & NMODIFIED) && vp->v_type == VDIR)) {
np->n_direofoffset = 0;
brelse(bp);
- np->n_flag &= ~NMODIFIED;
- vinvalbuf(vp, TRUE, cred, uio->uio_procp);
+ NFS_VINVBUF(np, vp, TRUE, cred, uio->uio_procp);
np->n_brev = np->n_lrev;
continue;
}
np->n_brev = np->n_lrev;
continue;
}
@@
-301,8
+299,8
@@
nfs_write(ap)
}
if (ioflag & (IO_APPEND | IO_SYNC)) {
if (np->n_flag & NMODIFIED) {
}
if (ioflag & (IO_APPEND | IO_SYNC)) {
if (np->n_flag & NMODIFIED) {
- np->n_
flag &= ~NMODIFIED
;
-
vinvalbuf(
vp, TRUE, cred, p);
+ np->n_
attrstamp = 0
;
+
NFS_VINVBUF(np,
vp, TRUE, cred, p);
}
if (ioflag & IO_APPEND) {
np->n_attrstamp = 0;
}
if (ioflag & IO_APPEND) {
np->n_attrstamp = 0;
@@
-347,12
+345,12
@@
nfs_write(ap)
return (error);
if (np->n_lrev != np->n_brev ||
(np->n_flag & NQNFSNONCACHE)) {
return (error);
if (np->n_lrev != np->n_brev ||
(np->n_flag & NQNFSNONCACHE)) {
-
vinvalbuf(
vp, TRUE, cred, p);
+
NFS_VINVBUF(np,
vp, TRUE, cred, p);
np->n_brev = np->n_lrev;
}
}
if (np->n_flag & NQNFSNONCACHE)
np->n_brev = np->n_lrev;
}
}
if (np->n_flag & NQNFSNONCACHE)
- return (nfs_writerpc(vp, uio, cred));
+ return (nfs_writerpc(vp, uio, cred
, 0
));
nfsstats.biocache_writes++;
lbn = uio->uio_offset / biosize;
on = uio->uio_offset & (biosize-1);
nfsstats.biocache_writes++;
lbn = uio->uio_offset / biosize;
on = uio->uio_offset & (biosize-1);
@@
-397,8
+395,10
@@
again:
}
if (np->n_lrev != np->n_brev ||
(np->n_flag & NQNFSNONCACHE)) {
}
if (np->n_lrev != np->n_brev ||
(np->n_flag & NQNFSNONCACHE)) {
- vinvalbuf(vp, TRUE, cred, p);
+ brelse(bp);
+ NFS_VINVBUF(np, vp, TRUE, cred, p);
np->n_brev = np->n_lrev;
np->n_brev = np->n_lrev;
+ goto again;
}
}
if (error = uiomove(bp->b_un.b_addr + on, n, uio)) {
}
}
if (error = uiomove(bp->b_un.b_addr + on, n, uio)) {