Introduce cratom(), remove crcopy().
authorMatthew Dillon <dillon@dragonflybsd.org>
Thu, 26 Jun 2003 02:17:47 +0000 (02:17 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Thu, 26 Jun 2003 02:17:47 +0000 (02:17 +0000)
16 files changed:
sys/kern/kern_descrip.c
sys/kern/kern_exec.c
sys/kern/kern_jail.c
sys/kern/kern_prot.c
sys/kern/uipc_socket.c
sys/kern/vfs_aio.c
sys/kern/vfs_cluster.c
sys/netproto/ncp/ncp_ncp.c
sys/sys/ucred.h
sys/vfs/coda/coda_namecache.c
sys/vfs/nfs/nfs_bio.c
sys/vfs/specfs/spec_vnops.c
sys/vfs/ufs/ufs_quota.c
sys/vm/swap_pager.c
sys/vm/vm_pager.c
sys/vm/vnode_pager.c

index 3e512d7..dc349da 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)kern_descrip.c      8.6 (Berkeley) 4/19/94
  * $FreeBSD: src/sys/kern/kern_descrip.c,v 1.81.2.17 2003/06/06 20:21:32 tegge Exp $
- * $DragonFly: src/sys/kern/kern_descrip.c,v 1.4 2003/06/25 03:55:57 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_descrip.c,v 1.5 2003/06/26 02:17:45 dillon Exp $
  */
 
 #include "opt_compat.h"
@@ -553,8 +553,7 @@ fsetown(pgid, sigiop)
                sigio->sio_pgrp = pgrp;
        }
        sigio->sio_pgid = pgid;
-       curproc->p_ucred = crhold(curproc->p_ucred);
-       sigio->sio_ucred = curproc->p_ucred;
+       sigio->sio_ucred = crhold(curproc->p_ucred);
        /* It would be convenient if p_ruid was in ucred. */
        sigio->sio_ruid = curproc->p_ucred->cr_ruid;
        sigio->sio_myref = sigiop;
@@ -941,10 +940,9 @@ falloc(p, resultfp, resultfd)
                return (error);
        }
        fp->f_count = 1;
-       fp->f_cred = p->p_ucred;
+       fp->f_cred = crhold(p->p_ucred);
        fp->f_ops = &badfileops;
        fp->f_seqcount = 1;
-       crhold(fp->f_cred);
        if ((fq = p->p_fd->fd_ofiles[0])) {
                LIST_INSERT_AFTER(fq, fp, f_list);
        } else {
index 9b5aebe..4f78ee6 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/kern/kern_exec.c,v 1.107.2.15 2002/07/30 15:40:46 nectar Exp $
- * $DragonFly: src/sys/kern/kern_exec.c,v 1.4 2003/06/25 03:55:57 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_exec.c,v 1.5 2003/06/26 02:17:45 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -339,7 +339,7 @@ interpret:
                /*
                 * Set the new credentials.
                 */
-               p->p_ucred = crcopy(p->p_ucred);
+               cratom(&p->p_ucred);
                if (attr.va_mode & VSUID)
                        change_euid(attr.va_uid);
                if (attr.va_mode & VSGID)
index 321490c..57774f9 100644 (file)
@@ -7,7 +7,7 @@
  * ----------------------------------------------------------------------------
  *
  * $FreeBSD: src/sys/kern/kern_jail.c,v 1.6.2.3 2001/08/17 01:00:26 rwatson Exp $
- * $DragonFly: src/sys/kern/kern_jail.c,v 1.4 2003/06/25 03:55:57 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_jail.c,v 1.5 2003/06/26 02:17:45 dillon Exp $
  *
  */
 
@@ -81,7 +81,7 @@ jail(struct jail_args *uap)
                goto bail;
 
        pr->pr_ref++;
-       p->p_ucred = crcopy(p->p_ucred);
+       cratom(&p->p_ucred);
        p->p_ucred->cr_prison = pr;
        p->p_flag |= P_JAILED;
        return (0);
index 9215e7c..7b8141e 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)kern_prot.c 8.6 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/kern/kern_prot.c,v 1.53.2.9 2002/03/09 05:20:26 dd Exp $
- * $DragonFly: src/sys/kern/kern_prot.c,v 1.4 2003/06/25 03:55:57 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_prot.c,v 1.5 2003/06/26 02:17:45 dillon Exp $
  */
 
 /*
@@ -564,7 +564,7 @@ setgid(struct setgid_args *uap)
         * Copy credentials so other references do not see our changes.
         */
        if (cr->cr_groups[0] != gid) {
-               cr = p->p_ucred = crcopy(cr);
+               cr = cratom(&p->p_ucred);
                cr->cr_groups[0] = gid;
                setsugid();
        }
