X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fproc%2Finode.c;fp=fs%2Fproc%2Finode.c;h=6d25888c403dc8673560c08629c4c7f11aa6d852;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=b1f53f47afdb080c4f039cb079624da525344100;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/fs/proc/inode.c b/fs/proc/inode.c index b1f53f47a..6d25888c4 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c @@ -58,11 +58,14 @@ static void de_put(struct proc_dir_entry *de) static void proc_delete_inode(struct inode *inode) { struct proc_dir_entry *de; + struct task_struct *tsk; truncate_inode_pages(&inode->i_data, 0); - /* Stop tracking associated processes */ - put_pid(PROC_I(inode)->pid); + /* Let go of any associated process */ + tsk = PROC_I(inode)->task; + if (tsk) + put_task_struct(tsk); /* Let go of any associated proc directory entry */ de = PROC_I(inode)->pde; @@ -91,8 +94,8 @@ static struct inode *proc_alloc_inode(struct super_block *sb) ei = (struct proc_inode *)kmem_cache_alloc(proc_inode_cachep, SLAB_KERNEL); if (!ei) return NULL; - ei->pid = NULL; - ei->fd = 0; + ei->task = NULL; + ei->type = 0; ei->op.proc_get_link = NULL; ei->pde = NULL; inode = &ei->vfs_inode; @@ -118,8 +121,7 @@ int __init proc_init_inodecache(void) { proc_inode_cachep = kmem_cache_create("proc_inode_cache", sizeof(struct proc_inode), - 0, (SLAB_RECLAIM_ACCOUNT| - SLAB_MEM_SPREAD), + 0, SLAB_RECLAIM_ACCOUNT, init_once, NULL); if (proc_inode_cachep == NULL) return -ENOMEM; @@ -194,7 +196,7 @@ int proc_fill_super(struct super_block *s, void *data, int silent) { struct inode * root_inode; - s->s_flags |= MS_NODIRATIME | MS_NOSUID | MS_NOEXEC; + s->s_flags |= MS_NODIRATIME; s->s_blocksize = 1024; s->s_blocksize_bits = 10; s->s_magic = PROC_SUPER_MAGIC;