summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/syscall/sendfile.c
diff options
context:
space:
mode:
authorpr14459 <none@none>2007-06-19 21:05:50 -0700
committerpr14459 <none@none>2007-06-19 21:05:50 -0700
commitbfb244bafad217a1871c5c203fc94f71751eb28c (patch)
treeb4c9e5eb7fd325e50b213f313a4b1587b475ac1c /usr/src/uts/common/syscall/sendfile.c
parent239e91abc172c1397b1e94869c5d0e8ab67bfc22 (diff)
downloadillumos-gate-bfb244bafad217a1871c5c203fc94f71751eb28c.tar.gz
6563145 assertion failed: pp->p_vnode == vp, file: ../../common/vm/seg_map.c, line: 727
Diffstat (limited to 'usr/src/uts/common/syscall/sendfile.c')
-rw-r--r--usr/src/uts/common/syscall/sendfile.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/usr/src/uts/common/syscall/sendfile.c b/usr/src/uts/common/syscall/sendfile.c
index 84a3b5cfc6..c9c14df59a 100644
--- a/usr/src/uts/common/syscall/sendfile.c
+++ b/usr/src/uts/common/syscall/sendfile.c
@@ -289,7 +289,7 @@ sendvec_chunk64(file_t *fp, u_offset_t *fileoff, struct ksendfilevec64 *sfv,
* locked; but since we got it from an open file the
* contents will be valid during the time of access.
*/
- if (VN_CMP(vp, readvp)) {
+ if (vn_compare(vp, readvp)) {
releasef(sfv->sfv_fd);
return (EINVAL);
}
@@ -637,7 +637,7 @@ sendvec_small_chunk(file_t *fp, u_offset_t *fileoff, struct sendfilevec *sfv,
* contents will be valid during the time of access.
*/
- if (VN_CMP(vp, readvp)) {
+ if (vn_compare(vp, readvp)) {
releasef(sfv->sfv_fd);
freemsg(head);
return (EINVAL);
@@ -903,6 +903,7 @@ sendvec_chunk(file_t *fp, u_offset_t *fileoff, struct sendfilevec *sfv,
int segmapit = 0;
file_t *ffp;
vnode_t *readvp;
+ struct vnode *realvp;
size_t size;
caddr_t ptr;
@@ -915,6 +916,8 @@ sendvec_chunk(file_t *fp, u_offset_t *fileoff, struct sendfilevec *sfv,
}
readvp = ffp->f_vnode;
+ if (VOP_REALVP(readvp, &realvp) == 0)
+ readvp = realvp;
if (readvp->v_type != VREG) {
releasef(sfv->sfv_fd);
return (EINVAL);
@@ -926,7 +929,7 @@ sendvec_chunk(file_t *fp, u_offset_t *fileoff, struct sendfilevec *sfv,
* locked; but since we got it from an open file the
* contents will be valid during the time of access.
*/
- if (VN_CMP(vp, readvp)) {
+ if (vn_compare(vp, readvp)) {
releasef(sfv->sfv_fd);
return (EINVAL);
}