dpu-utilities/0012-port-in-use.patch
Weifeng Su fe851cd555 Sync patches from source
The change in patches:
1. Fix cache issue when recreate file
2. Introduce CMAKE to build userspace apps
3. CleanCode

Signed-off-by: Weifeng Su <suweifeng1@huawei.com>
2023-06-12 08:24:22 +00:00

128 lines
4.5 KiB
Diff

From 890082069c4e43fd8d4ec6e96bf851d185195b7d Mon Sep 17 00:00:00 2001
From: liqiang <liqiang64@huawei.com>
Date: Sat, 10 Jun 2023 17:02:53 +0800
Subject: port in use
Signed-off-by: liqiang <liqiang64@huawei.com>
---
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