|
|
| 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; |
| Line 1617 retry_lookup: | Line 1617 retry_lookup: |
| 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. |
| Line 1687 retry_space: | Line 1689 retry_space: |
| } | } |
| } | } |
| 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; |
| } | } |