equal
deleted
inserted
replaced
251 mcopyinuio(struct stdata *stp, uio_t *uiop, ssize_t iosize, |
251 mcopyinuio(struct stdata *stp, uio_t *uiop, ssize_t iosize, |
252 ssize_t maxblk, int *errorp) |
252 ssize_t maxblk, int *errorp) |
253 { |
253 { |
254 mblk_t *head = NULL, **tail = &head; |
254 mblk_t *head = NULL, **tail = &head; |
255 size_t offset = stp->sd_wroff; |
255 size_t offset = stp->sd_wroff; |
|
256 size_t tail_len = stp->sd_tail; |
256 |
257 |
257 if (iosize == INFPSZ || iosize > uiop->uio_resid) |
258 if (iosize == INFPSZ || iosize > uiop->uio_resid) |
258 iosize = uiop->uio_resid; |
259 iosize = uiop->uio_resid; |
259 |
260 |
260 if (maxblk == INFPSZ) |
261 if (maxblk == INFPSZ) |
277 ssize_t blocksize; |
278 ssize_t blocksize; |
278 mblk_t *mp; |
279 mblk_t *mp; |
279 |
280 |
280 blocksize = MIN(iosize, maxblk); |
281 blocksize = MIN(iosize, maxblk); |
281 ASSERT(blocksize >= 0); |
282 ASSERT(blocksize >= 0); |
282 if ((mp = allocb_cred(offset + blocksize, CRED())) == NULL) { |
283 if ((mp = allocb_cred(offset + blocksize + tail_len, |
|
284 CRED())) == NULL) { |
283 *errorp = ENOMEM; |
285 *errorp = ENOMEM; |
284 return (head); |
286 return (head); |
285 } |
287 } |
286 mp->b_rptr += offset; |
288 mp->b_rptr += offset; |
287 mp->b_wptr = mp->b_rptr + blocksize; |
289 mp->b_wptr = mp->b_rptr + blocksize; |