Changeset 00c2de63 in mainline for uspace/srv/fs/fat/fat.c
- Timestamp:
- 2011-07-29T14:50:22Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- b6759f4
- Parents:
- 6c69d19 (diff), 7ae249d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/fat/fat.c
r6c69d19 r00c2de63 56 56 }; 57 57 58 fs_reg_t fat_reg;59 60 /**61 * This connection fibril processes VFS requests from VFS.62 *63 * In order to support simultaneous VFS requests, our design is as follows.64 * The connection fibril accepts VFS requests from VFS. If there is only one65 * instance of the fibril, VFS will need to serialize all VFS requests it sends66 * to FAT. To overcome this bottleneck, VFS can send FAT the IPC_M_CONNECT_ME_TO67 * call. In that case, a new connection fibril will be created, which in turn68 * will accept the call. Thus, a new phone will be opened for VFS.69 *70 * There are few issues with this arrangement. First, VFS can run out of71 * available phones. In that case, VFS can close some other phones or use one72 * phone for more serialized requests. Similarily, FAT can refuse to duplicate73 * the connection. VFS should then just make use of already existing phones and74 * route its requests through them. To avoid paying the fibril creation price75 * upon each request, FAT might want to keep the connections open after the76 * request has been completed.77 */78 static void fat_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)79 {80 if (iid) {81 /*82 * This only happens for connections opened by83 * IPC_M_CONNECT_ME_TO calls as opposed to callback connections84 * created by IPC_M_CONNECT_TO_ME.85 */86 async_answer_0(iid, EOK);87 }88 89 dprintf(NAME ": connection opened\n");90 91 while (true) {92 ipc_call_t call;93 ipc_callid_t callid = async_get_call(&call);94 95 if (!IPC_GET_IMETHOD(call))96 return;97 98 switch (IPC_GET_IMETHOD(call)) {99 case VFS_OUT_MOUNTED:100 fat_mounted(callid, &call);101 break;102 case VFS_OUT_MOUNT:103 fat_mount(callid, &call);104 break;105 case VFS_OUT_UNMOUNTED:106 fat_unmounted(callid, &call);107 break;108 case VFS_OUT_UNMOUNT:109 fat_unmount(callid, &call);110 break;111 case VFS_OUT_LOOKUP:112 fat_lookup(callid, &call);113 break;114 case VFS_OUT_READ:115 fat_read(callid, &call);116 break;117 case VFS_OUT_WRITE:118 fat_write(callid, &call);119 break;120 case VFS_OUT_TRUNCATE:121 fat_truncate(callid, &call);122 break;123 case VFS_OUT_STAT:124 fat_stat(callid, &call);125 break;126 case VFS_OUT_CLOSE:127 fat_close(callid, &call);128 break;129 case VFS_OUT_DESTROY:130 fat_destroy(callid, &call);131 break;132 case VFS_OUT_OPEN_NODE:133 fat_open_node(callid, &call);134 break;135 case VFS_OUT_SYNC:136 fat_sync(callid, &call);137 break;138 default:139 async_answer_0(callid, ENOTSUP);140 break;141 }142 }143 }144 145 58 int main(int argc, char **argv) 146 59 { … … 158 71 } 159 72 160 rc = fs_register(vfs_sess, &fat_ reg, &fat_vfs_info, fat_connection);73 rc = fs_register(vfs_sess, &fat_vfs_info, &fat_ops, &fat_libfs_ops); 161 74 if (rc != EOK) { 162 75 fat_idx_fini();
Note:
See TracChangeset
for help on using the changeset viewer.