Changeset 7de65cd in mainline
- Timestamp:
- 2011-02-27T21:23:39Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 6a8d2659
- Parents:
- e2ad8e4
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified uspace/srv/fs/minixfs/mfs.c ¶
re2ad8e4 r7de65cd 60 60 fs_reg_t mfs_reg; 61 61 62 63 64 /** 65 * This connection fibril processes VFS requests from VFS. 66 * 67 * In order to support simultaneous VFS requests, our design is as follows. 68 * The connection fibril accepts VFS requests from VFS. If there is only one 69 * instance of the fibril, VFS will need to serialize all VFS requests it sends 70 * to FAT. To overcome this bottleneck, VFS can send FAT the IPC_M_CONNECT_ME_TO 71 * call. In that case, a new connection fibril will be created, which in turn 72 * will accept the call. Thus, a new phone will be opened for VFS. 73 * 74 * There are few issues with this arrangement. First, VFS can run out of 75 * available phones. In that case, VFS can close some other phones or use one 76 * phone for more serialized requests. Similarily, FAT can refuse to duplicate 77 * the connection. VFS should then just make use of already existing phones and 78 * route its requests through them. To avoid paying the fibril creation price 79 * upon each request, FAT might want to keep the connections open after the 80 * request has been completed. 81 */ 82 83 static void mfs_connection(ipc_callid_t iid, ipc_call_t *icall) 84 { 85 if (iid) { 86 /* 87 * This only happens for connections opened by 88 * IPC_M_CONNECT_ME_TO calls as opposed to callback connections 89 * created by IPC_M_CONNECT_TO_ME. 90 */ 91 async_answer_0(iid, EOK); 92 } 93 94 printf(NAME ": connection opened\n"); 95 while (1) { 96 ipc_callid_t callid; 97 ipc_call_t call; 98 99 callid = async_get_call(&call); 100 switch (IPC_GET_IMETHOD(call)) { 101 default: 102 case IPC_M_PHONE_HUNGUP: 103 return; 104 } 105 } 106 } 107 108 62 109 int main(int argc, char **argv) 63 110 { 111 int vfs_phone; 112 int rc; 113 64 114 printf(NAME ": HelenOS Minix file system server\n"); 115 116 vfs_phone = service_connect_blocking(SERVICE_VFS, 0, 0); 117 118 if (vfs_phone < EOK) { 119 printf(NAME ": failed to connect to VFS\n"); 120 return -1; 121 } 122 123 rc = fs_register(vfs_phone, &mfs_reg, &mfs_vfs_info, mfs_connection); 124 if (rc != EOK) 125 goto err; 126 65 127 return 0; 128 129 err: 130 printf(NAME ": Failed to register file system (%d)\n", rc); 131 return rc; 66 132 } 67 133
Note:
See TracChangeset
for help on using the changeset viewer.