]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/nfs/nfs_vfsops.c
xnu-792.21.3.tar.gz
[apple/xnu.git] / bsd / nfs / nfs_vfsops.c
index 847af58182439556acb2c87358330328d23633a3..7c281f13b00d8d45fc5c9f8928852191fced9ac7 100644 (file)
@@ -131,7 +131,7 @@ static int nfs_tprintf_delay = NFS_TPRINTF_DELAY;
 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);
@@ -172,8 +172,8 @@ static int
 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;
 
@@ -227,7 +227,7 @@ nfs_statfs(mount_t mp, struct vfsstatfs *sbp, vfs_context_t context)
                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);
        }
@@ -239,7 +239,7 @@ nfs_statfs(mount_t mp, struct vfsstatfs *sbp, vfs_context_t context)
        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.
@@ -284,7 +284,7 @@ nfs_statfs(mount_t mp, struct vfsstatfs *sbp, vfs_context_t context)
                sbp->f_ffree = 0;
        }
        nfsm_reqdone;
-       kauth_cred_unref(&cred);
+       kauth_cred_rele(cred);
        vnode_put(vp);
        return (error);
 }
@@ -1034,9 +1034,6 @@ mountnfs(
        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.
@@ -1048,14 +1045,12 @@ mountnfs(
                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));
@@ -1125,8 +1120,8 @@ mountnfs(
        }
        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;
@@ -1137,8 +1132,8 @@ mountnfs(
        }
        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;
@@ -1192,7 +1187,7 @@ mountnfs(
         */
        // 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
@@ -1234,9 +1229,8 @@ mountnfs(
         * 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)
@@ -1252,18 +1246,17 @@ mountnfs(
         * 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);
 }