mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
get rid of ->scm_work_list
recursion in __scm_destroy() will be cut by delaying final fput() Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
3ffa3c0e3f
commit
6120d3dbb1
@ -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;
|
||||
|
@ -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];
|
||||
|
@ -109,25 +109,9 @@ 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;
|
||||
}
|
||||
for (i=fpl->count-1; i>=0; i--)
|
||||
fput(fpl->fp[i]);
|
||||
kfree(fpl);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(__scm_destroy);
|
||||
|
Loading…
Reference in New Issue
Block a user