Rev 2787 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2787 | Rev 4377 | ||
---|---|---|---|
Line 26... | Line 26... | ||
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | */ |
27 | */ |
28 | 28 | ||
29 | /** @addtogroup fs |
29 | /** @addtogroup fs |
30 | * @{ |
30 | * @{ |
31 | */ |
31 | */ |
32 | 32 | ||
33 | /** |
33 | /** |
34 | * @file vfs_register.c |
34 | * @file vfs_register.c |
35 | * @brief |
35 | * @brief |
36 | */ |
36 | */ |
37 | 37 | ||
38 | #include <ipc/ipc.h> |
38 | #include <ipc/ipc.h> |
39 | #include <ipc/services.h> |
39 | #include <ipc/services.h> |
Line 96... | Line 96... | ||
96 | if (info->name[i] != '\0') { |
96 | if (info->name[i] != '\0') { |
97 | dprintf("The name is not properly NULL-terminated.\n"); |
97 | dprintf("The name is not properly NULL-terminated.\n"); |
98 | return false; |
98 | return false; |
99 | } |
99 | } |
100 | 100 | ||
101 | - | ||
102 | /* |
- | |
103 | * Check if the FS implements mandatory VFS operations. |
- | |
104 | */ |
- | |
105 | if (info->ops[IPC_METHOD_TO_VFS_OP(VFS_LOOKUP)] != VFS_OP_DEFINED) { |
- | |
106 | dprintf("Operation VFS_LOOKUP not defined by the client.\n"); |
- | |
107 | return false; |
- | |
108 | } |
- | |
109 | if (info->ops[IPC_METHOD_TO_VFS_OP(VFS_READ)] != VFS_OP_DEFINED) { |
- | |
110 | dprintf("Operation VFS_READ not defined by the client.\n"); |
- | |
111 | return false; |
- | |
112 | } |
- | |
113 | - | ||
114 | /* |
- | |
115 | * Check if each operation is either not defined, defined or default. |
- | |
116 | */ |
- | |
117 | for (i = VFS_FIRST; i < VFS_LAST_CLNT; i++) { |
- | |
118 | if ((info->ops[IPC_METHOD_TO_VFS_OP(i)] != VFS_OP_NULL) && |
- | |
119 | (info->ops[IPC_METHOD_TO_VFS_OP(i)] != VFS_OP_DEFAULT) && |
- | |
120 | (info->ops[IPC_METHOD_TO_VFS_OP(i)] != VFS_OP_DEFINED)) { |
- | |
121 | dprintf("Operation info not understood.\n"); |
- | |
122 | return false; |
- | |
123 | } |
- | |
124 | } |
- | |
125 | return true; |
101 | return true; |
126 | } |
102 | } |
127 | 103 | ||
128 | /** VFS_REGISTER protocol function. |
104 | /** VFS_REGISTER protocol function. |
129 | * |
105 | * |
Line 300... | Line 276... | ||
300 | fibril_dec_sercount(); |
276 | fibril_dec_sercount(); |
301 | futex_up(&fs_head_futex); |
277 | futex_up(&fs_head_futex); |
302 | 278 | ||
303 | dprintf("\"%.*s\" filesystem successfully registered, handle=%d.\n", |
279 | dprintf("\"%.*s\" filesystem successfully registered, handle=%d.\n", |
304 | FS_NAME_MAXLEN, fs_info->vfs_info.name, fs_info->fs_handle); |
280 | FS_NAME_MAXLEN, fs_info->vfs_info.name, fs_info->fs_handle); |
- | 281 | ||
- | 282 | /* Process pending mount requests possibly waiting |
|
- | 283 | * for this filesystem implementation. |
|
- | 284 | */ |
|
- | 285 | vfs_process_pending_mount(); |
|
305 | } |
286 | } |
306 | 287 | ||
307 | /** For a given file system handle, implement policy for allocating a phone. |
288 | /** For a given file system handle, implement policy for allocating a phone. |
308 | * |
289 | * |
309 | * @param handle File system handle. |
290 | * @param handle File system handle. |
Line 393... | Line 374... | ||
393 | if (lock) |
374 | if (lock) |
394 | futex_down(&fs_head_futex); |
375 | futex_down(&fs_head_futex); |
395 | link_t *cur; |
376 | link_t *cur; |
396 | for (cur = fs_head.next; cur != &fs_head; cur = cur->next) { |
377 | for (cur = fs_head.next; cur != &fs_head; cur = cur->next) { |
397 | fs_info_t *fs = list_get_instance(cur, fs_info_t, fs_link); |
378 | fs_info_t *fs = list_get_instance(cur, fs_info_t, fs_link); |
398 | if (strncmp(fs->vfs_info.name, name, |
379 | if (str_cmp(fs->vfs_info.name, name) == 0) { |
399 | sizeof(fs->vfs_info.name)) == 0) { |
- | |
400 | handle = fs->fs_handle; |
380 | handle = fs->fs_handle; |
401 | break; |
381 | break; |
402 | } |
382 | } |
403 | } |
383 | } |
404 | if (lock) |
384 | if (lock) |