diff options
| author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-20 13:28:51 -0500 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-20 13:28:51 -0500 | 
| commit | a90779bfc83b7489270a8ce2c3fc9df20dac2b24 (patch) | |
| tree | 53a41d0e419024619c621facb2baf6e782e16f35 /kernel/exit.c | |
| parent | 7705a8792b0fc82fd7d4dd923724606bbfd9fb20 (diff) | |
| parent | e572ec7e4e432de7ecf7bd2e62117646fa64e518 (diff) | |
Merge branch 'block-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/block
* 'block-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/block:
  [PATCH] fix rmmod problems with elevator attributes, clean them up
  [PATCH] elevator_t lifetime rules and sysfs fixes
  [PATCH] noise removal: cfq-iosched.c
  [PATCH] don't bother with refcounting for cfq_data
  [PATCH] fix sysfs interaction and lifetime rules handling for queues
  [PATCH] regularize blk_cleanup_queue() use
  [PATCH] fix cfq_get_queue()/ioprio_set(2) races
  [PATCH] deal with rmmod/put_io_context() races
  [PATCH] stop elv_unregister() from rogering other iosched's data, fix locking
  [PATCH] stop cfq from pinning queue down
  [PATCH] make cfq_exit_queue() prune the cfq_io_context for that queue
  [PATCH] fix the exclusion for ioprio_set()
  [PATCH] keep sync and async cfq_queue separate
  [PATCH] switch to use of ->key to get cfq_data by cfq_io_context
  [PATCH] stop leaking cfq_data in cfq_set_request()
  [PATCH] fix cfq hash lookups
  [PATCH] fix locking in queue_requests_store()
  [PATCH] fix double-free in blk_init_queue_node()
  [PATCH] don't do exit_io_context() until we know we won't be doing any IO
Diffstat (limited to 'kernel/exit.c')
| -rw-r--r-- | kernel/exit.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index 531aadca5530..d1e8d500a7e1 100644 --- a/kernel/exit.c +++ b/kernel/exit.c  | |||
| @@ -807,8 +807,6 @@ fastcall NORET_TYPE void do_exit(long code) | |||
| 807 | panic("Attempted to kill the idle task!"); | 807 | panic("Attempted to kill the idle task!"); | 
| 808 | if (unlikely(tsk->pid == 1)) | 808 | if (unlikely(tsk->pid == 1)) | 
| 809 | panic("Attempted to kill init!"); | 809 | panic("Attempted to kill init!"); | 
| 810 | if (tsk->io_context) | ||
| 811 | exit_io_context(); | ||
| 812 | 810 | ||
| 813 | if (unlikely(current->ptrace & PT_TRACE_EXIT)) { | 811 | if (unlikely(current->ptrace & PT_TRACE_EXIT)) { | 
| 814 | current->ptrace_message = code; | 812 | current->ptrace_message = code; | 
| @@ -822,6 +820,8 @@ fastcall NORET_TYPE void do_exit(long code) | |||
| 822 | if (unlikely(tsk->flags & PF_EXITING)) { | 820 | if (unlikely(tsk->flags & PF_EXITING)) { | 
| 823 | printk(KERN_ALERT | 821 | printk(KERN_ALERT | 
| 824 | "Fixing recursive fault but reboot is needed!\n"); | 822 | "Fixing recursive fault but reboot is needed!\n"); | 
| 823 | if (tsk->io_context) | ||
| 824 | exit_io_context(); | ||
| 825 | set_current_state(TASK_UNINTERRUPTIBLE); | 825 | set_current_state(TASK_UNINTERRUPTIBLE); | 
| 826 | schedule(); | 826 | schedule(); | 
| 827 | } | 827 | } | 
| @@ -881,6 +881,9 @@ fastcall NORET_TYPE void do_exit(long code) | |||
| 881 | */ | 881 | */ | 
| 882 | mutex_debug_check_no_locks_held(tsk); | 882 | mutex_debug_check_no_locks_held(tsk); | 
| 883 | 883 | ||
| 884 | if (tsk->io_context) | ||
| 885 | exit_io_context(); | ||
| 886 | |||
| 884 | /* PF_DEAD causes final put_task_struct after we schedule. */ | 887 | /* PF_DEAD causes final put_task_struct after we schedule. */ | 
| 885 | preempt_disable(); | 888 | preempt_disable(); | 
| 886 | BUG_ON(tsk->flags & PF_DEAD); | 889 | BUG_ON(tsk->flags & PF_DEAD); | 
