From 890082069c4e43fd8d4ec6e96bf851d185195b7d Mon Sep 17 00:00:00 2001 From: liqiang Date: Sat, 10 Jun 2023 17:02:53 +0800 Subject: port in use Signed-off-by: liqiang --- qtfs/include/conn.h | 12 ++++++++++-- qtfs/qtfs_common/conn.c | 10 +++++----- qtfs/qtfs_common/user_engine.c | 5 ++++- qtfs/qtfs_server/qtfs-server.c | 8 ++++++++ 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/qtfs/include/conn.h b/qtfs/include/conn.h index 3b8f1f4..afbb00f 100644 --- a/qtfs/include/conn.h +++ b/qtfs/include/conn.h @@ -46,7 +46,16 @@ extern bool qtfs_epoll_mode; extern struct qtsock_wl_stru qtsock_wl; extern struct qtfs_pvar_ops_s qtfs_conn_sock_pvar_ops; -#define qtfs_conn_get_param(void) _qtfs_conn_get_param(__func__) +struct qtfs_conn_var_s *_qtfs_conn_get_param(const char *); +static inline struct qtfs_conn_var_s *__qtfs_conn_get_param(const char *who_using) +{ + struct qtfs_conn_var_s *p = _qtfs_conn_get_param(who_using); + if (IS_ERR_OR_NULL(p)) + return NULL; + return p; +} +#define qtfs_conn_get_param(void) __qtfs_conn_get_param(__func__) +#define qtfs_conn_get_param_errcode(void) _qtfs_conn_get_param(__func__) #define QTFS_CONN_SOCK_TYPE "socket" #define QTFS_CONN_PCIE_TYPE "pcie" @@ -172,7 +181,6 @@ void *qtfs_conn_msg_buf(struct qtfs_conn_var_s *pvar, int dir); void qtfs_conn_param_init(void); void qtfs_conn_param_fini(void); -struct qtfs_conn_var_s *_qtfs_conn_get_param(const char *); void qtfs_conn_put_param(struct qtfs_conn_var_s *pvar); struct qtfs_conn_var_s *qtfs_epoll_establish_conn(void); void qtfs_epoll_cut_conn(struct qtfs_conn_var_s *pvar); diff --git a/qtfs/qtfs_common/conn.c b/qtfs/qtfs_common/conn.c index 56b2b12..ab84181 100644 --- a/qtfs/qtfs_common/conn.c +++ b/qtfs/qtfs_common/conn.c @@ -580,7 +580,7 @@ retry: } if (ret != 0) { qtfs_conn_put_param(pvar); - return NULL; + return (IS_ERR_VALUE((long)ret) ? ERR_PTR((long)ret) : NULL); } strlcpy(pvar->who_using, func, QTFS_FUNCTION_LEN); return pvar; @@ -636,18 +636,18 @@ retry: qtfs_err("qtfs get param active connection failed, ret:%d, curstate:%s", ret, QTCONN_CUR_STATE(pvar)); // put to vld list qtfs_conn_put_param(pvar); - return NULL; + return (IS_ERR_VALUE((long)ret) ? ERR_PTR((long)ret) : NULL); } qtfs_thread_var[pvar->cur_threadidx] = pvar; #else pvar->cs = QTFS_CONN_SOCK_SERVER; if (!pvar->conn_ops->conn_inited(pvar)) { - if (qtfs_sm_active(pvar)) { + if ((ret = qtfs_sm_active(pvar)) != 0) { qtfs_err("qtfs get param active connection failed, ret:%d, curstate:%s", ret, QTCONN_CUR_STATE(pvar)); // put to vld list mutex_unlock(&g_param_mutex); qtfs_conn_put_param(pvar); - return NULL; + return (IS_ERR_VALUE((long)ret) ? ERR_PTR((long)ret) : NULL); } mutex_unlock(&g_param_mutex); } else { @@ -657,7 +657,7 @@ retry: if (ret) { qtfs_err("qtfs get param active connection failed, ret:%d curstate:%s", ret, QTCONN_CUR_STATE(pvar)); qtfs_conn_put_param(pvar); - return NULL; + return (IS_ERR_VALUE((long)ret) ? ERR_PTR((long)ret) : NULL); } } #endif diff --git a/qtfs/qtfs_common/user_engine.c b/qtfs/qtfs_common/user_engine.c index 521ebe4..919da11 100644 --- a/qtfs/qtfs_common/user_engine.c +++ b/qtfs/qtfs_common/user_engine.c @@ -105,9 +105,12 @@ static struct qtfs_server_userp_s *qtfs_engine_thread_init(int fd, int thread_nu } } struct qtfs_thread_init_s init_userp; + int ret; init_userp.thread_nums = thread_nums; init_userp.userp = userp; - if (ioctl(fd, QTFS_IOCTL_THREAD_INIT, (unsigned long)&init_userp) == QTERROR) { + ret = ioctl(fd, QTFS_IOCTL_THREAD_INIT, (unsigned long)&init_userp); + if (ret != QTOK) { + engine_err("Engine thread init failed reason:%s", (ret == EADDRINUSE) ? strerror(EADDRINUSE) : "userp init failed."); goto rollback; } return userp; diff --git a/qtfs/qtfs_server/qtfs-server.c b/qtfs/qtfs_server/qtfs-server.c index 003c361..729097b 100644 --- a/qtfs/qtfs_server/qtfs-server.c +++ b/qtfs/qtfs_server/qtfs-server.c @@ -192,6 +192,14 @@ long qtfs_server_misc_ioctl(struct file *file, unsigned int cmd, unsigned long a struct qtfs_thread_init_s init_userp; switch (cmd) { case QTFS_IOCTL_THREAD_INIT: + pvar = qtfs_conn_get_param_errcode(); + if (IS_ERR_OR_NULL(pvar)) { + qtfs_err("init pvar get failed, pvar:%ld", (long)pvar); + if (PTR_ERR(pvar) == -EADDRINUSE) + return EADDRINUSE; + } else { + qtfs_conn_put_param(pvar); + } if (!write_trylock(&g_userp_rwlock)) { qtfs_err("try lock userps failed."); return QTERROR; -- 2.33.0