summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-10-11 23:38:17 +0000
committerjhb <jhb@FreeBSD.org>2001-10-11 23:38:17 +0000
commit4806d88677d2a333254f9fc33d4e119cc56bb002 (patch)
treed3ca87a8ac917d5003235cc737cd5f76591f7c1b /sys/vm
parent9f68054d87b5538c76f0b802ef8f7344eedd5647 (diff)
downloadFreeBSD-src-4806d88677d2a333254f9fc33d4e119cc56bb002.zip
FreeBSD-src-4806d88677d2a333254f9fc33d4e119cc56bb002.tar.gz
Change the kernel's ucred API as follows:
- crhold() returns a reference to the ucred whose refcount it bumps. - crcopy() now simply copies the credentials from one credential to another and has no return value. - a new crshared() primitive is added which returns true if a ucred's refcount is > 1 and false (0) otherwise.
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/swap_pager.c17
-rw-r--r--sys/vm/vnode_pager.c18
2 files changed, 14 insertions, 21 deletions
diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c
index e25a556..711a00f 100644
--- a/sys/vm/swap_pager.c
+++ b/sys/vm/swap_pager.c
@@ -1134,10 +1134,9 @@ swap_pager_getpages(object, m, count, reqpage)
bp->b_iocmd = BIO_READ;
bp->b_iodone = swp_pager_async_iodone;
- bp->b_rcred = bp->b_wcred = proc0.p_ucred;
+ bp->b_rcred = crhold(proc0.p_ucred);
+ bp->b_wcred = crhold(proc0.p_ucred);
bp->b_data = (caddr_t) kva;
- crhold(bp->b_rcred);
- crhold(bp->b_wcred);
bp->b_blkno = blk - (reqpage - i);
bp->b_bcount = PAGE_SIZE * (j - i);
bp->b_bufsize = PAGE_SIZE * (j - i);
@@ -1386,14 +1385,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_rcred = crhold(proc0.p_ucred);
+ bp->b_wcred = crhold(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);
-
pbgetvp(swapdev_vp, bp);
for (j = 0; j < n; ++j) {
@@ -2082,12 +2079,10 @@ getchainbuf(struct bio *bp, struct vnode *vp, int flags)
nbp->b_iocmd = bp->bio_cmd;
nbp->b_ioflags = bp->bio_flags & BIO_ORDERED;
nbp->b_flags = flags;
- nbp->b_rcred = nbp->b_wcred = proc0.p_ucred;
+ nbp->b_rcred = crhold(proc0.p_ucred);
+ nbp->b_wcred = crhold(proc0.p_ucred);
nbp->b_iodone = vm_pager_chain_iodone;
- crhold(nbp->b_rcred);
- crhold(nbp->b_wcred);
-
if (vp)
pbgetvp(vp, nbp);
return(nbp);
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c
index bad9bcf..97e7039 100644
--- a/sys/vm/vnode_pager.c
+++ b/sys/vm/vnode_pager.c
@@ -434,11 +434,10 @@ vnode_pager_input_smlfs(object, m)
/* build a minimal buffer header */
bp->b_iocmd = BIO_READ;
bp->b_iodone = vnode_pager_iodone;
- bp->b_rcred = bp->b_wcred = curthread->td_proc->p_ucred;
- if (bp->b_rcred != NOCRED)
- crhold(bp->b_rcred);
- if (bp->b_wcred != NOCRED)
- crhold(bp->b_wcred);
+ KASSERT(bp->b_rcred == NOCRED, ("leaking read ucred"));
+ KASSERT(bp->b_wcred == NOCRED, ("leaking write ucred"));
+ bp->b_rcred = crhold(curthread->td_proc->p_ucred);
+ bp->b_wcred = crhold(curthread->td_proc->p_ucred);
bp->b_data = (caddr_t) kva + i * bsize;
bp->b_blkno = fileaddr;
pbgetvp(dp, bp);
@@ -754,11 +753,10 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage)
bp->b_iocmd = BIO_READ;
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 = curthread->td_proc->p_ucred;
- if (bp->b_rcred != NOCRED)
- crhold(bp->b_rcred);
- if (bp->b_wcred != NOCRED)
- crhold(bp->b_wcred);
+ KASSERT(bp->b_rcred == NOCRED, ("leaking read ucred"));
+ KASSERT(bp->b_wcred == NOCRED, ("leaking write ucred"));
+ bp->b_rcred = crhold(curthread->td_proc->p_ucred);
+ bp->b_wcred = crhold(curthread->td_proc->p_ucred);
bp->b_blkno = firstaddr;
pbgetvp(dp, bp);
bp->b_bcount = size;
OpenPOWER on IntegriCloud