@(#)letter.update 1.1 (Berkeley) 02/27/91
.so HEADERS .HE
.so HEADERS .HE
February 27, 1991
Dear Colleague:Enclosed are several important changes that should be applied to your 4.3BSD-Reno kernel.
Sincerely yours,
Computer Systems Research Group
*** /sys/kern/kern_fork.c.old Wed Feb 27 14:20:05 1991 --- /sys/kern/kern_fork.c.new Wed Feb 27 14:20:12 1991 *************** *** 182,188 **** --- 182,190 ---- bcopy(rip->p_logname, rpp->p_logname, MAXLOGNAME); rpp->p_uid = rip->p_uid; rpp->p_ruid = rip->p_ruid; + rpp->p_svuid = rip->p_svuid; rpp->p_rgid = rip->p_rgid; + rpp->p_svgid = rip->p_svgid; rpp->p_pgrp = rip->p_pgrp; rpp->p_pgrpnxt = rip->p_pgrpnxt; rip->p_pgrpnxt = rpp; .bp *** /sys/kern/kern_malloc.c.old Wed Feb 27 14:32:33 1991 --- /sys/kern/kern_malloc.c.new Wed Feb 27 14:32:37 1991 *************** *** 48,54 **** register struct kmemusage *kup; long indx, npg, alloc, allocsize; int s; ! caddr_t va, cp; #ifdef KMEMSTATS register struct kmemstats *ksp = &kmemstats[type]; --- 48,54 ---- register struct kmemusage *kup; long indx, npg, alloc, allocsize; int s; ! caddr_t va, cp, savedlist; #ifdef KMEMSTATS register struct kmemstats *ksp = &kmemstats[type]; *************** *** 100,109 **** kup->ku_freecnt = kbp->kb_elmpercl; kbp->kb_totalfree += kbp->kb_elmpercl; #endif kbp->kb_next = va + (npg * NBPG) - allocsize; for (cp = kbp->kb_next; cp > va; cp -= allocsize) *(caddr_t *)cp = cp - allocsize; ! *(caddr_t *)cp = NULL; } va = kbp->kb_next; kbp->kb_next = *(caddr_t *)va; --- 100,115 ---- kup->ku_freecnt = kbp->kb_elmpercl; kbp->kb_totalfree += kbp->kb_elmpercl; #endif + /* + * Just in case we blocked while allocating memory, + * and someone else also allocated memory for this + * bucket, don't assume the list is still empty. + */ + savedlist = kbp->kb_next; kbp->kb_next = va + (npg * NBPG) - allocsize; for (cp = kbp->kb_next; cp > va; cp -= allocsize) *(caddr_t *)cp = cp - allocsize; ! *(caddr_t *)cp = savedlist; } va = kbp->kb_next; kbp->kb_next = *(caddr_t *)va; .bp *** /sys/nfs/nfs_vnops.c.old Wed Feb 27 14:35:50 1991 --- /sys/nfs/nfs_vnops.c.new Wed Feb 27 14:35:58 1991 *************** *** 1508,1527 **** /* * Set b_proc. It seems a bit silly to do it here, but since bread() * doesn't set it, I will. ! * Set b_proc == NULL for asynchronous reads, since these may still * be hanging about after the process terminates. */ ! if ((bp->b_flags & (B_READ | B_ASYNC)) == (B_READ | B_ASYNC)) bp->b_proc = (struct proc *)0; else bp->b_proc = u.u_procp; /* ! * If an i/o daemon is waiting * queue the request, wake it up and wait for completion ! * otherwise just do it ourselves */ ! for (i = 0; i < nfs_asyncdaemons; i++) { if (rp = nfs_iodwant[i]) { /* * Ensure that the async_daemon is still waiting here --- 1508,1528 ---- /* * Set b_proc. It seems a bit silly to do it here, but since bread() * doesn't set it, I will. ! * Set b_proc == NULL for asynchronous ops, since these may still * be hanging about after the process terminates. */ ! if (bp->b_flags & B_ASYNC) bp->b_proc = (struct proc *)0; else bp->b_proc = u.u_procp; /* ! * If the op is asynchronous and an i/o daemon is waiting * queue the request, wake it up and wait for completion ! * otherwise just do it ourselves. */ ! if (bp->b_proc == (struct proc *)NULL) ! for (i = 0; i < nfs_asyncdaemons; i++) { if (rp = nfs_iodwant[i]) { /* * Ensure that the async_daemon is still waiting here