usr/src/uts/common/io/strsun.c
changeset 898 64b2a371a6bd
parent 741 40027a3621ac
child 8778 b4169d2ab299
equal deleted inserted replaced
897:8bc35ca89c2f 898:64b2a371a6bd
   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;