diff --git a/qtfs/ipc/uds_main.c b/qtfs/ipc/uds_main.c index cea0b1a2bed8e14e781fe95407dcc11545c21f95..d559d016721e3d8beb182089423862abf0eef2ba 100644 --- a/qtfs/ipc/uds_main.c +++ b/qtfs/ipc/uds_main.c @@ -190,7 +190,7 @@ void uds_main_loop(int efd, struct uds_thread_arg *arg) uds_event_pre_hook(p_event_var); for (int i = 0; i < n; i++) { udsevt = (struct uds_event *)evts[i].data.ptr; - uds_log("event fd:%d events:%d tofree:%d", udsevt->fd, evts[i].events, udsevt->tofree); + uds_log("event fd:%d events:%d tofree:%u", udsevt->fd, evts[i].events, udsevt->tofree); if (udsevt->handler == NULL) { uds_err("bad event, fd:%d handler is NULL.", udsevt->fd); continue; @@ -414,7 +414,6 @@ void uds_del_event(struct uds_event *evt) } uds_event_delete(p_uds_var->efd[hash], evt->fd); free(evt); - evt = NULL; return; } diff --git a/qtfs/qtfs/qtfs-mod.c b/qtfs/qtfs/qtfs-mod.c index e4fb9044f1d60acadd46501bb12e00655bf06f2c..e2648cd24880c14a0a5e66c55a8bcf2e1a2ef2c1 100644 --- a/qtfs/qtfs/qtfs-mod.c +++ b/qtfs/qtfs/qtfs-mod.c @@ -221,6 +221,7 @@ static int __init qtfs_init(void) ret = -ENOMEM; goto cache_create_err; } + qtfs_whitelist_initset(); qtfs_conn_param_init(); g_qtfs_epoll_thread = kthread_run(qtfs_epoll_thread, NULL, "qtfs_epoll"); if (IS_ERR_OR_NULL(g_qtfs_epoll_thread)) { @@ -288,7 +289,7 @@ static void __exit qtfs_exit(void) kfree(qtfs_epoll_var); qtfs_epoll_var = NULL; } - qtfs_whitelist_initset(); + qtfs_whitelist_exit(); kfree(qtfs_diag_info); qtfs_diag_info = NULL; diff --git a/qtfs/qtfs/qtfs-mod.h b/qtfs/qtfs/qtfs-mod.h index bf38babbb6eebae5856e0deb6e8d5714bd413fe3..3939e0facdada958be458db3e456d180a853fd58 100644 --- a/qtfs/qtfs/qtfs-mod.h +++ b/qtfs/qtfs/qtfs-mod.h @@ -184,6 +184,7 @@ struct dentry *qtfs_fs_mount(struct file_system_type *fs_type, void *qtfs_remote_run(struct qtfs_conn_var_s *pvar, unsigned int type, unsigned int len); int qtfs_misc_register(void); void qtfs_misc_destroy(void); +void qtfs_whitelist_exit(void); long qtfs_misc_ioctl(struct file *file, unsigned int cmd, unsigned long arg); int qtfs_missmsg_proc(struct qtfs_conn_var_s *pvar); int qtfs_utils_register(void); diff --git a/qtfs/qtfs/sb.c b/qtfs/qtfs/sb.c index faafa76fc9ce7a76d4c12977bcae98de7d2682a7..d1aa3db3c99f7e2341b60fcc4134214b14a6dac7 100644 --- a/qtfs/qtfs/sb.c +++ b/qtfs/qtfs/sb.c @@ -71,6 +71,7 @@ static void qtfs_free_inode(struct inode *inode) kmem_cache_free(qtfs_inode_priv_cache, inode->i_private); inode->i_private = NULL; } + free_inode_nonrcu(inode); return; } @@ -1571,7 +1572,7 @@ int qtfs_dentry_revalidate(struct dentry *dentry, unsigned int flags) struct qtfs_conn_var_s *pvar = NULL; struct qtreq_getattr *req; struct qtrsp_getattr *rsp; - struct inode *inode = dentry->d_inode; + struct inode *inode = NULL; if (dentry && dentry->d_inode) { if (jiffies_to_msecs(jiffies - dentry->d_time) < 2000) return 1; @@ -1596,7 +1597,12 @@ int qtfs_dentry_revalidate(struct dentry *dentry, unsigned int flags) return 0; } - if (!inode || inode->i_ino != rsp->stat.ino || inode->i_mode != rsp->stat.mode) { + inode = dentry->d_inode; + if (inode == NULL) { + qtfs_conn_put_param(pvar); + return 0; + } + if (inode->i_ino != rsp->stat.ino || inode->i_mode != rsp->stat.mode) { if (inode->i_nlink > 0) drop_nlink(inode); qtfs_conn_put_param(pvar); diff --git a/qtfs/qtfs_common/conn.c b/qtfs/qtfs_common/conn.c index cc59d5256e58ebfe845412ec985901778ba68c9f..5a4fcdf2f3b3c1b4f5d711cee35ddc40e3a5582f 100644 --- a/qtfs/qtfs_common/conn.c +++ b/qtfs/qtfs_common/conn.c @@ -696,7 +696,7 @@ struct qtfs_conn_var_s *qtfs_epoll_establish_conn(void) ret = qtfs_sm_active(pvar); } if (ret) { - return NULL; + qtfs_err("qtfs_sm_active or qtfs_sm_reconnect failed with error code: %d", ret); } return pvar; } @@ -707,7 +707,6 @@ struct qtfs_conn_var_s *qtfs_epoll_establish_conn(void) return NULL; } memset(pvar, 0, sizeof(struct qtfs_conn_var_s)); - qtfs_epoll_var = pvar; pvar->recv_max = QTFS_EPOLL_MSG_LEN; pvar->send_max = QTFS_EPOLL_MSG_LEN; pvar->user_type = QTFS_CONN_TYPE_EPOLL; @@ -718,12 +717,12 @@ struct qtfs_conn_var_s *qtfs_epoll_establish_conn(void) kfree(pvar); return NULL; } + qtfs_epoll_var = pvar; pvar->state = QTCONN_INIT; ret = qtfs_sm_active(pvar); if (ret) { qtfs_err("qtfs epoll get param active new param failed, ret:%d state:%s", ret, QTCONN_CUR_STATE(pvar)); - return NULL; } qtfs_info("qtfs create new epoll param state:%s", QTCONN_CUR_STATE(pvar)); diff --git a/qtfs/qtfs_common/misc.c b/qtfs/qtfs_common/misc.c index beff5cb06e0d4eb58a0077316c909f59e7b99124..6f84b9506c4ceb48fa921c636aaf54e9a9ef27e9 100644 --- a/qtfs/qtfs_common/misc.c +++ b/qtfs/qtfs_common/misc.c @@ -257,6 +257,12 @@ void qtfs_whitelist_clearall(void) return; } +void qtfs_whitelist_exit(void) +{ + qtfs_whitelist_clearall(); + return; +} + long qtfs_misc_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { long ret = QTOK; diff --git a/qtfs/qtfs_common/user_engine.c b/qtfs/qtfs_common/user_engine.c index 31947b26457cf57d8aa76c14c7e8ab01d9471536..3337c341adc39a121ee33ef69991444e59265791 100644 --- a/qtfs/qtfs_common/user_engine.c +++ b/qtfs/qtfs_common/user_engine.c @@ -183,7 +183,7 @@ static void *qtfs_engine_kthread(void *arg) continue; } ret = ioctl(qtfs_fd, QTFS_IOCTL_EXIT, 0); - engine_out("qtfs engine send QTFS_IOCTL_EXIT to kernel, get return value:%d.", ret); + engine_out("qtfs engine send QTFS_IOCTL_EXIT to kernel, get return value:%ld.", ret); engine_run = 0; break; } @@ -229,7 +229,7 @@ static void *qtfs_engine_epoll_thread(void *data) } } end: - engine_out("qtfs server epoll thread exit, ret:%d.", ret); + engine_out("qtfs server epoll thread exit, ret:%ld.", ret); return NULL; } @@ -354,7 +354,7 @@ static int qtfs_engine_check_port(unsigned short port, char *scid) } int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { - engine_err("socket error, fd:%", sockfd); + engine_err("socket error, fd:%d", sockfd); return -1; } bzero(&sin, sizeof(sin)); @@ -389,7 +389,7 @@ static int qtfs_engine_check_port(unsigned short port, char *scid) int sock_fd = socket(saddr.svm_family, SOCK_STREAM, 0); if (bind(sock_fd, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) { - engine_err("cid:%u port:%u bind failed, errno:%d.", cid, port, errno); + engine_err("cid:%ld port:%u bind failed, errno:%d.", cid, port, errno); close(sock_fd); return -1; } diff --git a/qtfs/qtfs_server/qtfs-server.c b/qtfs/qtfs_server/qtfs-server.c index e6915747fbd796fb4911dcdeb8ff967367e47e3c..12d2ed0952b478e4eeea81f03640e8b44a1de053 100644 --- a/qtfs/qtfs_server/qtfs-server.c +++ b/qtfs/qtfs_server/qtfs-server.c @@ -46,6 +46,19 @@ struct qtfs_server_epoll_s qtfs_epoll = { }; rwlock_t qtfs_epoll_rwlock; +void qtfs_server_epoll_exit(void) +{ + write_lock(&qtfs_epoll_rwlock); + if (qtfs_epoll.kevents == NULL) { + write_unlock(&qtfs_epoll_rwlock); + return; + } + kfree(qtfs_epoll.kevents); + qtfs_epoll.kevents = NULL; + write_unlock(&qtfs_epoll_rwlock); + return; +} + long qtfs_server_epoll_thread(struct qtfs_conn_var_s *pvar) { int n; @@ -412,6 +425,8 @@ static void __exit qtfs_server_exit(void) qtfs_fd_bitmap.nbits = 0; } write_unlock(&g_userp_rwlock); + qtfs_whitelist_exit(); + qtfs_server_epoll_exit(); qtfs_misc_destroy(); qtfs_syscall_replace_stop(); diff --git a/qtfs/qtfs_server/qtfs-server.h b/qtfs/qtfs_server/qtfs-server.h index bfab00a96bfd5f47b6c3638780d329721ea34643..8135dbbf53b2712819a7ec881ef2606f5c65ee60 100644 --- a/qtfs/qtfs_server/qtfs-server.h +++ b/qtfs/qtfs_server/qtfs-server.h @@ -43,6 +43,7 @@ int qtfs_conn_server_run(struct qtfs_conn_var_s *pvar); long qtfs_misc_ioctl(struct file *file, unsigned int cmd, unsigned long arg); int qtfs_misc_register(void); void qtfs_misc_destroy(void); +void qtfs_whitelist_exit(void); long qtfs_misc_ioctl(struct file *file, unsigned int cmd, unsigned long arg); void qtfs_whitelist_clearall(void); void qtfs_whitelist_initset(void); diff --git a/qtfs/qtinfo/qtinfo.c b/qtfs/qtinfo/qtinfo.c index 93dbd6b1c1fcf51e0bc1229bef28223eee54f5d4..4c915aee5e51b66186d47aacc68ddc06036ece21 100644 --- a/qtfs/qtinfo/qtinfo.c +++ b/qtfs/qtinfo/qtinfo.c @@ -511,7 +511,7 @@ static void qtinfo_opt_z_bytype(int fd, unsigned int type) ret = ioctl(fd, QTFS_IOCTL_WL_GET, &head); if (ret != QTOK) break; - qtinfo_out(" [index:%d][path:%s]", index, head.path); + qtinfo_out(" [index:%u][path:%s]", index, head.path); } return; } diff --git a/qtfs/rexec/rexec.c b/qtfs/rexec/rexec.c index a214a74b55d10d74ad521fc16e260bb0588537b9..060abc54009139be6a44cd2a4d2533a8c0aadc6e 100644 --- a/qtfs/rexec/rexec.c +++ b/qtfs/rexec/rexec.c @@ -577,14 +577,14 @@ static int rexec_handshake_init(int efd, int connfd) { char *hs_read = getenv("REXEC_HANDSHAKE_RD"); if (hs_read == NULL) { - rexec_log("handshake not in effect, read:%lx", hs_read); + rexec_log("handshake not in effect."); return 0; } g_rexec.rexec_hs_fd[PIPE_READ] = atoi(hs_read); char *hs_write = getenv("REXEC_HANDSHAKE_WR"); if (hs_write == NULL) { - rexec_log("handshake not in effect, wirte:%lx", hs_write); + rexec_log("handshake not in effect, read:%s", hs_read); g_rexec.rexec_hs_fd[PIPE_READ] = -1; return 0; }