SYSCTL_INT(_vfs_generic_nfs_client, NFS_TPRINTF_DELAY,
nextdowndelay, CTLFLAG_RW, &nfs_tprintf_delay, 0, "");
-static int nfs_biosize(struct nfsmount *);
+static int nfs_iosize(struct nfsmount *nmp);
static int mountnfs(struct user_nfs_args *,mount_t,mbuf_t,proc_t,vnode_t *);
static int nfs_mount(mount_t mp, vnode_t vp, user_addr_t data, vfs_context_t context);
static int nfs_start(mount_t mp, int flags, vfs_context_t context);
nfs_mount_diskless_private(struct nfs_dlmount *, const char *, int, vnode_t *, mount_t *);
#endif /* NO_MOUNT_PRIVATE */
-static int
-nfs_biosize(struct nfsmount *nmp)
+static int nfs_iosize(nmp)
+ struct nfsmount* nmp;
{
int iosize;
nfs_fsinfo(nmp, vp, cred, p);
nfsm_reqhead(NFSX_FH(v3));
if (error) {
- kauth_cred_unref(&cred);
+ kauth_cred_rele(cred);
vnode_put(vp);
return (error);
}
nfsm_dissect(sfp, struct nfs_statfs *, NFSX_STATFS(v3));
sbp->f_flags = nmp->nm_flag;
- sbp->f_iosize = NFS_IOSIZE;
+ sbp->f_iosize = nfs_iosize(nmp);
if (v3) {
/*
* Adjust block size to get total block count to fit in a long.
sbp->f_ffree = 0;
}
nfsm_reqdone;
- kauth_cred_unref(&cred);
+ kauth_cred_rele(cred);
vnode_put(vp);
return (error);
}
struct vfs_context context; /* XXX get from caller? */
u_int64_t xid;
- /* up front because of reference */
- context.vc_ucred = kauth_cred_proc_ref(p);
-
/*
* Silently clear NFSMNT_NOCONN if it's a TCP mount, it makes
* no sense in that context.
nmp = VFSTONFS(mp);
/* update paths, file handles, etc, here XXX */
mbuf_freem(nam);
- kauth_cred_unref(&context.vc_ucred);
return (0);
} else {
MALLOC_ZONE(nmp, struct nfsmount *,
sizeof (struct nfsmount), M_NFSMNT, M_WAITOK);
if (!nmp) {
mbuf_freem(nam);
- kauth_cred_unref(&context.vc_ucred);
return (ENOMEM);
}
bzero((caddr_t)nmp, sizeof (struct nfsmount));
}
if (nmp->nm_wsize > maxio)
nmp->nm_wsize = maxio;
- if (nmp->nm_wsize > NFS_MAXBSIZE)
- nmp->nm_wsize = NFS_MAXBSIZE;
+ if (nmp->nm_wsize > MAXBSIZE)
+ nmp->nm_wsize = MAXBSIZE;
if ((argp->flags & NFSMNT_RSIZE) && argp->rsize > 0) {
nmp->nm_rsize = argp->rsize;
}
if (nmp->nm_rsize > maxio)
nmp->nm_rsize = maxio;
- if (nmp->nm_rsize > NFS_MAXBSIZE)
- nmp->nm_rsize = NFS_MAXBSIZE;
+ if (nmp->nm_rsize > MAXBSIZE)
+ nmp->nm_rsize = MAXBSIZE;
if ((argp->flags & NFSMNT_READDIRSIZE) && argp->readdirsize > 0) {
nmp->nm_readdirsize = argp->readdirsize;
*/
// LP64todo - fix CAST_DOWN of argp->fh
error = nfs_getattr_no_vnode(mp, CAST_DOWN(caddr_t, argp->fh), argp->fhsize,
- context.vc_ucred, p, &nvattrs, &xid);
+ proc_ucred(p), p, &nvattrs, &xid);
if (error) {
/*
* we got problems... we couldn't get the attributes
* the server about what its preferred I/O sizes are.
*/
if (nmp->nm_flag & NFSMNT_NFSV3)
- nfs_fsinfo(nmp, *vpp, context.vc_ucred, p);
- nmp->nm_biosize = nfs_biosize(nmp);
- vfs_statfs(mp)->f_iosize = NFS_IOSIZE;
+ nfs_fsinfo(nmp, *vpp, proc_ucred(p), p);
+ vfs_statfs(mp)->f_iosize = nfs_iosize(nmp);
/*
* V3 mounts give us a (relatively) reliable remote access(2)
* Do statfs to ensure static info gets set to reasonable values.
*/
context.vc_proc = p;
+ context.vc_ucred = proc_ucred(p);
nfs_statfs(mp, vfs_statfs(mp), &context);
if (nmp->nm_flag & NFSMNT_RESVPORT)
nfs_resv_mounts++;
nmp->nm_state |= NFSSTA_MOUNTED;
- kauth_cred_unref(&context.vc_ucred);
return (0);
bad:
nfs_disconnect(nmp);
FREE_ZONE((caddr_t)nmp, sizeof (struct nfsmount), M_NFSMNT);
mbuf_freem(nam);
- kauth_cred_unref(&context.vc_ucred);
return (error);
}