diff -urpN -X /home/fletch/.diff.exclude 000-virgin/fs/proc/base.c 001-proc_lock/fs/proc/base.c --- 000-virgin/fs/proc/base.c Sat Jun 14 18:37:35 2003 +++ 001-proc_lock/fs/proc/base.c Sat Jun 14 18:56:39 2003 @@ -1362,10 +1362,11 @@ struct dentry *proc_pid_lookup(struct in inode = proc_pid_make_inode(dir->i_sb, task, PROC_PID_INO); - put_task_struct(task); - if (!inode) + if (!inode) { + put_task_struct(task); goto out; + } inode->i_mode = S_IFDIR|S_IRUGO|S_IXUGO; inode->i_op = &proc_base_inode_operations; inode->i_fop = &proc_base_operations; @@ -1379,6 +1380,7 @@ struct dentry *proc_pid_lookup(struct in d_add(dentry, inode); spin_unlock(&task->proc_lock); + put_task_struct(task); return NULL; out: return ERR_PTR(-ENOENT); diff -urpN -X /home/fletch/.diff.exclude 000-virgin/kernel/fork.c 001-proc_lock/kernel/fork.c --- 000-virgin/kernel/fork.c Sat Jun 14 18:37:38 2003 +++ 001-proc_lock/kernel/fork.c Sat Jun 14 18:57:28 2003 @@ -846,6 +846,7 @@ struct task_struct *copy_process(unsigne p->vfork_done = NULL; spin_lock_init(&p->alloc_lock); spin_lock_init(&p->switch_lock); + spin_lock_init(&p->proc_lock); clear_tsk_thread_flag(p, TIF_SIGPENDING); init_sigpending(&p->pending);