[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 2/3] libnetfs: Implement RPC: io_map
From: |
Joan Lledó |
Subject: |
[PATCH 2/3] libnetfs: Implement RPC: io_map |
Date: |
Sun, 12 Dec 2021 14:08:16 +0100 |
From: Marcus Brinkmann <marcus@gnu.org>
* libnetfs/iostubs.c: implement io_map
---
libnetfs/iostubs.c | 46 +++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 43 insertions(+), 3 deletions(-)
diff --git a/libnetfs/iostubs.c b/libnetfs/iostubs.c
index a5ff4504..df48f8b7 100644
--- a/libnetfs/iostubs.c
+++ b/libnetfs/iostubs.c
@@ -1,4 +1,4 @@
-/*
+/*
Copyright (C) 1995 Free Software Foundation, Inc.
Written by Michael I. Bushnell, p/BSG.
@@ -23,11 +23,51 @@
#include "io_S.h"
error_t __attribute__((weak))
-netfs_S_io_map (struct protid *user,
+netfs_S_io_map (struct protid *user,
mach_port_t *rdobj, mach_msg_type_name_t *rdobjtype,
mach_port_t *wrobj, mach_msg_type_name_t *wrobjtype)
{
- return EOPNOTSUPP;
+ int flags;
+ struct node *node;
+
+ if (!user)
+ return EOPNOTSUPP;
+
+ *wrobj = *rdobj = MACH_PORT_NULL;
+
+ node = user->po->np;
+ flags = user->po->openstat & (O_READ | O_WRITE);
+
+ pthread_mutex_lock (&node->lock);
+ switch (flags)
+ {
+ case O_READ | O_WRITE:
+ *wrobj = *rdobj = netfs_get_filemap (node, VM_PROT_READ |VM_PROT_WRITE);
+ if (*wrobj == MACH_PORT_NULL)
+ goto error;
+ mach_port_mod_refs (mach_task_self (), *rdobj, MACH_PORT_RIGHT_SEND, 1);
+ break;
+ case O_READ:
+ *rdobj = netfs_get_filemap (node, VM_PROT_READ);
+ if (*rdobj == MACH_PORT_NULL)
+ goto error;
+ break;
+ case O_WRITE:
+ *wrobj = netfs_get_filemap (node, VM_PROT_WRITE);
+ if (*wrobj == MACH_PORT_NULL)
+ goto error;
+ break;
+ }
+ pthread_mutex_unlock (&node->lock);
+
+ *rdobjtype = MACH_MSG_TYPE_MOVE_SEND;
+ *wrobjtype = MACH_MSG_TYPE_MOVE_SEND;
+
+ return 0;
+
+error:
+ pthread_mutex_unlock (&node->lock);
+ return errno;
}
error_t __attribute__((weak))
--
2.31.1
- [PATCH 1/3] libnetfs: new user callback: netfs_get_filemap(), (continued)
- [PATCH 1/3] libnetfs: new user callback: netfs_get_filemap(), Joan Lledó, 2021/12/12
- Re: [PATCH 1/3] libnetfs: new user callback: netfs_get_filemap(), Samuel Thibault, 2021/12/12
- Re: [PATCH 1/3] libnetfs: new user callback: netfs_get_filemap(), Joan Lledó, 2021/12/19
- [PATCH 1/3] libnetfs: new user callback: netfs_get_filemap(), Joan Lledó, 2021/12/19
- Re: [PATCH 1/3] libnetfs: new user callback: netfs_get_filemap(), Samuel Thibault, 2021/12/19
- Re: [PATCH 1/3] libnetfs: new user callback: netfs_get_filemap(), Joan Lledó, 2021/12/24
- Re: [PATCH 1/3] libnetfs: new user callback: netfs_get_filemap(), Samuel Thibault, 2021/12/25
- [PATCH 1/3] libnetfs: new user callback: netfs_get_filemap(), Joan Lledó, 2021/12/24
- [PATCH 3/3] pci-arbiter: Implement memory mapping over region files, Joan Lledó, 2021/12/19
- [PATCH 2/3] libnetfs: Implement RPC: io_map, Joan Lledó, 2021/12/19
[PATCH 2/3] libnetfs: Implement RPC: io_map,
Joan Lledó <=
[PATCH 3/3] pci-arbiter: Implement memory mapping over region files, Joan Lledó, 2021/12/12