Skip to content

Commit

Permalink
get rid of ->scm_work_list
Browse files Browse the repository at this point in the history
recursion in __scm_destroy() will be cut by delaying final fput()

Signed-off-by: Al Viro <[email protected]>
  • Loading branch information
Al Viro committed Jul 22, 2012
1 parent 3ffa3c0 commit 6120d3d
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 21 deletions.
1 change: 0 additions & 1 deletion include/linux/sched.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 0 additions & 1 deletion include/net/scm.h
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
22 changes: 3 additions & 19 deletions net/core/scm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 6120d3d

Please sign in to comment.