--- linux-2.5.75-smp/fs/devfs/base.c.devfsd_child 2003-07-11 19:41:46.000000000 +0400 +++ linux-2.5.75-smp/fs/devfs/base.c 2003-07-12 13:51:49.000000000 +0400 @@ -676,6 +676,7 @@ #include #include #include +#include #include #include @@ -1325,8 +1326,20 @@ static void free_dentry (struct devfs_en static int is_devfsd_or_child (struct fs_info *fs_info) { - if (current == fs_info->devfsd_task) return (TRUE); - if (current->pgrp == fs_info->devfsd_pgrp) return (TRUE); + struct task_struct *p = current; + + if (p == fs_info->devfsd_task) return (TRUE); + if (p->pgrp == fs_info->devfsd_pgrp) return (TRUE); + read_lock(&tasklist_lock); + for ( ; p != &init_task; p = p->real_parent) + { + if (p == fs_info->devfsd_task) + { + read_unlock (&tasklist_lock); + return (TRUE); + } + } + read_unlock (&tasklist_lock); return (FALSE); } /* End Function is_devfsd_or_child */