|
|
| version 1.20, 2004/05/11 18:05:05 | version 1.21, 2004/05/11 22:48:53 |
|---|---|
| Line 635 pipe_build_write_buffer(wpipe, uio) | Line 635 pipe_build_write_buffer(wpipe, uio) |
| size = (u_int) uio->uio_iov->iov_len; | size = (u_int) uio->uio_iov->iov_len; |
| if (size > wpipe->pipe_buffer.size) | if (size > wpipe->pipe_buffer.size) |
| size = wpipe->pipe_buffer.size; | size = wpipe->pipe_buffer.size; |
| if (size > XIO_INTERNAL_SIZE) | |
| size = XIO_INTERNAL_SIZE; | |
| error = xio_init_ubuf(&wpipe->pipe_map, uio->uio_iov->iov_base, | error = xio_init_ubuf(&wpipe->pipe_map, uio->uio_iov->iov_base, |
| size, XIOF_READ); | size, XIOF_READ); |
| Line 652 pipe_build_write_buffer(wpipe, uio) | Line 650 pipe_build_write_buffer(wpipe, uio) |
| case PIPE_SFBUF2: | case PIPE_SFBUF2: |
| if (wpipe->pipe_kva == NULL) { | if (wpipe->pipe_kva == NULL) { |
| wpipe->pipe_kva = | wpipe->pipe_kva = |
| kmem_alloc_pageable(kernel_map, XIO_INTERNAL_SIZE); | kmem_alloc_nofault(kernel_map, XIO_INTERNAL_SIZE); |
| wpipe->pipe_kvamask = 0; | wpipe->pipe_kvamask = 0; |
| } | } |
| if (wpipe->pipe_feature == PIPE_KMEM) { | if (wpipe->pipe_feature == PIPE_KMEM) { |
| Line 665 pipe_build_write_buffer(wpipe, uio) | Line 663 pipe_build_write_buffer(wpipe, uio) |
| } | } |
| /* | /* |
| * and update the uio data | * And update the uio data. The XIO might have loaded fewer bytes |
| * then requested so reload 'size'. | |
| */ | */ |
| size = wpipe->pipe_map.xio_bytes; | |
| uio->uio_iov->iov_len -= size; | uio->uio_iov->iov_len -= size; |
| uio->uio_iov->iov_base += size; | uio->uio_iov->iov_base += size; |
| if (uio->uio_iov->iov_len == 0) | if (uio->uio_iov->iov_len == 0) |