diff options
Diffstat (limited to 'net/core/scm.c')
| -rw-r--r-- | net/core/scm.c | 22 |
1 files changed, 3 insertions, 19 deletions
diff --git a/net/core/scm.c b/net/core/scm.c index 611c5efd4cb0..8f6ccfd68ef4 100644 --- a/net/core/scm.c +++ b/net/core/scm.c | |||
| @@ -109,25 +109,9 @@ void __scm_destroy(struct scm_cookie *scm) | |||
| 109 | 109 | ||
| 110 | if (fpl) { | 110 | if (fpl) { |
| 111 | scm->fp = NULL; | 111 | scm->fp = NULL; |
| 112 | if (current->scm_work_list) { | 112 | for (i=fpl->count-1; i>=0; i--) |
| 113 | list_add_tail(&fpl->list, current->scm_work_list); | 113 | fput(fpl->fp[i]); |
| 114 | } else { | 114 | kfree(fpl); |
| 115 | LIST_HEAD(work_list); | ||
| 116 | |||
| 117 | current->scm_work_list = &work_list; | ||
| 118 | |||
| 119 | list_add(&fpl->list, &work_list); | ||
| 120 | while (!list_empty(&work_list)) { | ||
| 121 | fpl = list_first_entry(&work_list, struct scm_fp_list, list); | ||
| 122 | |||
| 123 | list_del(&fpl->list); | ||
| 124 | for (i=fpl->count-1; i>=0; i--) | ||
| 125 | fput(fpl->fp[i]); | ||
| 126 | kfree(fpl); | ||
| 127 | } | ||
| 128 | |||
| 129 | current->scm_work_list = NULL; | ||
| 130 | } | ||
| 131 | } | 115 | } |
| 132 | } | 116 | } |
| 133 | EXPORT_SYMBOL(__scm_destroy); | 117 | EXPORT_SYMBOL(__scm_destroy); |