@@ -595,7 +595,7 @@ setegid(struct setegid_args *uap)
            (error = suser_cred(cr, PRISON_ROOT)))
                return (error);
        if (cr->cr_groups[0] != egid) {
-               cr = p->p_ucred = crcopy(cr);
+               cr = cratom(&p->p_ucred);
                cr->cr_groups[0] = egid;
                setsugid();
        }
@@ -628,9 +628,9 @@ setgroups(struct setgroups_args *uap)
                return (EINVAL);
        /*
         * XXX A little bit lazy here.  We could test if anything has
-        * changed before crcopy() and setting P_SUGID.
+        * changed before cratom() and setting P_SUGID.
         */
-       cr = p->p_ucred = crcopy(cr);
+       cr = cratom(&p->p_ucred);
        if (ngrp < 1) {
                /*
                 * setgroups(0, NULL) is a legitimate way of clearing the
@@ -686,7 +686,7 @@ setreuid(struct setreuid_args *uap)
        }
        if ((ruid != (uid_t)-1 || cr->cr_uid != cr->cr_ruid) &&
            cr->cr_svuid != cr->cr_uid) {
-               cr = p->p_ucred = crcopy(cr);
+               cr = cratom(&p->p_ucred);
                cr->cr_svuid = cr->cr_uid;
                setsugid();
        }
@@ -721,18 +721,18 @@ setregid(struct setregid_args *uap)
                return (error);
 
        if (egid != (gid_t)-1 && cr->cr_groups[0] != egid) {
-               cr = p->p_ucred = crcopy(cr);
+               cr = cratom(&p->p_ucred);
                cr->cr_groups[0] = egid;
                setsugid();
        }
        if (rgid != (gid_t)-1 && cr->cr_rgid != rgid) {
-               cr = p->p_ucred = crcopy(cr);
+               cr = cratom(&p->p_ucred);
                cr->cr_rgid = rgid;
                setsugid();
        }
        if ((rgid != (gid_t)-1 || cr->cr_groups[0] != cr->cr_rgid) &&
            cr->cr_svgid != cr->cr_groups[0]) {
-               cr = p->p_ucred = crcopy(cr);
+               cr = cratom(&p->p_ucred);
                cr->cr_svgid = cr->cr_groups[0];
                setsugid();
        }
@@ -781,7 +781,7 @@ setresuid(struct setresuid_args *uap)
                setsugid();
        }
        if (suid != (uid_t)-1 && cr->cr_svuid != suid) {
-               cr = p->p_ucred = crcopy(cr);
+               cr = cratom(&p->p_ucred);
                cr->cr_svuid = suid;
                setsugid();
        }
@@ -823,17 +823,17 @@ setresgid(struct setresgid_args *uap)
                return (error);
 
        if (egid != (gid_t)-1 && cr->cr_groups[0] != egid) {
-               cr = p->p_ucred = crcopy(cr);
+               cr = cratom(&p->p_ucred);
                cr->cr_groups[0] = egid;
                setsugid();
        }
        if (rgid != (gid_t)-1 && cr->cr_rgid != rgid) {
-               cr = p->p_ucred = crcopy(cr);
+               cr = cratom(&p->p_ucred);
                cr->cr_rgid = rgid;
                setsugid();
        }
        if (sgid != (gid_t)-1 && cr->cr_svgid != sgid) {
-               cr = p->p_ucred = crcopy(cr);
+               cr = cratom(&p->p_ucred);
                cr->cr_svgid = sgid;
                setsugid();
        }
@@ -1006,12 +1006,14 @@ crget()
 }
 
 /*
- * Claim another reference to a ucred structure
+ * Claim another reference to a ucred structure.  Can be used with special
+ * creds.
  */
 struct ucred *
 crhold(struct ucred *cr)
 {
-       cr->cr_ref++;
+       if (cr != NOCRED && cr != FSCRED)
+               cr->cr_ref++;
        return(cr);
 }
 
@@ -1050,6 +1052,34 @@ crfree(struct ucred *cr)
        }
 }
 
