| version 1.33, 2004/04/23 10:21:07 |
version 1.34, 2004/05/09 00:32:41 |
| Line 1387 sendfile(struct sendfile_args *uap) |
|
| Line 1387 sendfile(struct sendfile_args *uap) |
|
| &sbytes, uap->flags); |
&sbytes, uap->flags); |
| if (error) |
if (error) |
| goto done; |
goto done; |
| hdtr_size += hbytes; /* account for header bytes successfully sent */ |
|
| |
|
| /* |
/* |
| * Send trailers. Wimp out and use writev(2). |
* Send trailers. Wimp out and use writev(2). |
| Line 1435 kern_sendfile(struct vnode *vp, int s, o |
|
| Line 1434 kern_sendfile(struct vnode *vp, int s, o |
|
| struct sf_buf *sf; |
struct sf_buf *sf; |
| struct vm_page *pg; |
struct vm_page *pg; |
| off_t off, xfsize; |
off_t off, xfsize; |
| |
off_t hbytes = 0; |
| int error = 0; |
int error = 0; |
| |
|
| if (vp->v_type != VREG || VOP_GETVOBJECT(vp, &obj) != 0) { |
if (vp->v_type != VREG || VOP_GETVOBJECT(vp, &obj) != 0) { |
| Line 1470 kern_sendfile(struct vnode *vp, int s, o |
|
| Line 1470 kern_sendfile(struct vnode *vp, int s, o |
|
| * into an sf_buf, attach an mbuf header to the sf_buf, and queue |
* into an sf_buf, attach an mbuf header to the sf_buf, and queue |
| * it on the socket. |
* it on the socket. |
| */ |
*/ |
| for (off = offset; ; off += xfsize, *sbytes += xfsize) { |
for (off = offset; ; off += xfsize, *sbytes += xfsize + hbytes) { |
| vm_pindex_t pindex; |
vm_pindex_t pindex; |
| vm_offset_t pgoff; |
vm_offset_t pgoff; |
| |
|
|
|
| m->m_flags |= M_EXT; |
m->m_flags |= M_EXT; |
| m->m_pkthdr.len = m->m_len = xfsize; |
m->m_pkthdr.len = m->m_len = xfsize; |
| |
|
| if (mheader) { |
if (mheader != NULL) { |
| |
hbytes = mheader->m_pkthdr.len; |
| mheader->m_pkthdr.len += m->m_pkthdr.len; |
mheader->m_pkthdr.len += m->m_pkthdr.len; |
| m_cat(mheader, m); |
m_cat(mheader, m); |
| m = mheader; |
m = mheader; |
| mheader = NULL; |
mheader = NULL; |
| } |
} else |
| |
hbytes = 0; |
| |
|
| /* |
/* |
| * Add the buffer to the socket buffer chain. |
* Add the buffer to the socket buffer chain. |
|
|
| } |
} |
| } |
} |
| if (mheader != NULL) { |
if (mheader != NULL) { |
| |
*sbytes += mheader->m_pkthdr.len; |
| error = so_pru_send(so, 0, mheader, NULL, NULL, td); |
error = so_pru_send(so, 0, mheader, NULL, NULL, td); |
| mheader = NULL; |
mheader = NULL; |
| } |
} |