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

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
...@@ -1546,7 +1546,6 @@ struct task_struct { ...@@ -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;
......
...@@ -13,7 +13,6 @@ ...@@ -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];
......
...@@ -109,26 +109,10 @@ void __scm_destroy(struct scm_cookie *scm) ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment