* Use vfs_vnode_io() to schedule subrequests instead of calling the FS's
io() hook directly (it might not even have one). * Fixed incorrect check in synchronous_io() which would cause requests with more than one vec to finish early. Fixes bug #2558. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26751 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -210,7 +210,7 @@ do_iterative_fd_io_iterate(void* _cookie, io_request* request,
|
|||||||
if (error == B_OK) {
|
if (error == B_OK) {
|
||||||
TRACE_RIO("[%ld] scheduling subrequest: %p\n", find_thread(NULL),
|
TRACE_RIO("[%ld] scheduling subrequest: %p\n", find_thread(NULL),
|
||||||
subRequest);
|
subRequest);
|
||||||
error = FS_CALL(cookie->vnode, io, cookie->descriptor->cookie,
|
error = vfs_vnode_io(cookie->vnode, cookie->descriptor->cookie,
|
||||||
subRequest);
|
subRequest);
|
||||||
} else {
|
} else {
|
||||||
// Once scheduling a subrequest failed, we cancel all subsequent
|
// Once scheduling a subrequest failed, we cancel all subsequent
|
||||||
@@ -335,7 +335,7 @@ synchronous_io(io_request* request, DoIO& io)
|
|||||||
offset += transferred;
|
offset += transferred;
|
||||||
length -= transferred;
|
length -= transferred;
|
||||||
|
|
||||||
if (transferred != length)
|
if (transferred != vecLength)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user