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

Commit 6120d3db authored by Al Viro's avatar Al Viro
Browse files

get rid of ->scm_work_list



recursion in __scm_destroy() will be cut by delaying final fput()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 3ffa3c0e
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -1546,7 +1546,6 @@ struct task_struct {
	unsigned long timer_slack_ns;
	unsigned long default_timer_slack_ns;

	struct list_head	*scm_work_list;
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
	/* Index of current stored address in ret_stack */
	int curr_ret_stack;
+0 −1
Original line number Diff line number Diff line
@@ -13,7 +13,6 @@
#define SCM_MAX_FD	253

struct scm_fp_list {
	struct list_head	list;
	short			count;
	short			max;
	struct file		*fp[SCM_MAX_FD];
+3 −19
Original line number Diff line number Diff line
@@ -109,26 +109,10 @@ void __scm_destroy(struct scm_cookie *scm)

	if (fpl) {
		scm->fp = NULL;
		if (current->scm_work_list) {
			list_add_tail(&fpl->list, current->scm_work_list);
		} else {
			LIST_HEAD(work_list);

			current->scm_work_list = &work_list;

			list_add(&fpl->list, &work_list);
			while (!list_empty(&work_list)) {
				fpl = list_first_entry(&work_list, struct scm_fp_list, list);

				list_del(&fpl->list);
		for (i=fpl->count-1; i>=0; i--)
			fput(fpl->fp[i]);
		kfree(fpl);
	}

			current->scm_work_list = NULL;
		}
	}
}
EXPORT_SYMBOL(__scm_destroy);