summaryrefslogtreecommitdiff
path: root/sys/kern/kern_filedesc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_filedesc.c')
-rw-r--r--sys/kern/kern_filedesc.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/kern/kern_filedesc.c b/sys/kern/kern_filedesc.c
index 80ab094..63ffa98 100644
--- a/sys/kern/kern_filedesc.c
+++ b/sys/kern/kern_filedesc.c
@@ -29,6 +29,7 @@
#include <sys/filedesc.h>
#include <sys/proc.h>
+#include <sys/sio.h>
#include <sys/sched.h>
#include <sys/errno.h>
#include <sys/system.h>
@@ -90,8 +91,9 @@ make_write_buf(struct proc *td, const void *data, char **buf_out, size_t count)
* Helper function for write()
*/
static ssize_t
-do_write(struct vnode *vp, const char *buf, size_t count)
+do_write(struct vnode *vp, char *buf, size_t count)
{
+ struct sio_txn sio = { .buf = buf, .len = count };
struct vops *vops = vp->vops;
int status;
@@ -103,7 +105,7 @@ do_write(struct vnode *vp, const char *buf, size_t count)
}
/* Attempt a write */
- if ((status = vops->write(vp, buf, count)) < 0) {
+ if ((status = vops->write(vp, &sio)) < 0) {
return status;
}
@@ -313,8 +315,14 @@ read(int fd, void *buf, size_t count)
ssize_t bytes_read;
struct vnode *vnode;
struct filedesc *fd_desc;
+ struct sio_txn sio = {
+ .buf = buf,
+ .len = count,
+ .type = SIO_NONE
+ };
fd_desc = fd_from_fdnum(this_td(), fd);
+ sio.offset = fd_desc->offset;
if (fd_desc == NULL) {
return -EBADF;
@@ -326,7 +334,7 @@ read(int fd, void *buf, size_t count)
return -EINVAL;
}
- bytes_read = vfs_read(vnode, buf, count);
+ bytes_read = vfs_read(vnode, &sio);
return bytes_read;
}