get rid of ->scm_work_list
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 24 Jun 2012 06:03:05 +0000 (10:03 +0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 22 Jul 2012 19:58:00 +0000 (23:58 +0400)
recursion in __scm_destroy() will be cut by delaying final fput()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
include/linux/sched.h
include/net/scm.h
net/core/scm.c

index af3555cc760f3a5bcd12ade4137f92f83ec54779..598ba2da7865fdcc53c5cc2dae6c0095f885d1d2 100644 (file)
@@ -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;
index d456f4c71a323b18b4bcbf24ca59a5bc96b8243a..079d7887dac13697d0dfc5d0cc6ce256800151d0 100644 (file)
@@ -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];
index 611c5efd4cb0b71abeb9b3d965acbf490673e644..8f6ccfd68ef4fb6625652f0b34f7f3fdb4b4a91e 100644 (file)
@@ -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);