|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT LWIP PATCH 3/7] Adapt lwip to new vfs changes
Update uio structure in sock_net_write/read. VFSCORE expects the
update of the resid member of uio to reflect the number of bytes
that remain unprocessed.
Set the UK_VFSCORE_NOPOS flag on the socket vfscore_file. This
flag informs VFSCORE to not update the offset of our socket file
since it doesn't make sense for sockets.
Signed-off-by: Mihai Pogonaru <pogonarumihai@xxxxxxxxx>
---
sockets.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/sockets.c b/sockets.c
index cbe3030..3040099 100644
--- a/sockets.c
+++ b/sockets.c
@@ -139,6 +139,7 @@ static int sock_fd_alloc(struct vnops *v_op, int sock_fd)
vfs_file->f_count = 1;
vfs_file->f_data = file;
vfs_file->f_dentry = s_dentry;
+ vfs_file->f_vfs_flags = UK_VFSCORE_NOPOS;
s_dentry->d_refcnt = 1;
s_dentry->d_vnode = s_vnode;
@@ -225,7 +226,7 @@ static int sock_net_close(struct vnode *s_vnode,
return ret;
}
-static ssize_t sock_net_write(struct vnode *s_vnode,
+static int sock_net_write(struct vnode *s_vnode,
struct uio *buf, int ioflag __unused)
{
int ret = 0;
@@ -237,10 +238,15 @@ static ssize_t sock_net_write(struct vnode *s_vnode,
file->vfscore_file->fd,
file->sock_fd));
ret = lwip_writev(file->sock_fd, buf->uio_iov, buf->uio_iovcnt);
- return ret;
+ /* lwip sets errno and returns -1 in case of error */
+ if (ret < 0)
+ return ret;
+
+ buf->uio_resid -= ret;
+ return 0;
}
-static ssize_t sock_net_read(struct vnode *s_vnode,
+static int sock_net_read(struct vnode *s_vnode,
struct vfscore_file *vfscore_file __unused,
struct uio *buf, int ioflag __unused)
{
@@ -253,7 +259,12 @@ static ssize_t sock_net_read(struct vnode *s_vnode,
file->vfscore_file->fd,
file->sock_fd));
ret = lwip_readv(file->sock_fd, buf->uio_iov, buf->uio_iovcnt);
- return ret;
+ /* lwip sets errno and returns -1 in case of error */
+ if (ret < 0)
+ return ret;
+
+ buf->uio_resid -= ret;
+ return 0;
}
#define sock_net_inactive ((vnop_inactive_t) vfscore_vop_nullop)
--
2.11.0
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |