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 Original line Diff line number Diff line
@@ -1546,7 +1546,6 @@ struct task_struct {
	unsigned long timer_slack_ns;
	unsigned long timer_slack_ns;
	unsigned long default_timer_slack_ns;
	unsigned long default_timer_slack_ns;


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


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


	if (fpl) {
	if (fpl) {
		scm->fp = NULL;
		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--)
		for (i=fpl->count-1; i>=0; i--)
			fput(fpl->fp[i]);
			fput(fpl->fp[i]);
		kfree(fpl);
		kfree(fpl);
	}
	}

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