From: "Martin J. Bligh" <mbligh@aracnet.com> and me
proc_pid_lookup() does a put_task_struct() and then continues to play with
the task.
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;
d_add(dentry, inode);
spin_unlock(&task->proc_lock);
+ put_task_struct(task);
return NULL;
out:
return ERR_PTR(-ENOENT);