From 9d28bdebf28f43c3a863848756fd3058d413ed71 Mon Sep 17 00:00:00 2001 From: Xavi Hernandez Date: Tue, 13 Jan 2026 12:05:20 +0100 Subject: [PATCH] libcephfs_proxy: make configurable settings available everywhere Signed-off-by: Xavi Hernandez --- src/libcephfs_proxy/libcephfsd.c | 20 +++++++++++++------- src/libcephfs_proxy/proxy.h | 10 +++++++++- src/libcephfs_proxy/proxy_link.c | 7 +++++-- src/libcephfs_proxy/proxy_link.h | 2 +- src/libcephfs_proxy/proxy_mount.c | 8 +++++--- src/libcephfs_proxy/proxy_mount.h | 4 +++- 6 files changed, 36 insertions(+), 15 deletions(-) diff --git a/src/libcephfs_proxy/libcephfsd.c b/src/libcephfs_proxy/libcephfsd.c index b920856cb885..bbb5700d21ff 100644 --- a/src/libcephfs_proxy/libcephfsd.c +++ b/src/libcephfs_proxy/libcephfsd.c @@ -23,6 +23,7 @@ typedef struct _proxy_server { proxy_link_t link; proxy_manager_t *manager; + proxy_settings_t *settings; } proxy_server_t; typedef struct _proxy_client { @@ -30,6 +31,7 @@ typedef struct _proxy_client { proxy_link_negotiate_t neg; proxy_async_t async; proxy_link_t *link; + proxy_settings_t *settings; proxy_random_t random; void *buffer; uint32_t buffer_size; @@ -39,7 +41,7 @@ typedef struct _proxy_client { typedef struct _proxy { proxy_manager_t manager; proxy_log_handler_t log_handler; - const char *socket_path; + proxy_settings_t settings; } proxy_t; typedef int32_t (*proxy_handler_t)(proxy_client_t *, proxy_req_t *, @@ -184,7 +186,7 @@ static int32_t libcephfsd_create(proxy_client_t *client, proxy_req_t *req, id = CEPH_STR_GET(req->create, id, data); - err = proxy_mount_create(&mount, id); + err = proxy_mount_create(&mount, client->settings, id); TRACE("ceph_create(%p, '%s') -> %d", mount, id, err); if (err >= 0) { @@ -2168,7 +2170,8 @@ static void destroy_connection(proxy_worker_t *worker) proxy_free(client); } -static int32_t accept_connection(proxy_link_t *link, int32_t sd) +static int32_t accept_connection(proxy_link_t *link, proxy_settings_t *settings, + int32_t sd) { proxy_server_t *server; proxy_client_t *client; @@ -2182,6 +2185,8 @@ static int32_t accept_connection(proxy_link_t *link, int32_t sd) goto failed_close; } + client->settings = settings; + client->buffer_size = 65536; client->buffer = proxy_malloc(client->buffer_size); if (client->buffer == NULL) { @@ -2232,8 +2237,9 @@ static int32_t server_start(proxy_manager_t *manager) proxy = container_of(manager, proxy_t, manager); server.manager = manager; + server.settings = &proxy->settings; - return proxy_link_server(&server.link, proxy->socket_path, + return proxy_link_server(&server.link, &proxy->settings, accept_connection, check_stop); } @@ -2306,16 +2312,16 @@ int32_t main(int32_t argc, char *argv[]) proxy_log_register(&proxy.log_handler, log_print); - proxy.socket_path = PROXY_SOCKET; + proxy.settings.socket_path = PROXY_SOCKET; env = getenv(PROXY_SOCKET_ENV); if (env != NULL) { - proxy.socket_path = env; + proxy.settings.socket_path = env; } while ((val = getopt_long(argc, argv, ":s:", main_opts, NULL)) >= 0) { if (val == 's') { - proxy.socket_path = optarg; + proxy.settings.socket_path = optarg; } else if (val == ':') { proxy_log(LOG_ERR, ENODATA, "Argument missing for '%s'\n", optopt); diff --git a/src/libcephfs_proxy/proxy.h b/src/libcephfs_proxy/proxy.h index 6cbfe2a98b9c..f5a409625f22 100644 --- a/src/libcephfs_proxy/proxy.h +++ b/src/libcephfs_proxy/proxy.h @@ -45,6 +45,9 @@ enum { struct _list; typedef struct _list list_t; +struct _proxy_settings; +typedef struct _proxy_settings proxy_settings_t; + struct _proxy_buffer_ops; typedef struct _proxy_buffer_ops proxy_buffer_ops_t; @@ -83,7 +86,8 @@ typedef void (*proxy_worker_destroy_t)(proxy_worker_t *); typedef int32_t (*proxy_manager_start_t)(proxy_manager_t *); -typedef int32_t (*proxy_link_start_t)(proxy_link_t *, int32_t); +typedef int32_t (*proxy_link_start_t)(proxy_link_t *, proxy_settings_t *, + int32_t); typedef bool (*proxy_link_stop_t)(proxy_link_t *); struct _list { @@ -91,4 +95,8 @@ struct _list { list_t *prev; }; +struct _proxy_settings { + const char *socket_path; +}; + #endif diff --git a/src/libcephfs_proxy/proxy_link.c b/src/libcephfs_proxy/proxy_link.c index be7c987df2cb..7582822268ed 100644 --- a/src/libcephfs_proxy/proxy_link.c +++ b/src/libcephfs_proxy/proxy_link.c @@ -678,16 +678,19 @@ void proxy_link_close(proxy_link_t *link) link->sd = -1; } -int32_t proxy_link_server(proxy_link_t *link, const char *path, +int32_t proxy_link_server(proxy_link_t *link, proxy_settings_t *settings, proxy_link_start_t start, proxy_link_stop_t stop) { struct sockaddr_un addr; + const char *path; socklen_t len; int32_t cd, err; link->stop = stop; link->sd = -1; + path = settings->socket_path; + err = proxy_link_prepare(&addr, path); if (err < 0) { return err; @@ -720,7 +723,7 @@ int32_t proxy_link_server(proxy_link_t *link, const char *path, "Failed to accept a connection"); } } else { - start(link, cd); + start(link, settings, cd); } } diff --git a/src/libcephfs_proxy/proxy_link.h b/src/libcephfs_proxy/proxy_link.h index 2dd851c7f157..ee2fffe6a2d1 100644 --- a/src/libcephfs_proxy/proxy_link.h +++ b/src/libcephfs_proxy/proxy_link.h @@ -120,7 +120,7 @@ int32_t proxy_link_client(proxy_link_t *link, const char *path, void proxy_link_close(proxy_link_t *link); -int32_t proxy_link_server(proxy_link_t *link, const char *path, +int32_t proxy_link_server(proxy_link_t *link, proxy_settings_t *settings, proxy_link_start_t start, proxy_link_stop_t stop); int32_t proxy_link_send(int32_t sd, struct iovec *iov, int32_t count); diff --git a/src/libcephfs_proxy/proxy_mount.c b/src/libcephfs_proxy/proxy_mount.c index 1943736e7f12..a29d2a1fdda7 100644 --- a/src/libcephfs_proxy/proxy_mount.c +++ b/src/libcephfs_proxy/proxy_mount.c @@ -770,7 +770,7 @@ static void proxy_instance_destroy(proxy_instance_t *instance) /* Create a new Ceph client instance with the provided id */ static int32_t proxy_instance_create(proxy_instance_t **pinstance, - const char *id) + proxy_settings_t *settings, const char *id) { struct ceph_mount_info *cmount; proxy_instance_t *instance; @@ -783,6 +783,7 @@ static int32_t proxy_instance_create(proxy_instance_t **pinstance, list_init(&instance->siblings); list_init(&instance->changes); + instance->settings = settings; instance->cmount = NULL; instance->inited = false; instance->mounted = false; @@ -1099,7 +1100,8 @@ static int32_t proxy_instance_unmount(proxy_instance_t **pinstance) return 0; } -int32_t proxy_mount_create(proxy_mount_t **pmount, const char *id) +int32_t proxy_mount_create(proxy_mount_t **pmount, proxy_settings_t *settings, + const char *id) { proxy_mount_t *mount; int32_t err; @@ -1110,7 +1112,7 @@ int32_t proxy_mount_create(proxy_mount_t **pmount, const char *id) } mount->root = NULL; - err = proxy_instance_create(&mount->instance, id); + err = proxy_instance_create(&mount->instance, settings, id); if (err < 0) { proxy_free(mount); return err; diff --git a/src/libcephfs_proxy/proxy_mount.h b/src/libcephfs_proxy/proxy_mount.h index 14bd58fabb2a..c217673e7104 100644 --- a/src/libcephfs_proxy/proxy_mount.h +++ b/src/libcephfs_proxy/proxy_mount.h @@ -12,6 +12,7 @@ typedef struct _proxy_instance { list_t list; list_t siblings; list_t changes; + proxy_settings_t *settings; struct ceph_mount_info *cmount; struct Inode *root; bool inited; @@ -36,7 +37,8 @@ static inline struct ceph_mount_info *proxy_cmount(proxy_mount_t *mount) int32_t proxy_inode_ref(proxy_mount_t *mount, uint64_t inode); -int32_t proxy_mount_create(proxy_mount_t **pmount, const char *id); +int32_t proxy_mount_create(proxy_mount_t **pmount, proxy_settings_t *settings, + const char *id); int32_t proxy_mount_config(proxy_mount_t *mount, const char *config); -- 2.47.3