Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 96acf9d6 authored by Al Viro's avatar Al Viro Committed by Mike Marshall
Browse files

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: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarMike Marshall <hubcap@omnibond.com>
parent 60831949
Loading
Loading
Loading
Loading
+2 −22
Original line number Diff line number Diff line
@@ -236,8 +236,6 @@ static int __init orangefs_init(void)
static void __exit orangefs_exit(void)
{
	int i = 0;
	struct orangefs_kernel_op_s *cur_op = NULL;

	gossip_debug(GOSSIP_INIT_DEBUG, "orangefs: orangefs_exit called\n");

	unregister_filesystem(&orangefs_fs_type);
@@ -245,27 +243,9 @@ static void __exit orangefs_exit(void)
	orangefs_sysfs_exit();
	fsid_key_table_finalize();
	orangefs_dev_cleanup();
	/* clear out all pending upcall op requests */
	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);

	BUG_ON(!list_empty(&orangefs_request_list));
	for (i = 0; i < hash_table_size; i++)
		while (!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);
		}
		BUG_ON(!list_empty(&htable_ops_in_progress[i]));

	kiocb_cache_finalize();
	orangefs_inode_cache_finalize();