lkml.org 
[lkml]   [2005]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 2.6.13.1] Patch for invisible threads
    Linus Torvalds wrote:

    > I don't think this is wrong per se, but you shouldn't take the tasklist
    > lock normally. You're better off just doing

    Linus,

    I incarporated the path that doesn't hold tasklist lock unnecessarily. The
    patch is below. This seems to work without any problems for me.

    If the decision is to remove ->permission, I can send a small patch I have
    that removes .permission entry from proc_task_inode_operations. Either way
    fixes the problem I found.

    Thanks and regards,
    Sripathi.

    Signed-off-by: Sripathi Kodi <sripathik@in.ibm.com>

    --- linux-2.6.13.1-orig/fs/proc/base.c 2005-09-14 03:46:22.000000000 -0500
    +++ linux-2.6.13.1/fs/proc/base.c 2005-09-14 03:48:35.000000000 -0500
    @@ -275,11 +275,33 @@ static int proc_root_link(struct inode *
    {
    struct fs_struct *fs;
    int result = -ENOENT;
    - task_lock(proc_task(inode));
    - fs = proc_task(inode)->fs;
    - if(fs)
    + struct task_struct *leader = proc_task(inode);
    +
    + task_lock(leader);
    + fs = leader->fs;
    + if (fs) {
    atomic_inc(&fs->count);
    - task_unlock(proc_task(inode));
    + task_unlock(leader);
    + } else {
    + /* Try to get fs from sub-threads */
    + task_unlock(leader);
    + struct task_struct *task = leader;
    + read_lock(&tasklist_lock);
    + if (pid_alive(task)) {
    + while ((task = next_thread(task)) != leader) {
    + task_lock(task);
    + fs = task->fs;
    + if (fs) {
    + atomic_inc(&fs->count);
    + task_unlock(task);
    + break;
    + }
    + task_unlock(task);
    + }
    + }
    + read_unlock(&tasklist_lock);
    + }
    +
    if (fs) {
    read_lock(&fs->lock);
    *mnt = mntget(fs->rootmnt);
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-09-14 03:50    [W:0.025 / U:91.504 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site