diff --git a/fs/hmdfs/comm/device_node.c b/fs/hmdfs/comm/device_node.c index dada0cdb061fee0156e2a09b97b99d8ce0b39dd5..bf65199261eca36977b68e3d4514fb1361d4b8a7 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 fdc64d467287f93776e3a488db9e47217d5b055d..a0c596991870d5447448243405476399167a7c87 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, }; diff --git a/fs/sharefs/lookup.c b/fs/sharefs/lookup.c index a8a595d7a65184527d9b37a1e9fe9724b70e9544..0b0c30ef46f12aa9e22c49ebe7cee8ca5efd9875 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; }