From 9615fb53182c986b0436918be2e7301ef776bdc1 Mon Sep 17 00:00:00 2001 From: 18721213663 Date: Mon, 18 Dec 2023 16:14:31 +0800 Subject: [PATCH 1/2] bugfix sharefs lookup Signed-off-by: 18721213663 --- fs/sharefs/lookup.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/fs/sharefs/lookup.c b/fs/sharefs/lookup.c index a8a595d7a651..0b0c30ef46f1 100644 --- a/fs/sharefs/lookup.c +++ b/fs/sharefs/lookup.c @@ -294,15 +294,17 @@ struct dentry *sharefs_lookup(struct inode *dir, struct dentry *dentry, #ifdef CONFIG_SHAREFS_SUPPORT_OVERRIDE const struct cred *saved_cred = NULL; __u16 permission; +#endif + parent = dget_parent(dentry); + sharefs_get_lower_path(parent, &lower_parent_path); +#ifdef CONFIG_SHAREFS_SUPPORT_OVERRIDE saved_cred = sharefs_override_file_fsids(dir, &permission); if (!saved_cred) { ret = ERR_PTR(-ENOMEM); goto out_err; } #endif - parent = dget_parent(dentry); - sharefs_get_lower_path(parent, &lower_parent_path); /* allocate dentry private data. We free it in ->d_release */ err = new_dentry_private_data(dentry); @@ -315,7 +317,7 @@ struct dentry *sharefs_lookup(struct inode *dir, struct dentry *dentry, sharefs_err("sharefs_lookup error!"); goto out; } - + if (ret) dentry = ret; if (d_inode(dentry)) @@ -328,9 +330,9 @@ struct dentry *sharefs_lookup(struct inode *dir, struct dentry *dentry, out: #ifdef CONFIG_SHAREFS_SUPPORT_OVERRIDE sharefs_revert_fsids(saved_cred); - sharefs_put_lower_path(parent, &lower_parent_path); - dput(parent); out_err: #endif + sharefs_put_lower_path(parent, &lower_parent_path); + dput(parent); return ret; } -- Gitee From 86383417114c1c75bccd24c7d00268358a4a826c Mon Sep 17 00:00:00 2001 From: liuzerun Date: Thu, 21 Dec 2023 12:58:56 +0000 Subject: [PATCH 2/2] delete work_queue in off_line_all Signed-off-by: liuzerun --- fs/hmdfs/comm/device_node.c | 57 ------------------------------------- fs/hmdfs/comm/device_node.h | 1 - 2 files changed, 58 deletions(-) diff --git a/fs/hmdfs/comm/device_node.c b/fs/hmdfs/comm/device_node.c index dada0cdb061f..bf65199261ec 100644 --- a/fs/hmdfs/comm/device_node.c +++ b/fs/hmdfs/comm/device_node.c @@ -28,13 +28,6 @@ DEFINE_MUTEX(hmdfs_sysfs_mutex); static struct kset *hmdfs_kset; -struct hmdfs_disconnect_node_work { - struct hmdfs_peer *conn; - struct work_struct work; - atomic_t *cnt; - struct wait_queue_head *waitq; -}; - static void ctrl_cmd_update_socket_handler(const char *buf, size_t len, struct hmdfs_sb_info *sbi) { @@ -128,53 +121,6 @@ static void ctrl_cmd_off_line_handler(const char *buf, size_t len, peer_put(node); } -static void hmdfs_disconnect_node_work_fn(struct work_struct *base) -{ - struct hmdfs_disconnect_node_work *work = - container_of(base, struct hmdfs_disconnect_node_work, work); - - hmdfs_disconnect_node_marked(work->conn); - if (atomic_dec_and_test(work->cnt)) - wake_up(work->waitq); - kfree(work); -} - -static void ctrl_cmd_off_line_all_handler(const char *buf, size_t len, - struct hmdfs_sb_info *sbi) -{ - struct hmdfs_peer *node = NULL; - struct hmdfs_disconnect_node_work *work = NULL; - atomic_t cnt = ATOMIC_INIT(0); - wait_queue_head_t waitq; - - if (unlikely(len != sizeof(struct offline_all_param))) { - hmdfs_err("Recved a invalid userbuf, len %zu, expect %zu\n", - len, sizeof(struct offline_all_param)); - return; - } - - init_waitqueue_head(&waitq); - mutex_lock(&sbi->connections.node_lock); - list_for_each_entry(node, &sbi->connections.node_list, list) { - mutex_unlock(&sbi->connections.node_lock); - work = kmalloc(sizeof(*work), GFP_KERNEL); - if (work) { - atomic_inc(&cnt); - work->conn = node; - work->cnt = &cnt; - work->waitq = &waitq; - INIT_WORK(&work->work, hmdfs_disconnect_node_work_fn); - schedule_work(&work->work); - } else { - hmdfs_disconnect_node_marked(node); - } - mutex_lock(&sbi->connections.node_lock); - } - mutex_unlock(&sbi->connections.node_lock); - - wait_event(waitq, !atomic_read(&cnt)); -} - typedef void (*ctrl_cmd_handler)(const char *buf, size_t len, struct hmdfs_sb_info *sbi); @@ -182,7 +128,6 @@ static const ctrl_cmd_handler cmd_handler[CMD_CNT] = { [CMD_UPDATE_SOCKET] = ctrl_cmd_update_socket_handler, [CMD_UPDATE_DEVSL] = ctrl_cmd_update_devsl_handler, [CMD_OFF_LINE] = ctrl_cmd_off_line_handler, - [CMD_OFF_LINE_ALL] = ctrl_cmd_off_line_all_handler, }; static ssize_t sbi_cmd_show(struct kobject *kobj, struct sbi_attribute *attr, @@ -211,8 +156,6 @@ static const char *cmd2str(int cmd) return "CMD_UPDATE_DEVSL"; case 2: return "CMD_OFF_LINE"; - case 3: - return "CMD_OFF_LINE_ALL"; default: return "illegal cmd"; } diff --git a/fs/hmdfs/comm/device_node.h b/fs/hmdfs/comm/device_node.h index fdc64d467287..a0c596991870 100644 --- a/fs/hmdfs/comm/device_node.h +++ b/fs/hmdfs/comm/device_node.h @@ -15,7 +15,6 @@ enum CTRL_NODE_CMD { CMD_UPDATE_SOCKET = 0, CMD_UPDATE_DEVSL, CMD_OFF_LINE, - CMD_OFF_LINE_ALL, CMD_CNT, }; -- Gitee