提交 96acf9d6 编写于 作者: A Al Viro 提交者: Mike Marshall

orangefs: nothing should remain in request list and in hash

... otherwise some thread is running in .text that is about to
be freed.
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: NMike Marshall <hubcap@omnibond.com>
上级 60831949
...@@ -236,8 +236,6 @@ static int __init orangefs_init(void) ...@@ -236,8 +236,6 @@ static int __init orangefs_init(void)
static void __exit orangefs_exit(void) static void __exit orangefs_exit(void)
{ {
int i = 0; int i = 0;
struct orangefs_kernel_op_s *cur_op = NULL;
gossip_debug(GOSSIP_INIT_DEBUG, "orangefs: orangefs_exit called\n"); gossip_debug(GOSSIP_INIT_DEBUG, "orangefs: orangefs_exit called\n");
unregister_filesystem(&orangefs_fs_type); unregister_filesystem(&orangefs_fs_type);
...@@ -245,27 +243,9 @@ static void __exit orangefs_exit(void) ...@@ -245,27 +243,9 @@ static void __exit orangefs_exit(void)
orangefs_sysfs_exit(); orangefs_sysfs_exit();
fsid_key_table_finalize(); fsid_key_table_finalize();
orangefs_dev_cleanup(); orangefs_dev_cleanup();
/* clear out all pending upcall op requests */ BUG_ON(!list_empty(&orangefs_request_list));
spin_lock(&orangefs_request_list_lock);
while (!list_empty(&orangefs_request_list)) {
cur_op = list_entry(orangefs_request_list.next,
struct orangefs_kernel_op_s,
list);
list_del(&cur_op->list);
gossip_debug(GOSSIP_INIT_DEBUG,
"Freeing unhandled upcall request type %d\n",
cur_op->upcall.type);
op_release(cur_op);
}
spin_unlock(&orangefs_request_list_lock);
for (i = 0; i < hash_table_size; i++) for (i = 0; i < hash_table_size; i++)
while (!list_empty(&htable_ops_in_progress[i])) { BUG_ON(!list_empty(&htable_ops_in_progress[i]));
cur_op = list_entry(htable_ops_in_progress[i].next,
struct orangefs_kernel_op_s,
list);
op_release(cur_op);
}
kiocb_cache_finalize(); kiocb_cache_finalize();
orangefs_inode_cache_finalize(); orangefs_inode_cache_finalize();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册