diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-11-23 08:55:47 +0100 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-11-23 08:55:47 +0100 | 
| commit | ca9eed76133c00e7f4b1eeb4c1a6cb800cd2654c (patch) | |
| tree | 5f011f4bd00c921e41605b1915c227aeaf411a0d /net/core/scm.c | |
| parent | 8652cb4b0d87accbe78725fd2a13be2787059649 (diff) | |
| parent | 13d428afc007fcfcd6deeb215618f54cf9c0cae6 (diff) | |
Merge commit 'v2.6.28-rc6' into x86/debug
Diffstat (limited to 'net/core/scm.c')
| -rw-r--r-- | net/core/scm.c | 22 | 
1 files changed, 19 insertions, 3 deletions
diff --git a/net/core/scm.c b/net/core/scm.c index 10f5c65f6a4..b12303dd39d 100644 --- a/net/core/scm.c +++ b/net/core/scm.c @@ -106,9 +106,25 @@ void __scm_destroy(struct scm_cookie *scm)  	if (fpl) {  		scm->fp = NULL; -		for (i=fpl->count-1; i>=0; i--) -			fput(fpl->fp[i]); -		kfree(fpl); +		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; +		}  	}  }  | 