+/*
+ * Atomize a cred structure so it can be modified without polluting
+ * other references to it.
+ */
+struct ucred *
+cratom(struct ucred **pcr)
+{
+       struct ucred *oldcr;
+       struct ucred *newcr;
+
+       oldcr = *pcr;
+       if (oldcr->cr_ref == 1)
+               return (oldcr);
+       newcr = crget();
+       *newcr = *oldcr;
+       if (newcr->cr_uidinfo)
+               uihold(newcr->cr_uidinfo);
+       if (newcr->cr_ruidinfo)
+               uihold(newcr->cr_ruidinfo);
+       if (newcr->cr_prison)
+               ++newcr->cr_prison->pr_ref;
+       newcr->cr_ref = 1;
+       crfree(oldcr);
+       *pcr = newcr;
+       return (newcr);
+}
+
+#if 0  /* no longer used but keep around for a little while */
 /*
  * Copy cred structure to a new one and free the old one.
  */
@@ -1072,6 +1102,7 @@ crcopy(struct ucred *cr)
        crfree(cr);
        return (newcr);
 }
+#endif
 
 /*
  * Dup cred struct to a new held one.
@@ -1183,12 +1214,7 @@ change_euid(uid_t euid)
 
        KKASSERT(p != NULL);
 
-       cr = p->p_ucred;
-       /*
-        * crcopy is essentially a NOP if ucred has a reference count
-        * of 1, which is true if it has already been copied.
-        */
-       cr = p->p_ucred = crcopy(cr);
+       cr = cratom(&p->p_ucred);
        uip = cr->cr_uidinfo;
        cr->cr_uid = euid;
        cr->cr_uidinfo = uifind(euid);
@@ -1210,7 +1236,7 @@ change_ruid(uid_t ruid)
 
        KKASSERT(p != NULL);
 
-       cr = p->p_ucred = crcopy(p->p_ucred);
+       cr = cratom(&p->p_ucred);
        (void)chgproccnt(cr->cr_ruidinfo, -1, 0);
        uip = cr->cr_ruidinfo;
        /* It is assumed that pcred is not shared between processes */
index ceef87f..3452b32 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)uipc_socket.c       8.3 (Berkeley) 4/15/94
  * $FreeBSD: src/sys/kern/uipc_socket.c,v 1.68.2.22 2002/12/15 09:24:23 maxim Exp $
- * $DragonFly: src/sys/kern/uipc_socket.c,v 1.4 2003/06/25 03:55:57 dillon Exp $
+ * $DragonFly: src/sys/kern/uipc_socket.c,v 1.5 2003/06/26 02:17:45 dillon Exp $
  */
 
 #include "opt_inet.h"
