MOS Source Code
Loading...
Searching...
No Matches
userfs_manager.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-3.0-or-later
2
5#include "mos/misc/setup.hpp"
9
10#include <librpc/rpc.h>
11#include <librpc/rpc_server.h>
12#include <mos/proto/fs_server.h>
13#include <mos_stdio.hpp>
14#include <pb_decode.h>
15#include <pb_encode.h>
16
17MOS_RPC_USERFS_MANAGER_SERVER(userfs_manager)
18
20{
22 if (!userfs)
24
25 linked_list_init(list_node(&userfs->fs));
26
27 userfs->fs.name = mos::string("userfs.") + req->fs.name;
28 userfs->rpc_server_name = req->rpc_server_name;
29
30 resp->result.success = true;
31
32 userfs->fs.mount = userfs_fsop_mount;
34 return RPC_RESULT_OK;
35}
36
37static void userfs_manager_server_exec(void *arg)
38{
39 MOS_UNUSED(arg);
41 rpc_server_register_functions(fs_server, userfs_manager_functions, MOS_ARRAY_SIZE(userfs_manager_functions));
42 rpc_server_exec(fs_server);
43 pr_emerg("fs_rpc_execute_server exited");
44}
45
47{
49}
50
#define USERFS_SERVER_RPC_NAME
Definition fs_server.h:5
MOSAPI void linked_list_init(list_node_t *head_node)
Initialise a circular double linked list.
Definition list.cpp:15
#define list_node(element)
Get the ‘list_node’ of a list element. This is exactly the reverse of ‘list_entry’ above.
Definition list.hpp:74
void vfs_register_filesystem(filesystem_t *fs)
Definition vfs.cpp:446
Thread * kthread_create(thread_entry_t entry, void *arg, const char *name)
Create a kernel-mode thread.
Definition kthread.cpp:37
#define MOS_ARRAY_SIZE(x)
Definition mos_global.h:84
#define MOS_UNUSED(x)
Definition mos_global.h:65
mos::basic_string< char, mos::default_allocator > string
Definition string.hpp:336
T * create(Args &&...args)
Definition allocator.hpp:10
#define NULL
Definition pb_syshdr.h:46
#define pr_emerg(fmt,...)
Definition printk.hpp:39
rpc_result_code_t
Definition rpc.h:25
@ RPC_RESULT_SERVER_INTERNAL_ERROR
Definition rpc.h:29
@ RPC_RESULT_OK
Definition rpc.h:26
MOSAPI rpc_server_t * rpc_server_create(const char *server_name, void *data)
Create a new RPC server.
MOSAPI bool rpc_server_register_functions(rpc_server_t *server, const rpc_function_info_t *functions, size_t count)
Register multiple functions with the server.
MOSAPI void rpc_server_exec(rpc_server_t *server)
Run the server, this function will not return until the server is destroyed.
#define MOS_INIT(_comp, _fn)
Definition setup.hpp:38
mos::string name
PtrResult< dentry_t >(* mount)(filesystem_t *fs, const char *dev_name, const char *mount_options)
mos::string rpc_server_name
The name of the RPC server.
Definition userfs.hpp:14
filesystem_t fs
The filesystem, "userfs.<name>".
Definition userfs.hpp:13
PtrResult< dentry_t > userfs_fsop_mount(filesystem_t *fs, const char *device, const char *options)
Definition userfs.cpp:555
static void userfs_manager_rpc_init()
static rpc_result_code_t userfs_manager_register_filesystem(rpc_context_t *, mosrpc_userfs_register_request *req, mosrpc_userfs_register_response *resp)
static void userfs_manager_server_exec(void *arg)