summary |
tags |
clone url |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
cd4ee8a)
use prototypes for NFS vnode ops (from specdev.h, fifo.h, and nfsmount.h);
add appropriate proc pointers (eliminating lots of curproc's)
SCCS-vsn: sys/nfs/nfs_vnops.c 7.57
*
* %sccs.include.redist.c%
*
*
* %sccs.include.redist.c%
*
- * @(#)nfs_vnops.c 7.56 (Berkeley) %G%
+ * @(#)nfs_vnops.c 7.57 (Berkeley) %G%
#include "buf.h"
#include "malloc.h"
#include "mbuf.h"
#include "buf.h"
#include "malloc.h"
#include "mbuf.h"
+#include "specdev.h"
+#include "fifo.h"
#include "map.h"
#include "../ufs/quota.h"
#include "map.h"
#include "../ufs/quota.h"
#define TRUE 1
#define FALSE 0
#define TRUE 1
#define FALSE 0
-/* Global vars */
-int nfs_lookup(),
- nfs_create(),
- nfs_mknod(),
- nfs_open(),
- nfs_close(),
- nfs_access(),
- nfs_getattr(),
- nfs_setattr(),
- nfs_read(),
- nfs_write(),
- nfs_remove(),
- nfs_link(),
- nfs_rename(),
- nfs_mkdir(),
- nfs_rmdir(),
- nfs_symlink(),
- nfs_readdir(),
- nfs_readlink(),
- nfs_abortop(),
- nfs_lock(),
- nfs_unlock(),
- nfs_bmap(),
- nfs_strategy(),
- nfs_fsync(),
- nfs_inactive(),
- nfs_reclaim(),
- nfs_print(),
- nfs_islocked(),
- nfs_advlock(),
- eopnotsupp(),
- seltrue();
-
+/*
+ * Global vfs data structures for nfs
+ */
struct vnodeops nfsv2_vnodeops = {
nfs_lookup, /* lookup */
nfs_create, /* create */
struct vnodeops nfsv2_vnodeops = {
nfs_lookup, /* lookup */
nfs_create, /* create */
nfs_setattr, /* setattr */
nfs_read, /* read */
nfs_write, /* write */
nfs_setattr, /* setattr */
nfs_read, /* read */
nfs_write, /* write */
- eopnotsupp, /* ioctl */
- seltrue, /* select */
- eopnotsupp, /* mmap */
+ nfs_ioctl, /* ioctl */
+ nfs_select, /* select */
+ nfs_mmap, /* mmap */
nfs_remove, /* remove */
nfs_link, /* link */
nfs_rename, /* rename */
nfs_remove, /* remove */
nfs_link, /* link */
nfs_rename, /* rename */
nfs_advlock, /* advlock */
};
nfs_advlock, /* advlock */
};
-/* Special device vnode ops */
-int spec_lookup(),
- spec_open(),
- spec_read(),
- spec_write(),
- spec_strategy(),
- spec_bmap(),
- spec_ioctl(),
- spec_select(),
- spec_close(),
- spec_badop(),
- spec_advlock();
-
+/*
+ * Special device vnode ops
+ */
struct vnodeops spec_nfsv2nodeops = {
spec_lookup, /* lookup */
struct vnodeops spec_nfsv2nodeops = {
spec_lookup, /* lookup */
- spec_badop, /* create */
- spec_badop, /* mknod */
+ spec_create, /* create */
+ spec_mknod, /* mknod */
spec_open, /* open */
spec_close, /* close */
nfs_access, /* access */
spec_open, /* open */
spec_close, /* close */
nfs_access, /* access */
spec_write, /* write */
spec_ioctl, /* ioctl */
spec_select, /* select */
spec_write, /* write */
spec_ioctl, /* ioctl */
spec_select, /* select */
- spec_badop, /* mmap */
- nullop, /* fsync */
- spec_badop, /* seek */
- spec_badop, /* remove */
- spec_badop, /* link */
- spec_badop, /* rename */
- spec_badop, /* mkdir */
- spec_badop, /* rmdir */
- spec_badop, /* symlink */
- spec_badop, /* readdir */
- spec_badop, /* readlink */
- spec_badop, /* abortop */
+ spec_mmap, /* mmap */
+ spec_fsync, /* fsync */
+ spec_seek, /* seek */
+ spec_remove, /* remove */
+ spec_link, /* link */
+ spec_rename, /* rename */
+ spec_mkdir, /* mkdir */
+ spec_rmdir, /* rmdir */
+ spec_symlink, /* symlink */
+ spec_readdir, /* readdir */
+ spec_readlink, /* readlink */
+ spec_abortop, /* abortop */
nfs_inactive, /* inactive */
nfs_reclaim, /* reclaim */
nfs_lock, /* lock */
nfs_inactive, /* inactive */
nfs_reclaim, /* reclaim */
nfs_lock, /* lock */
-int fifo_lookup(),
- fifo_open(),
- fifo_read(),
- fifo_write(),
- fifo_bmap(),
- fifo_ioctl(),
- fifo_select(),
- fifo_close(),
- fifo_print(),
- fifo_badop(),
- fifo_advlock();
-
struct vnodeops fifo_nfsv2nodeops = {
fifo_lookup, /* lookup */
struct vnodeops fifo_nfsv2nodeops = {
fifo_lookup, /* lookup */
- fifo_badop, /* create */
- fifo_badop, /* mknod */
+ fifo_create, /* create */
+ fifo_mknod, /* mknod */
fifo_open, /* open */
fifo_close, /* close */
nfs_access, /* access */
fifo_open, /* open */
fifo_close, /* close */
nfs_access, /* access */
fifo_write, /* write */
fifo_ioctl, /* ioctl */
fifo_select, /* select */
fifo_write, /* write */
fifo_ioctl, /* ioctl */
fifo_select, /* select */
- fifo_badop, /* mmap */
- nullop, /* fsync */
- fifo_badop, /* seek */
- fifo_badop, /* remove */
- fifo_badop, /* link */
- fifo_badop, /* rename */
- fifo_badop, /* mkdir */
- fifo_badop, /* rmdir */
- fifo_badop, /* symlink */
- fifo_badop, /* readdir */
- fifo_badop, /* readlink */
- fifo_badop, /* abortop */
+ fifo_mmap, /* mmap */
+ fifo_fsync, /* fsync */
+ fifo_seek, /* seek */
+ fifo_remove, /* remove */
+ fifo_link, /* link */
+ fifo_rename, /* rename */
+ fifo_mkdir, /* mkdir */
+ fifo_rmdir, /* rmdir */
+ fifo_symlink, /* symlink */
+ fifo_readdir, /* readdir */
+ fifo_readlink, /* readlink */
+ fifo_abortop, /* abortop */
nfs_inactive, /* inactive */
nfs_reclaim, /* reclaim */
nfs_lock, /* lock */
nfs_inactive, /* inactive */
nfs_reclaim, /* reclaim */
nfs_lock, /* lock */
extern u_long nfs_procids[NFS_NPROCS];
extern u_long nfs_prog, nfs_vers;
extern char nfsiobuf[MAXPHYS+NBPG];
extern u_long nfs_procids[NFS_NPROCS];
extern u_long nfs_prog, nfs_vers;
extern char nfsiobuf[MAXPHYS+NBPG];
/*
* nfs null call from vfs.
*/
/*
* nfs null call from vfs.
*/
struct vnode *vp;
struct ucred *cred;
struct vnode *vp;
struct ucred *cred;
{
caddr_t bpos, dpos;
u_long xid;
{
caddr_t bpos, dpos;
u_long xid;
struct mbuf *mreq, *mrep, *md, *mb;
nfsm_reqhead(nfs_procids[NFSPROC_NULL], cred, 0);
struct mbuf *mreq, *mrep, *md, *mb;
nfsm_reqhead(nfs_procids[NFSPROC_NULL], cred, 0);
- nfsm_request(vp, NFSPROC_NULL, curproc, 0);
+ nfsm_request(vp, NFSPROC_NULL, p, 0);
nfsm_reqdone;
return (error);
}
nfsm_reqdone;
return (error);
}
* nfs access vnode op.
* Essentially just get vattr and then imitate iaccess()
*/
* nfs access vnode op.
* Essentially just get vattr and then imitate iaccess()
*/
-nfs_access(vp, mode, cred)
+nfs_access(vp, mode, cred, p)
struct vnode *vp;
int mode;
register struct ucred *cred;
struct vnode *vp;
int mode;
register struct ucred *cred;
{
register struct vattr *vap;
register gid_t *gp;
{
register struct vattr *vap;
register gid_t *gp;
if (cred->cr_uid == 0)
return (0);
vap = &vattr;
if (cred->cr_uid == 0)
return (0);
vap = &vattr;
- if (error = nfs_dogetattr(vp, vap, cred, 0))
+ if (error = nfs_dogetattr(vp, vap, cred, 0, p))
return (error);
/*
* Access check is based on only one of owner, group, public.
return (error);
/*
* Access check is based on only one of owner, group, public.
* Just check to see if the type is ok
*/
/* ARGSUSED */
* Just check to see if the type is ok
*/
/* ARGSUSED */
-nfs_open(vp, mode, cred)
+nfs_open(vp, mode, cred, p)
struct vnode *vp;
int mode;
struct ucred *cred;
struct vnode *vp;
int mode;
struct ucred *cred;
{
register enum vtype vtyp;
{
register enum vtype vtyp;
* For reg files, invalidate any buffer cache entries.
*/
/* ARGSUSED */
* For reg files, invalidate any buffer cache entries.
*/
/* ARGSUSED */
-nfs_close(vp, fflags, cred)
+nfs_close(vp, fflags, cred, p)
register struct vnode *vp;
int fflags;
struct ucred *cred;
register struct vnode *vp;
int fflags;
struct ucred *cred;
{
register struct nfsnode *np = VTONFS(vp);
int error = 0;
{
register struct nfsnode *np = VTONFS(vp);
int error = 0;
/*
* nfs getattr call from vfs.
*/
/*
* nfs getattr call from vfs.
*/
-nfs_getattr(vp, vap, cred)
+nfs_getattr(vp, vap, cred, p)
register struct vnode *vp;
struct vattr *vap;
struct ucred *cred;
register struct vnode *vp;
struct vattr *vap;
struct ucred *cred;
- return (nfs_dogetattr(vp, vap, cred, 0));
+ return (nfs_dogetattr(vp, vap, cred, 0, p));
-nfs_dogetattr(vp, vap, cred, tryhard)
+nfs_dogetattr(vp, vap, cred, tryhard, p)
register struct vnode *vp;
struct vattr *vap;
struct ucred *cred;
int tryhard;
register struct vnode *vp;
struct vattr *vap;
struct ucred *cred;
int tryhard;
{
register caddr_t cp;
register long t1;
{
register caddr_t cp;
register long t1;
nfsstats.rpccnt[NFSPROC_GETATTR]++;
nfsm_reqhead(nfs_procids[NFSPROC_GETATTR], cred, NFSX_FH);
nfsm_fhtom(vp);
nfsstats.rpccnt[NFSPROC_GETATTR]++;
nfsm_reqhead(nfs_procids[NFSPROC_GETATTR], cred, NFSX_FH);
nfsm_fhtom(vp);
- nfsm_request(vp, NFSPROC_GETATTR, curproc, tryhard);
+ nfsm_request(vp, NFSPROC_GETATTR, p, tryhard);
nfsm_loadattr(vp, vap);
nfsm_reqdone;
return (error);
nfsm_loadattr(vp, vap);
nfsm_reqdone;
return (error);
/*
* nfs setattr call.
*/
/*
* nfs setattr call.
*/
-nfs_setattr(vp, vap, cred)
+nfs_setattr(vp, vap, cred, p)
register struct vnode *vp;
register struct vattr *vap;
struct ucred *cred;
register struct vnode *vp;
register struct vattr *vap;
struct ucred *cred;
{
register struct nfsv2_sattr *sp;
register caddr_t cp;
{
register struct nfsv2_sattr *sp;
register caddr_t cp;
- nfsm_request(vp, NFSPROC_SETATTR, curproc, 1);
+ nfsm_request(vp, NFSPROC_SETATTR, p, 1);
nfsm_loadattr(vp, (struct vattr *)0);
/* should we fill in any vap fields ?? */
nfsm_reqdone;
nfsm_loadattr(vp, (struct vattr *)0);
/* should we fill in any vap fields ?? */
nfsm_reqdone;
* First look in cache
* If not found, unlock the directory nfsnode and do the rpc
*/
* First look in cache
* If not found, unlock the directory nfsnode and do the rpc
*/
register struct vnode *vp;
register struct nameidata *ndp;
register struct vnode *vp;
register struct nameidata *ndp;
{
register struct vnode *vdp;
{
register struct vnode *vdp;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos, cp2;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos, cp2;
}
if (!error) {
if (vpid == vdp->v_id) {
}
if (!error) {
if (vpid == vdp->v_id) {
- if (!nfs_dogetattr(vdp, &vattr, ndp->ni_cred, 0) &&
+ if (!nfs_dogetattr(vdp, &vattr, ndp->ni_cred, 0, p)&&
vattr.va_ctime.tv_sec == VTONFS(vdp)->n_ctime) {
nfsstats.lookupcache_hits++;
return (0);
vattr.va_ctime.tv_sec == VTONFS(vdp)->n_ctime) {
nfsstats.lookupcache_hits++;
return (0);
nfsm_reqhead(nfs_procids[NFSPROC_LOOKUP], ndp->ni_cred, NFSX_FH+NFSX_UNSIGNED+nfsm_rndup(len));
nfsm_fhtom(vp);
nfsm_strtom(ndp->ni_ptr, len, NFS_MAXNAMLEN);
nfsm_reqhead(nfs_procids[NFSPROC_LOOKUP], ndp->ni_cred, NFSX_FH+NFSX_UNSIGNED+nfsm_rndup(len));
nfsm_fhtom(vp);
nfsm_strtom(ndp->ni_ptr, len, NFS_MAXNAMLEN);
- nfsm_request(vp, NFSPROC_LOOKUP, curproc, 0);
+ nfsm_request(vp, NFSPROC_LOOKUP, p, 0);
nfsmout:
if (error) {
if (lockparent || (flag != CREATE && flag != RENAME) ||
nfsmout:
if (error) {
if (lockparent || (flag != CREATE && flag != RENAME) ||
* Do a readlink rpc.
* Called by nfs_doio() from below the buffer cache.
*/
* Do a readlink rpc.
* Called by nfs_doio() from below the buffer cache.
*/
-nfs_readlinkrpc(vp, uiop, cred, procp)
+nfs_readlinkrpc(vp, uiop, cred)
register struct vnode *vp;
struct uio *uiop;
struct ucred *cred;
register struct vnode *vp;
struct uio *uiop;
struct ucred *cred;
register caddr_t cp;
register long t1;
caddr_t bpos, dpos, cp2;
register caddr_t cp;
register long t1;
caddr_t bpos, dpos, cp2;
nfsstats.rpccnt[NFSPROC_READLINK]++;
nfsm_reqhead(nfs_procids[NFSPROC_READLINK], cred, NFSX_FH);
nfsm_fhtom(vp);
nfsstats.rpccnt[NFSPROC_READLINK]++;
nfsm_reqhead(nfs_procids[NFSPROC_READLINK], cred, NFSX_FH);
nfsm_fhtom(vp);
- nfsm_request(vp, NFSPROC_READLINK, procp, 0);
+ nfsm_request(vp, NFSPROC_READLINK, uiop->uio_procp, 0);
nfsm_strsiz(len, NFS_MAXPATHLEN);
nfsm_mtouio(uiop, len);
nfsm_reqdone;
nfsm_strsiz(len, NFS_MAXPATHLEN);
nfsm_mtouio(uiop, len);
nfsm_reqdone;
* nfs read rpc call
* Ditto above
*/
* nfs read rpc call
* Ditto above
*/
-nfs_readrpc(vp, uiop, cred, procp)
+nfs_readrpc(vp, uiop, cred)
register struct vnode *vp;
struct uio *uiop;
struct ucred *cred;
register struct vnode *vp;
struct uio *uiop;
struct ucred *cred;
register caddr_t cp;
register long t1;
caddr_t bpos, dpos, cp2;
register caddr_t cp;
register long t1;
caddr_t bpos, dpos, cp2;
len = (tsiz > nmp->nm_rsize) ? nmp->nm_rsize : tsiz;
nfsm_reqhead(nfs_procids[NFSPROC_READ], cred, NFSX_FH+NFSX_UNSIGNED*3);
nfsm_fhtom(vp);
len = (tsiz > nmp->nm_rsize) ? nmp->nm_rsize : tsiz;
nfsm_reqhead(nfs_procids[NFSPROC_READ], cred, NFSX_FH+NFSX_UNSIGNED*3);
nfsm_fhtom(vp);
- nfsm_build(p, u_long *, NFSX_UNSIGNED*3);
- *p++ = txdr_unsigned(uiop->uio_offset);
- *p++ = txdr_unsigned(len);
- *p = 0;
- nfsm_request(vp, NFSPROC_READ, procp, 1);
+ nfsm_build(tl, u_long *, NFSX_UNSIGNED*3);
+ *tl++ = txdr_unsigned(uiop->uio_offset);
+ *tl++ = txdr_unsigned(len);
+ *tl = 0;
+ nfsm_request(vp, NFSPROC_READ, uiop->uio_procp, 1);
nfsm_loadattr(vp, (struct vattr *)0);
nfsm_strsiz(retlen, nmp->nm_rsize);
nfsm_mtouio(uiop, retlen);
nfsm_loadattr(vp, (struct vattr *)0);
nfsm_strsiz(retlen, nmp->nm_rsize);
nfsm_mtouio(uiop, retlen);
-nfs_writerpc(vp, uiop, cred, procp)
+nfs_writerpc(vp, uiop, cred)
register struct vnode *vp;
struct uio *uiop;
struct ucred *cred;
register struct vnode *vp;
struct uio *uiop;
struct ucred *cred;
register caddr_t cp;
register long t1;
caddr_t bpos, dpos;
register caddr_t cp;
register long t1;
caddr_t bpos, dpos;
nfsm_reqhead(nfs_procids[NFSPROC_WRITE], cred,
NFSX_FH+NFSX_UNSIGNED*4);
nfsm_fhtom(vp);
nfsm_reqhead(nfs_procids[NFSPROC_WRITE], cred,
NFSX_FH+NFSX_UNSIGNED*4);
nfsm_fhtom(vp);
- nfsm_build(p, u_long *, NFSX_UNSIGNED*4);
- *(p+1) = txdr_unsigned(uiop->uio_offset);
- *(p+3) = txdr_unsigned(len);
+ nfsm_build(tl, u_long *, NFSX_UNSIGNED*4);
+ *(tl+1) = txdr_unsigned(uiop->uio_offset);
+ *(tl+3) = txdr_unsigned(len);
- nfsm_request(vp, NFSPROC_WRITE, procp, 1);
+ nfsm_request(vp, NFSPROC_WRITE, uiop->uio_procp, 1);
nfsm_loadattr(vp, (struct vattr *)0);
m_freem(mrep);
tsiz -= len;
nfsm_loadattr(vp, (struct vattr *)0);
m_freem(mrep);
tsiz -= len;
* set to specify the file type and the size field for rdev.
*/
/* ARGSUSED */
* set to specify the file type and the size field for rdev.
*/
/* ARGSUSED */
-nfs_mknod(ndp, vap, cred)
+nfs_mknod(ndp, vap, cred, p)
struct nameidata *ndp;
struct ucred *cred;
register struct vattr *vap;
struct nameidata *ndp;
struct ucred *cred;
register struct vattr *vap;
{
register struct nfsv2_sattr *sp;
{
register struct nfsv2_sattr *sp;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
/* or should these be VNOVAL ?? */
txdr_time(&vap->va_atime, &sp->sa_atime);
txdr_time(&vap->va_mtime, &sp->sa_mtime);
/* or should these be VNOVAL ?? */
txdr_time(&vap->va_atime, &sp->sa_atime);
txdr_time(&vap->va_mtime, &sp->sa_mtime);
- nfsm_request(ndp->ni_dvp, NFSPROC_CREATE, curproc, 1);
+ nfsm_request(ndp->ni_dvp, NFSPROC_CREATE, p, 1);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
nfs_nput(ndp->ni_dvp);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
nfs_nput(ndp->ni_dvp);
/*
* nfs file create call
*/
/*
* nfs file create call
*/
register struct nameidata *ndp;
register struct vattr *vap;
register struct nameidata *ndp;
register struct vattr *vap;
{
register struct nfsv2_sattr *sp;
{
register struct nfsv2_sattr *sp;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos, cp2;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos, cp2;
/* or should these be VNOVAL ?? */
txdr_time(&vap->va_atime, &sp->sa_atime);
txdr_time(&vap->va_mtime, &sp->sa_mtime);
/* or should these be VNOVAL ?? */
txdr_time(&vap->va_atime, &sp->sa_atime);
txdr_time(&vap->va_mtime, &sp->sa_mtime);
- nfsm_request(ndp->ni_dvp, NFSPROC_CREATE, curproc, 1);
+ nfsm_request(ndp->ni_dvp, NFSPROC_CREATE, p, 1);
nfsm_mtofh(ndp->ni_dvp, ndp->ni_vp);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
nfsm_mtofh(ndp->ni_dvp, ndp->ni_vp);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
* else
* do the remove rpc
*/
* else
* do the remove rpc
*/
register struct nameidata *ndp;
register struct nameidata *ndp;
{
register struct vnode *vp = ndp->ni_vp;
register struct nfsnode *np = VTONFS(ndp->ni_vp);
{
register struct vnode *vp = ndp->ni_vp;
register struct nfsnode *np = VTONFS(ndp->ni_vp);
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
if (vp->v_usecount > 1) {
if (!np->n_sillyrename)
if (vp->v_usecount > 1) {
if (!np->n_sillyrename)
- error = nfs_sillyrename(ndp, REMOVE);
+ error = nfs_sillyrename(ndp, REMOVE, p);
} else {
nfsstats.rpccnt[NFSPROC_REMOVE]++;
nfsm_reqhead(nfs_procids[NFSPROC_REMOVE], ndp->ni_cred,
NFSX_FH+NFSX_UNSIGNED+nfsm_rndup(ndp->ni_dent.d_namlen));
nfsm_fhtom(ndp->ni_dvp);
nfsm_strtom(ndp->ni_dent.d_name, ndp->ni_dent.d_namlen, NFS_MAXNAMLEN);
} else {
nfsstats.rpccnt[NFSPROC_REMOVE]++;
nfsm_reqhead(nfs_procids[NFSPROC_REMOVE], ndp->ni_cred,
NFSX_FH+NFSX_UNSIGNED+nfsm_rndup(ndp->ni_dent.d_namlen));
nfsm_fhtom(ndp->ni_dvp);
nfsm_strtom(ndp->ni_dent.d_name, ndp->ni_dent.d_namlen, NFS_MAXNAMLEN);
- nfsm_request(ndp->ni_dvp, NFSPROC_REMOVE, curproc, 1);
+ nfsm_request(ndp->ni_dvp, NFSPROC_REMOVE, p, 1);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
/*
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
/*
/*
* nfs file remove rpc called from nfs_inactive
*/
/*
* nfs file remove rpc called from nfs_inactive
*/
register struct nameidata *ndp;
register struct nameidata *ndp;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
NFSX_FH+NFSX_UNSIGNED+nfsm_rndup(ndp->ni_dent.d_namlen));
nfsm_fhtom(ndp->ni_dvp);
nfsm_strtom(ndp->ni_dent.d_name, ndp->ni_dent.d_namlen, NFS_MAXNAMLEN);
NFSX_FH+NFSX_UNSIGNED+nfsm_rndup(ndp->ni_dent.d_namlen));
nfsm_fhtom(ndp->ni_dvp);
nfsm_strtom(ndp->ni_dent.d_name, ndp->ni_dent.d_namlen, NFS_MAXNAMLEN);
- nfsm_request(ndp->ni_dvp, NFSPROC_REMOVE, curproc, 1);
+ nfsm_request(ndp->ni_dvp, NFSPROC_REMOVE, p, 1);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
return (error);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
return (error);
/*
* nfs file rename call
*/
/*
* nfs file rename call
*/
+nfs_rename(sndp, tndp, p)
register struct nameidata *sndp, *tndp;
register struct nameidata *sndp, *tndp;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
nfsm_strtom(sndp->ni_dent.d_name,sndp->ni_dent.d_namlen,NFS_MAXNAMLEN);
nfsm_fhtom(tndp->ni_dvp);
nfsm_strtom(tndp->ni_dent.d_name,tndp->ni_dent.d_namlen,NFS_MAXNAMLEN);
nfsm_strtom(sndp->ni_dent.d_name,sndp->ni_dent.d_namlen,NFS_MAXNAMLEN);
nfsm_fhtom(tndp->ni_dvp);
nfsm_strtom(tndp->ni_dent.d_name,tndp->ni_dent.d_namlen,NFS_MAXNAMLEN);
- nfsm_request(sndp->ni_dvp, NFSPROC_RENAME, curproc, 1);
+ nfsm_request(sndp->ni_dvp, NFSPROC_RENAME, p, 1);
nfsm_reqdone;
VTONFS(sndp->ni_dvp)->n_flag |= NMODIFIED;
VTONFS(tndp->ni_dvp)->n_flag |= NMODIFIED;
nfsm_reqdone;
VTONFS(sndp->ni_dvp)->n_flag |= NMODIFIED;
VTONFS(tndp->ni_dvp)->n_flag |= NMODIFIED;
/*
* nfs file rename rpc called from nfs_remove() above
*/
/*
* nfs file rename rpc called from nfs_remove() above
*/
-nfs_renameit(sndp, tndp)
+nfs_renameit(sndp, tndp, p)
register struct nameidata *sndp, *tndp;
register struct nameidata *sndp, *tndp;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
nfsm_strtom(sndp->ni_dent.d_name,sndp->ni_dent.d_namlen,NFS_MAXNAMLEN);
nfsm_fhtom(tndp->ni_dvp);
nfsm_strtom(tndp->ni_dent.d_name,tndp->ni_dent.d_namlen,NFS_MAXNAMLEN);
nfsm_strtom(sndp->ni_dent.d_name,sndp->ni_dent.d_namlen,NFS_MAXNAMLEN);
nfsm_fhtom(tndp->ni_dvp);
nfsm_strtom(tndp->ni_dent.d_name,tndp->ni_dent.d_namlen,NFS_MAXNAMLEN);
- nfsm_request(sndp->ni_dvp, NFSPROC_RENAME, curproc, 1);
+ nfsm_request(sndp->ni_dvp, NFSPROC_RENAME, p, 1);
nfsm_reqdone;
VTONFS(sndp->ni_dvp)->n_flag |= NMODIFIED;
VTONFS(tndp->ni_dvp)->n_flag |= NMODIFIED;
nfsm_reqdone;
VTONFS(sndp->ni_dvp)->n_flag |= NMODIFIED;
VTONFS(tndp->ni_dvp)->n_flag |= NMODIFIED;
/*
* nfs hard link create call
*/
/*
* nfs hard link create call
*/
register struct vnode *vp;
register struct nameidata *ndp;
register struct vnode *vp;
register struct nameidata *ndp;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
nfsm_fhtom(vp);
nfsm_fhtom(ndp->ni_dvp);
nfsm_strtom(ndp->ni_dent.d_name, ndp->ni_dent.d_namlen, NFS_MAXNAMLEN);
nfsm_fhtom(vp);
nfsm_fhtom(ndp->ni_dvp);
nfsm_strtom(ndp->ni_dent.d_name, ndp->ni_dent.d_namlen, NFS_MAXNAMLEN);
- nfsm_request(vp, NFSPROC_LINK, curproc, 1);
+ nfsm_request(vp, NFSPROC_LINK, p, 1);
nfsm_reqdone;
VTONFS(vp)->n_attrstamp = 0;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
nfsm_reqdone;
VTONFS(vp)->n_attrstamp = 0;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
/*
* nfs symbolic link create call
*/
/*
* nfs symbolic link create call
*/
-nfs_symlink(ndp, vap, nm)
+nfs_symlink(ndp, vap, nm, p)
struct nameidata *ndp;
struct vattr *vap;
char *nm; /* is this the path ?? */
struct nameidata *ndp;
struct vattr *vap;
char *nm; /* is this the path ?? */
{
register struct nfsv2_sattr *sp;
{
register struct nfsv2_sattr *sp;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
sp->sa_size = txdr_unsigned(VNOVAL);
txdr_time(&vap->va_atime, &sp->sa_atime); /* or VNOVAL ?? */
txdr_time(&vap->va_mtime, &sp->sa_mtime); /* or VNOVAL ?? */
sp->sa_size = txdr_unsigned(VNOVAL);
txdr_time(&vap->va_atime, &sp->sa_atime); /* or VNOVAL ?? */
txdr_time(&vap->va_mtime, &sp->sa_mtime); /* or VNOVAL ?? */
- nfsm_request(ndp->ni_dvp, NFSPROC_SYMLINK, curproc, 1);
+ nfsm_request(ndp->ni_dvp, NFSPROC_SYMLINK, p, 1);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
nfs_nput(ndp->ni_dvp);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
nfs_nput(ndp->ni_dvp);
/*
* nfs make dir call
*/
/*
* nfs make dir call
*/
register struct nameidata *ndp;
struct vattr *vap;
register struct nameidata *ndp;
struct vattr *vap;
{
register struct nfsv2_sattr *sp;
{
register struct nfsv2_sattr *sp;
register caddr_t cp;
register long t1, t2;
register int len;
register caddr_t cp;
register long t1, t2;
register int len;
sp->sa_size = txdr_unsigned(VNOVAL);
txdr_time(&vap->va_atime, &sp->sa_atime); /* or VNOVAL ?? */
txdr_time(&vap->va_mtime, &sp->sa_mtime); /* or VNOVAL ?? */
sp->sa_size = txdr_unsigned(VNOVAL);
txdr_time(&vap->va_atime, &sp->sa_atime); /* or VNOVAL ?? */
txdr_time(&vap->va_mtime, &sp->sa_mtime); /* or VNOVAL ?? */
- nfsm_request(ndp->ni_dvp, NFSPROC_MKDIR, curproc, 1);
+ nfsm_request(ndp->ni_dvp, NFSPROC_MKDIR, p, 1);
nfsm_mtofh(ndp->ni_dvp, ndp->ni_vp);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
nfsm_mtofh(ndp->ni_dvp, ndp->ni_vp);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
NFSX_FH+NFSX_UNSIGNED+nfsm_rndup(len));
nfsm_fhtom(ndp->ni_dvp);
nfsm_strtom(ndp->ni_dent.d_name, len, NFS_MAXNAMLEN);
NFSX_FH+NFSX_UNSIGNED+nfsm_rndup(len));
nfsm_fhtom(ndp->ni_dvp);
nfsm_strtom(ndp->ni_dent.d_name, len, NFS_MAXNAMLEN);
- nfsm_request(ndp->ni_dvp, NFSPROC_LOOKUP, curproc, 1);
+ nfsm_request(ndp->ni_dvp, NFSPROC_LOOKUP, p, 1);
nfsm_mtofh(ndp->ni_dvp, ndp->ni_vp);
if (ndp->ni_vp->v_type != VDIR) {
vput(ndp->ni_vp);
nfsm_mtofh(ndp->ni_dvp, ndp->ni_vp);
if (ndp->ni_vp->v_type != VDIR) {
vput(ndp->ni_vp);
/*
* nfs remove directory call
*/
/*
* nfs remove directory call
*/
register struct nameidata *ndp;
register struct nameidata *ndp;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos;
NFSX_FH+NFSX_UNSIGNED+nfsm_rndup(ndp->ni_dent.d_namlen));
nfsm_fhtom(ndp->ni_dvp);
nfsm_strtom(ndp->ni_dent.d_name, ndp->ni_dent.d_namlen, NFS_MAXNAMLEN);
NFSX_FH+NFSX_UNSIGNED+nfsm_rndup(ndp->ni_dent.d_namlen));
nfsm_fhtom(ndp->ni_dvp);
nfsm_strtom(ndp->ni_dent.d_name, ndp->ni_dent.d_namlen, NFS_MAXNAMLEN);
- nfsm_request(ndp->ni_dvp, NFSPROC_RMDIR, curproc, 1);
+ nfsm_request(ndp->ni_dvp, NFSPROC_RMDIR, p, 1);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
cache_purge(ndp->ni_dvp);
nfsm_reqdone;
VTONFS(ndp->ni_dvp)->n_flag |= NMODIFIED;
cache_purge(ndp->ni_dvp);
*/
if (uiop->uio_offset != 0 && uiop->uio_offset == np->n_direofoffset &&
(np->n_flag & NMODIFIED) == 0 &&
*/
if (uiop->uio_offset != 0 && uiop->uio_offset == np->n_direofoffset &&
(np->n_flag & NMODIFIED) == 0 &&
- nfs_dogetattr(vp, &vattr, cred, 0) == 0 &&
+ nfs_dogetattr(vp, &vattr, cred, 0, uiop->uio_procp) == 0 &&
np->n_mtime == vattr.va_mtime.tv_sec) {
*eofflagp = 1;
nfsstats.direofcache_hits++;
np->n_mtime == vattr.va_mtime.tv_sec) {
*eofflagp = 1;
nfsstats.direofcache_hits++;
* Readdir rpc call.
* Called from below the buffer cache by nfs_doio().
*/
* Readdir rpc call.
* Called from below the buffer cache by nfs_doio().
*/
-nfs_readdirrpc(vp, uiop, cred, procp)
+nfs_readdirrpc(vp, uiop, cred)
register struct vnode *vp;
struct uio *uiop;
struct ucred *cred;
register struct vnode *vp;
struct uio *uiop;
struct ucred *cred;
{
register long len;
register struct direct *dp;
{
register long len;
register struct direct *dp;
register caddr_t cp;
register long t1;
long tlen, lastlen;
register caddr_t cp;
register long t1;
long tlen, lastlen;
tresid = uiop->uio_resid;
/*
* Loop around doing readdir rpc's of size uio_resid or nm_rsize,
tresid = uiop->uio_resid;
/*
* Loop around doing readdir rpc's of size uio_resid or nm_rsize,
- * whichever is smaller, truncated to a multiple of DIRBLKSIZ.
+ * whichever is smaller, truncated to a multiple of NFS_DIRBLKSIZ.
* The stopping criteria is EOF or buffer full.
*/
* The stopping criteria is EOF or buffer full.
*/
- while (more_dirs && uiop->uio_resid >= DIRBLKSIZ) {
+ while (more_dirs && uiop->uio_resid >= NFS_DIRBLKSIZ) {
nfsstats.rpccnt[NFSPROC_READDIR]++;
nfsm_reqhead(nfs_procids[NFSPROC_READDIR], cred, xid);
nfsm_fhtom(vp);
nfsstats.rpccnt[NFSPROC_READDIR]++;
nfsm_reqhead(nfs_procids[NFSPROC_READDIR], cred, xid);
nfsm_fhtom(vp);
- nfsm_build(p, u_long *, 2*NFSX_UNSIGNED);
- *p++ = txdr_unsigned(uiop->uio_offset);
- *p = txdr_unsigned(((uiop->uio_resid > nmp->nm_rsize) ?
- nmp->nm_rsize : uiop->uio_resid) & ~(DIRBLKSIZ-1));
- nfsm_request(vp, NFSPROC_READDIR, procp, 0);
+ nfsm_build(tl, u_long *, 2*NFSX_UNSIGNED);
+ *tl++ = txdr_unsigned(uiop->uio_offset);
+ *tl = txdr_unsigned(((uiop->uio_resid > nmp->nm_rsize) ?
+ nmp->nm_rsize : uiop->uio_resid) & ~(NFS_DIRBLKSIZ-1));
+ nfsm_request(vp, NFSPROC_READDIR, uiop->uio_procp, 0);
- nfsm_disect(p, u_long *, NFSX_UNSIGNED);
- more_dirs = fxdr_unsigned(int, *p);
+ nfsm_disect(tl, u_long *, NFSX_UNSIGNED);
+ more_dirs = fxdr_unsigned(int, *tl);
/* Save the position so that we can do nfsm_mtouio() later */
dpos2 = dpos;
/* Save the position so that we can do nfsm_mtouio() later */
dpos2 = dpos;
while (more_dirs && siz < uiop->uio_resid) {
savoff = off; /* Hold onto offset and dp */
savdp = dp;
while (more_dirs && siz < uiop->uio_resid) {
savoff = off; /* Hold onto offset and dp */
savdp = dp;
- nfsm_disecton(p, u_long *, 2*NFSX_UNSIGNED);
- dp = (struct direct *)p;
- dp->d_ino = fxdr_unsigned(u_long, *p++);
- len = fxdr_unsigned(int, *p);
+ nfsm_disecton(tl, u_long *, 2*NFSX_UNSIGNED);
+ dp = (struct direct *)tl;
+ dp->d_ino = fxdr_unsigned(u_long, *tl++);
+ len = fxdr_unsigned(int, *tl);
if (len <= 0 || len > NFS_MAXNAMLEN) {
error = EBADRPC;
m_freem(mrep);
if (len <= 0 || len > NFS_MAXNAMLEN) {
error = EBADRPC;
m_freem(mrep);
nfsm_adv(tlen - len);
len = tlen;
}
nfsm_adv(tlen - len);
len = tlen;
}
- nfsm_disecton(p, u_long *, 2*NFSX_UNSIGNED);
- off = fxdr_unsigned(off_t, *p);
- *p++ = 0; /* Ensures null termination of name */
- more_dirs = fxdr_unsigned(int, *p);
+ nfsm_disecton(tl, u_long *, 2*NFSX_UNSIGNED);
+ off = fxdr_unsigned(off_t, *tl);
+ *tl++ = 0; /* Ensures null termination of name */
+ more_dirs = fxdr_unsigned(int, *tl);
dp->d_reclen = len+4*NFSX_UNSIGNED;
siz += dp->d_reclen;
}
dp->d_reclen = len+4*NFSX_UNSIGNED;
siz += dp->d_reclen;
}
* If at end of rpc data, get the eof boolean
*/
if (!more_dirs) {
* If at end of rpc data, get the eof boolean
*/
if (!more_dirs) {
- nfsm_disecton(p, u_long *, NFSX_UNSIGNED);
- more_dirs = (fxdr_unsigned(int, *p) == 0);
+ nfsm_disecton(tl, u_long *, NFSX_UNSIGNED);
+ more_dirs = (fxdr_unsigned(int, *tl) == 0);
/*
* If at EOF, cache directory offset
/*
* If at EOF, cache directory offset
- * Fill last record, iff any, out to a multiple of DIRBLKSIZ
+ * Fill last record, iff any, out to a multiple of NFS_DIRBLKSIZ
* by increasing d_reclen for the last record.
*/
if (uiop->uio_resid < tresid) {
* by increasing d_reclen for the last record.
*/
if (uiop->uio_resid < tresid) {
- len = uiop->uio_resid & (DIRBLKSIZ - 1);
+ len = uiop->uio_resid & (NFS_DIRBLKSIZ - 1);
if (len > 0) {
dp = (struct direct *)
(uiop->uio_iov->iov_base - lastlen);
if (len > 0) {
dp = (struct direct *)
(uiop->uio_iov->iov_base - lastlen);
* to create the same funny name between the nfs_lookitup() fails and the
* nfs_rename() completes, but...
*/
* to create the same funny name between the nfs_lookitup() fails and the
* nfs_rename() completes, but...
*/
-nfs_sillyrename(ndp, flag)
+nfs_sillyrename(ndp, flag, p)
register struct nameidata *ndp;
int flag;
register struct nameidata *ndp;
int flag;
{
register struct nfsnode *np;
register struct sillyrename *sp;
{
register struct nfsnode *np;
register struct sillyrename *sp;
tndp->ni_cred = crdup(ndp->ni_cred);
/* Fudge together a funny name */
tndp->ni_cred = crdup(ndp->ni_cred);
/* Fudge together a funny name */
bcopy(".nfsAxxxx4.4", tndp->ni_dent.d_name, 13);
tndp->ni_dent.d_namlen = 12;
tndp->ni_dent.d_name[8] = hextoasc[pid & 0xf];
bcopy(".nfsAxxxx4.4", tndp->ni_dent.d_name, 13);
tndp->ni_dent.d_namlen = 12;
tndp->ni_dent.d_name[8] = hextoasc[pid & 0xf];
tndp->ni_dent.d_name[5] = hextoasc[(pid >> 12) & 0xf];
/* Try lookitups until we get one that isn't there */
tndp->ni_dent.d_name[5] = hextoasc[(pid >> 12) & 0xf];
/* Try lookitups until we get one that isn't there */
- while (nfs_lookitup(ndp->ni_dvp, tndp, (nfsv2fh_t *)0) == 0) {
+ while (nfs_lookitup(ndp->ni_dvp, tndp, (nfsv2fh_t *)0, p) == 0) {
tndp->ni_dent.d_name[4]++;
if (tndp->ni_dent.d_name[4] > 'z') {
error = EINVAL;
goto bad;
}
}
tndp->ni_dent.d_name[4]++;
if (tndp->ni_dent.d_name[4] > 'z') {
error = EINVAL;
goto bad;
}
}
- if (error = nfs_renameit(ndp, tndp))
+ if (error = nfs_renameit(ndp, tndp, p))
- nfs_lookitup(ndp->ni_dvp, tndp, &np->n_fh);
+ nfs_lookitup(ndp->ni_dvp, tndp, &np->n_fh, p);
np->n_sillyrename = sp;
return (0);
bad:
np->n_sillyrename = sp;
return (0);
bad:
* into the nfsnode table.
* If fhp != NULL it copies the returned file handle out
*/
* into the nfsnode table.
* If fhp != NULL it copies the returned file handle out
*/
-nfs_lookitup(vp, ndp, fhp)
+nfs_lookitup(vp, ndp, fhp, p)
register struct vnode *vp;
register struct nameidata *ndp;
nfsv2fh_t *fhp;
register struct vnode *vp;
register struct nameidata *ndp;
nfsv2fh_t *fhp;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos, cp2;
register caddr_t cp;
register long t1, t2;
caddr_t bpos, dpos, cp2;
nfsm_reqhead(nfs_procids[NFSPROC_LOOKUP], ndp->ni_cred, NFSX_FH+NFSX_UNSIGNED+nfsm_rndup(len));
nfsm_fhtom(vp);
nfsm_strtom(ndp->ni_dent.d_name, len, NFS_MAXNAMLEN);
nfsm_reqhead(nfs_procids[NFSPROC_LOOKUP], ndp->ni_cred, NFSX_FH+NFSX_UNSIGNED+nfsm_rndup(len));
nfsm_fhtom(vp);
nfsm_strtom(ndp->ni_dent.d_name, len, NFS_MAXNAMLEN);
- nfsm_request(vp, NFSPROC_LOOKUP, curproc, 1);
+ nfsm_request(vp, NFSPROC_LOOKUP, p, 1);
if (fhp != NULL) {
nfsm_disect(cp, caddr_t, NFSX_FH);
bcopy(cp, (caddr_t)fhp, NFSX_FH);
if (fhp != NULL) {
nfsm_disect(cp, caddr_t, NFSX_FH);
bcopy(cp, (caddr_t)fhp, NFSX_FH);
register struct vnode *vp;
struct nfsnode *np;
struct ucred *cr;
register struct vnode *vp;
struct nfsnode *np;
struct ucred *cr;
int error;
struct uio uio;
struct iovec io;
int error;
struct uio uio;
struct iovec io;
uiop->uio_iov = &io;
uiop->uio_iovcnt = 1;
uiop->uio_segflg = UIO_SYSSPACE;
uiop->uio_iov = &io;
uiop->uio_iovcnt = 1;
uiop->uio_segflg = UIO_SYSSPACE;
+ uiop->uio_procp = (struct proc *)0;
/*
* For phys i/o, map the b_addr into kernel virtual space using
/*
* For phys i/o, map the b_addr into kernel virtual space using
* and a guess at a group
*/
if (bp->b_flags & B_PHYS) {
* and a guess at a group
*/
if (bp->b_flags & B_PHYS) {
- rp = (bp->b_flags & B_DIRTY) ? pageproc : bp->b_proc;
- cr = crcopy(rp->p_ucred);
+ if (bp->b_flags & B_DIRTY)
+ uiop->uio_procp = pageproc;
+ cr = crcopy(uiop->uio_procp->p_ucred);
#if defined(hp300) || defined(i386)
/* mapping was already done by vmapbuf */
io.iov_base = bp->b_un.b_addr;
#if defined(hp300) || defined(i386)
/* mapping was already done by vmapbuf */
io.iov_base = bp->b_un.b_addr;
else {
v = btop(bp->b_un.b_addr);
if (bp->b_flags & B_UAREA)
else {
v = btop(bp->b_un.b_addr);
if (bp->b_flags & B_UAREA)
+ pte = &uiop->uio_procp->p_addr[v];
+ pte = vtopte(uiop->uio_procp, v);
if (bp->b_flags & B_READ) {
uiop->uio_rw = UIO_READ;
nfsstats.read_physios++;
if (bp->b_flags & B_READ) {
uiop->uio_rw = UIO_READ;
nfsstats.read_physios++;
- bp->b_error = error = nfs_readrpc(vp, uiop, cr, rp);
+ bp->b_error = error = nfs_readrpc(vp, uiop, cr);
(void) vnode_pager_uncache(vp);
} else {
uiop->uio_rw = UIO_WRITE;
nfsstats.write_physios++;
(void) vnode_pager_uncache(vp);
} else {
uiop->uio_rw = UIO_WRITE;
nfsstats.write_physios++;
- bp->b_error = error = nfs_writerpc(vp, uiop, cr, rp);
+ bp->b_error = error = nfs_writerpc(vp, uiop, cr);
case VREG:
uiop->uio_offset = bp->b_blkno * DEV_BSIZE;
nfsstats.read_bios++;
case VREG:
uiop->uio_offset = bp->b_blkno * DEV_BSIZE;
nfsstats.read_bios++;
- error = nfs_readrpc(vp, uiop, bp->b_rcred,
- bp->b_proc);
+ error = nfs_readrpc(vp, uiop, bp->b_rcred);
break;
case VLNK:
uiop->uio_offset = 0;
nfsstats.readlink_bios++;
break;
case VLNK:
uiop->uio_offset = 0;
nfsstats.readlink_bios++;
- error = nfs_readlinkrpc(vp, uiop, bp->b_rcred,
- bp->b_proc);
+ error = nfs_readlinkrpc(vp, uiop, bp->b_rcred);
break;
case VDIR:
uiop->uio_offset = bp->b_lblkno;
nfsstats.readdir_bios++;
break;
case VDIR:
uiop->uio_offset = bp->b_lblkno;
nfsstats.readdir_bios++;
- error = nfs_readdirrpc(vp, uiop, bp->b_rcred,
- bp->b_proc);
+ error = nfs_readdirrpc(vp, uiop, bp->b_rcred);
/*
* Save offset cookie in b_blkno.
*/
/*
* Save offset cookie in b_blkno.
*/
uiop->uio_rw = UIO_WRITE;
nfsstats.write_bios++;
bp->b_error = error = nfs_writerpc(vp, uiop,
uiop->uio_rw = UIO_WRITE;
nfsstats.write_bios++;
bp->b_error = error = nfs_writerpc(vp, uiop,
- bp->b_wcred, bp->b_proc);
if (error) {
np->n_error = error;
np->n_flag |= NWRITEERR;
if (error) {
np->n_error = error;
np->n_flag |= NWRITEERR;
+/*
+ * Mmap a file
+ *
+ * NB Currently unsupported.
+ */
+/* ARGSUSED */
+nfs_mmap(vp, fflags, cred, p)
+ struct vnode *vp;
+ int fflags;
+ struct ucred *cred;
+ struct proc *p;
+{
+
+ return (EINVAL);
+}
+
/*
* Flush all the blocks associated with a vnode.
* Walk through the buffer pool and push any dirty pages
* associated with the vnode.
*/
/* ARGSUSED */
/*
* Flush all the blocks associated with a vnode.
* Walk through the buffer pool and push any dirty pages
* associated with the vnode.
*/
/* ARGSUSED */
-nfs_fsync(vp, fflags, cred, waitfor)
+nfs_fsync(vp, fflags, cred, waitfor, p)
register struct vnode *vp;
int fflags;
struct ucred *cred;
int waitfor;
register struct vnode *vp;
int fflags;
struct ucred *cred;
int waitfor;
{
register struct nfsnode *np = VTONFS(vp);
int error = 0;
{
register struct nfsnode *np = VTONFS(vp);
int error = 0;