@@ -154,8 +154,7 @@ socreate(int dom, struct socket **aso, int type,
        TAILQ_INIT(&so->so_incomp);
        TAILQ_INIT(&so->so_comp);
        so->so_type = type;
-       so->so_cred = p->p_ucred;
-       crhold(so->so_cred);
+       so->so_cred = crhold(p->p_ucred);
        so->so_proto = prp;
        error = (*prp->pr_usrreqs->pru_attach)(so, proto, td);
        if (error) {
index 10a9500..6da232e 100644 (file)
@@ -14,7 +14,7 @@
  * of the author.  This software is distributed AS-IS.
  *
  * $FreeBSD: src/sys/kern/vfs_aio.c,v 1.70.2.28 2003/05/29 06:15:35 alc Exp $
- * $DragonFly: src/sys/kern/vfs_aio.c,v 1.4 2003/06/23 17:55:41 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_aio.c,v 1.5 2003/06/26 02:17:45 dillon Exp $
  */
 
 /*
@@ -622,6 +622,7 @@ aio_daemon(void *uproc)
        struct kaioinfo *ki;
        struct proc *curcp, *mycp, *userp;
        struct vmspace *myvm, *tmpvm;
+       struct ucred *cr;
 
        /*
         * Local copies of curproc (cp) and vmspace (myvm)
@@ -663,12 +664,12 @@ aio_daemon(void *uproc)
         */
        fdfree(mycp);
        mycp->p_fd = NULL;
-       mycp->p_ucred = crcopy(mycp->p_ucred);
-       mycp->p_ucred->cr_uid = 0;
-       uifree(mycp->p_ucred->cr_uidinfo);
-       mycp->p_ucred->cr_uidinfo = uifind(0);
-       mycp->p_ucred->cr_ngroups = 1;
-       mycp->p_ucred->cr_groups[0] = 1;
+       cr = cratom(&mycp->p_ucred);
+       cr->cr_uid = 0;
+       uifree(cr->cr_uidinfo);
+       cr->cr_uidinfo = uifind(0);
+       cr->cr_ngroups = 1;
+       cr->cr_groups[0] = 1;
 
        /* The daemon resides in its own pgrp. */
        enterpgrp(mycp, mycp->p_pid, 1);
index 1b96990..7dcbccb 100644 (file)
@@ -34,7 +34,7 @@
  *
  *     @(#)vfs_cluster.c       8.7 (Berkeley) 2/13/94
  * $FreeBSD: src/sys/kern/vfs_cluster.c,v 1.92.2.9 2001/11/18 07:10:59 dillon Exp $
- * $DragonFly: src/sys/kern/vfs_cluster.c,v 1.3 2003/06/19 01:55:06 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_cluster.c,v 1.4 2003/06/26 02:17:45 dillon Exp $
  */
 
 #include "opt_debug_cluster.h"
@@ -804,10 +804,8 @@ cluster_wbuild(vp, size, start_lbn, len)
                bp->b_bcount = 0;
                bp->b_bufsize = 0;
                bp->b_npages = 0;
-               if (tbp->b_wcred != NOCRED) {
-                   bp->b_wcred = tbp->b_wcred;
-                   crhold(bp->b_wcred);
-               }
+               if (tbp->b_wcred != NOCRED)
+                   bp->b_wcred = crhold(tbp->b_wcred);
 
                bp->b_blkno = tbp->b_blkno;
                bp->b_lblkno = tbp->b_lblkno;
index b1260ca..db4bd80 100644 (file)
@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/netncp/ncp_ncp.c,v 1.3 1999/10/29 10:21:07 bp Exp $
- * $DragonFly: src/sys/netproto/ncp/ncp_ncp.c,v 1.3 2003/06/25 03:56:05 dillon Exp $
+ * $DragonFly: src/sys/netproto/ncp/ncp_ncp.c,v 1.4 2003/06/26 02:17:46 dillon Exp $
  *
  * Core of NCP protocol
  */
@@ -557,8 +557,7 @@ ncp_connect(struct ncp_conn_args *li, struct thread *td, struct ucred *cred,
                owner = crget();
                owner->cr_uid = li->owner;
        } else {
-               owner = cred;
-               crhold(owner);
+               owner = crhold(cred);
        }
        error = ncp_conn_alloc(td, owner, &conn);
        if (error)
index 4f74469..82f0af4 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)ucred.h     8.4 (Berkeley) 1/9/95
  * $FreeBSD: src/sys/sys/ucred.h,v 1.14.2.5 2002/03/09 05:20:25 dd Exp $
- * $DragonFly: src/sys/sys/ucred.h,v 1.4 2003/06/25 03:56:10 dillon Exp $
+ * $DragonFly: src/sys/sys/ucred.h,v 1.5 2003/06/26 02:17:47 dillon Exp $
  */
 
 #ifndef _SYS_UCRED_H_
@@ -84,11 +84,12 @@ struct proc;
 
 void           change_euid __P((uid_t euid));
 void           change_ruid __P((uid_t ruid));
+struct ucred   *cratom __P((struct ucred **pcr));
 struct ucred   *crcopy __P((struct ucred *cr));
 struct ucred   *crdup __P((struct ucred *cr));
 void           crfree __P((struct ucred *cr));
 struct ucred   *crget __P((void));
-struct ucred   *crhold __P((struct ucred *cr));
+struct ucred    *crhold __P((struct ucred *cr));
 void           cru2x __P((struct ucred *cr, struct xucred *xcr));
 int            groupmember __P((gid_t gid, struct ucred *cred));
 #endif /* _KERNEL */
index 11ece22..cbbc2f0 100644 (file)
@@ -28,7 +28,7 @@
  * 
  *     @(#) src/sys/coda/coda_namecache.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
  * $FreeBSD: src/sys/coda/coda_namecache.c,v 1.10 1999/08/28 00:40:53 peter Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_namecache.c,v 1.3 2003/06/25 03:55:44 dillon Exp $
+ * $DragonFly: src/sys/vfs/coda/Attic/coda_namecache.c,v 1.4 2003/06/26 02:17:44 dillon Exp $
  * 
  */
 
@@ -277,11 +277,10 @@ coda_nc_enter(dcp, name, namelen, cred, cp)
      */
     vref(CTOV(cp));
     vref(CTOV(dcp));
-    cred = crhold(cred); 
     cncp->dcp = dcp;
     cncp->cp = cp;
     cncp->namelen = namelen;
-    cncp->cred = cred;
+    cncp->cred = crhold(cred);
     
     bcopy(name, cncp->name, (unsigned)namelen);
     
index a25fdc8..fb1d955 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_bio.c   8.9 (Berkeley) 3/30/95
  * $FreeBSD: src/sys/nfs/nfs_bio.c,v 1.83.2.4 2002/12/29 18:19:53 dillon Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_bio.c,v 1.4 2003/06/25 03:56:07 dillon Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_bio.c,v 1.5 2003/06/26 02:17:46 dillon Exp $
  */
 
 
@@ -954,10 +954,8 @@ again:
                        error = EINTR;
                        break;
                }
-               if (bp->b_wcred == NOCRED) {
-                       crhold(cred);
-                       bp->b_wcred = cred;
-               }
+               if (bp->b_wcred == NOCRED)
+                       bp->b_wcred = crhold(cred);
                np->n_flag |= NMODIFIED;
 
                /*
@@ -1313,16 +1311,12 @@ again:
                }
 
                if (bp->b_flags & B_READ) {
-                       if (bp->b_rcred == NOCRED && cred != NOCRED) {
-                               crhold(cred);
-                               bp->b_rcred = cred;
-                       }
+                       if (bp->b_rcred == NOCRED && cred != NOCRED)
+                               bp->b_rcred = crhold(cred);
                } else {
                        bp->b_flags |= B_WRITEINPROG;
-                       if (bp->b_wcred == NOCRED && cred != NOCRED) {
-                               crhold(cred);
-                               bp->b_wcred = cred;
-                       }
+                       if (bp->b_wcred == NOCRED && cred != NOCRED)
+                               bp->b_wcred = crhold(cred);
                }
 
                BUF_KERNPROC(bp);
index 9a7da71..c01d666 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)spec_vnops.c        8.14 (Berkeley) 5/21/95
  * $FreeBSD: src/sys/miscfs/specfs/spec_vnops.c,v 1.131.2.4 2001/02/26 04:23:20 jlemon Exp $
- * $DragonFly: src/sys/vfs/specfs/spec_vnops.c,v 1.5 2003/06/25 03:56:00 dillon Exp $
+ * $DragonFly: src/sys/vfs/specfs/spec_vnops.c,v 1.6 2003/06/26 02:17:45 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -704,11 +704,8 @@ spec_getpages(ap)
        bp->b_iodone = spec_getpages_iodone;
 
        /* B_PHYS is not set, but it is nice to fill this in. */
-       bp->b_rcred = bp->b_wcred = curproc->p_ucred;
-       if (bp->b_rcred != NOCRED)
-               crhold(bp->b_rcred);
-       if (bp->b_wcred != NOCRED)
-               crhold(bp->b_wcred);
+       bp->b_rcred = crhold(curproc->p_ucred);
+       bp->b_wcred = crhold(curproc->p_ucred);
        bp->b_blkno = blkno;
        bp->b_lblkno = blkno;
        pbgetvp(ap->a_vp, bp);
index 5cf86ee..0846f37 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)ufs_quota.c 8.5 (Berkeley) 5/20/95
  * $FreeBSD: src/sys/ufs/ufs/ufs_quota.c,v 1.27.2.3 2002/01/15 10:33:32 phk Exp $
- * $DragonFly: src/sys/vfs/ufs/ufs_quota.c,v 1.3 2003/06/25 03:56:12 dillon Exp $
+ * $DragonFly: src/sys/vfs/ufs/ufs_quota.c,v 1.4 2003/06/26 02:17:47 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -423,8 +423,7 @@ quotaon(td, mp, type, fname)
         * Save the credential of the process that turned on quotas.
         * Set up the time limits for this quota.
         */
-       crhold(cred);
-       ump->um_cred[type] = cred;
+       ump->um_cred[type] = crhold(cred);
        ump->um_btime[type] = MAX_DQ_TIME;
        ump->um_itime[type] = MAX_IQ_TIME;
        if (dqget(NULLVP, 0, ump, type, &dq) == 0) {
index fa6bc2e..59f64a0 100644 (file)
@@ -65,7 +65,7 @@
  *     @(#)swap_pager.c        8.9 (Berkeley) 3/21/94
  *
  * $FreeBSD: src/sys/vm/swap_pager.c,v 1.130.2.12 2002/08/31 21:15:55 dillon Exp $
- * $DragonFly: src/sys/vm/swap_pager.c,v 1.4 2003/06/22 17:39:48 dillon Exp $
+ * $DragonFly: src/sys/vm/swap_pager.c,v 1.5 2003/06/26 02:17:47 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -1110,10 +1110,9 @@ swap_pager_getpages(object, m, count, reqpage)
 
        bp->b_flags = B_READ | B_CALL;
        bp->b_iodone = swp_pager_async_iodone;
-       bp->b_rcred = bp->b_wcred = proc0.p_ucred;
        bp->b_data = (caddr_t) kva;
-       crhold(bp->b_rcred);
-       crhold(bp->b_wcred);
+       bp->b_rcred = crhold(proc0.p_ucred);
+       bp->b_wcred = crhold(proc0.p_ucred);
        bp->b_blkno = blk - (reqpage - i);
        bp->b_bcount = PAGE_SIZE * (j - i);
        bp->b_bufsize = PAGE_SIZE * (j - i);
@@ -1360,13 +1359,12 @@ swap_pager_putpages(object, m, count, sync, rtvals)
 
                pmap_qenter((vm_offset_t)bp->b_data, &m[i], n);
 
-               bp->b_rcred = bp->b_wcred = proc0.p_ucred;
                bp->b_bcount = PAGE_SIZE * n;
                bp->b_bufsize = PAGE_SIZE * n;
                bp->b_blkno = blk;
 
-               crhold(bp->b_rcred);
-               crhold(bp->b_wcred);
+               bp->b_rcred = crhold(proc0.p_ucred);
+               bp->b_wcred = crhold(proc0.p_ucred);
 
                pbgetvp(swapdev_vp, bp);
 
index 870f52c..aa5f076 100644 (file)
@@ -62,7 +62,7 @@
  * rights to redistribute these changes.
  *
  * $FreeBSD: src/sys/vm/vm_pager.c,v 1.54.2.2 2001/11/18 07:11:00 dillon Exp $
- * $DragonFly: src/sys/vm/vm_pager.c,v 1.3 2003/06/19 01:55:08 dillon Exp $
+ * $DragonFly: src/sys/vm/vm_pager.c,v 1.4 2003/06/26 02:17:47 dillon Exp $
  */
 
 /*
@@ -552,11 +552,10 @@ getchainbuf(struct buf *bp, struct vnode *vp, int flags)
                waitchainbuf(bp, 4, 0);
 
        nbp->b_flags = B_CALL | (bp->b_flags & B_ORDERED) | flags;
-       nbp->b_rcred = nbp->b_wcred = proc0.p_ucred;
        nbp->b_iodone = vm_pager_chain_iodone;
 
-       crhold(nbp->b_rcred);
-       crhold(nbp->b_wcred);
+       nbp->b_rcred = crhold(proc0.p_ucred);
+       nbp->b_wcred = crhold(proc0.p_ucred);
 
        if (vp)
                pbgetvp(vp, nbp);
index 1b59cb6..52458f5 100644 (file)
@@ -39,7 +39,7 @@
  *
  *     from: @(#)vnode_pager.c 7.5 (Berkeley) 4/20/91
  * $FreeBSD: src/sys/vm/vnode_pager.c,v 1.116.2.7 2002/12/31 09:34:51 dillon Exp $
- * $DragonFly: src/sys/vm/vnode_pager.c,v 1.3 2003/06/25 03:56:13 dillon Exp $
+ * $DragonFly: src/sys/vm/vnode_pager.c,v 1.4 2003/06/26 02:17:47 dillon Exp $
  */
 
 /*
@@ -459,11 +459,8 @@ vnode_pager_input_smlfs(object, m)
                        /* build a minimal buffer header */
                        bp->b_flags = B_READ | B_CALL;
                        bp->b_iodone = vnode_pager_iodone;
-                       bp->b_rcred = bp->b_wcred = curproc->p_ucred;
-                       if (bp->b_rcred != NOCRED)
-                               crhold(bp->b_rcred);
-                       if (bp->b_wcred != NOCRED)
-                               crhold(bp->b_wcred);
+                       bp->b_rcred = crhold(curproc->p_ucred);
+                       bp->b_wcred = crhold(curproc->p_ucred);
                        bp->b_data = (caddr_t) kva + i * bsize;
                        bp->b_blkno = fileaddr;
                        pbgetvp(dp, bp);
@@ -780,11 +777,8 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage)
        bp->b_flags = B_READ | B_CALL;
        bp->b_iodone = vnode_pager_iodone;
        /* B_PHYS is not set, but it is nice to fill this in */
-       bp->b_rcred = bp->b_wcred = curproc->p_ucred;
-       if (bp->b_rcred != NOCRED)
-               crhold(bp->b_rcred);
-       if (bp->b_wcred != NOCRED)
-               crhold(bp->b_wcred);
+       bp->b_rcred = crhold(curproc->p_ucred);
+       bp->b_wcred = crhold(curproc->p_ucred);
        bp->b_blkno = firstaddr;
        pbgetvp(dp, bp);
        bp->b_bcount = size;