- cp = m_clalloc(2 * ncl, MPG_SPACE);
- if (cp == 0)
- return (0);
- ifu->ifu_hlen = hlen;
- ifu->ifu_uban = uban;
- ifu->ifu_uba = uba_hd[uban].uh_uba;
- ifu->ifu_r.ifrw_addr = cp + CLBYTES - hlen;
- ifu->ifu_w.ifrw_addr = ifu->ifu_r.ifrw_addr + ncl * CLBYTES;
+ if (ifu->ifu_r.ifrw_addr)
+ cp = ifu->ifu_r.ifrw_addr - (CLBYTES - hlen);
+ else {
+ cp = m_clalloc(2 * ncl, MPG_SPACE);
+ if (cp == 0)
+ return (0);
+ ifu->ifu_r.ifrw_addr = cp + CLBYTES - hlen;
+ ifu->ifu_w.ifrw_addr = ifu->ifu_r.ifrw_addr + ncl * CLBYTES;
+ ifu->ifu_hlen = hlen;
+ ifu->ifu_uban = uban;
+ ifu->ifu_uba = uba_hd[uban].uh_uba;
+ }