From d8bf234b1cd7aefc76c24ece0c61715a442b2698 Mon Sep 17 00:00:00 2001 From: Kirill Korotaev Date: Sun, 30 Oct 2005 15:02:26 -0800 Subject: [PATCH] --- yaml --- r: 11836 b: refs/heads/master c: e9543659715602e3180f00a227bb6db34141ac41 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/proc/inode.c | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index a7883bdb1092..875ef365bbae 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f12ec44070f6b4d1a3911fcf9917cf8f872a4daf +refs/heads/master: e9543659715602e3180f00a227bb6db34141ac41 diff --git a/trunk/fs/proc/inode.c b/trunk/fs/proc/inode.c index effa6c0c467a..e6a818a93f3d 100644 --- a/trunk/fs/proc/inode.c +++ b/trunk/fs/proc/inode.c @@ -156,10 +156,13 @@ struct inode *proc_get_inode(struct super_block *sb, unsigned int ino, WARN_ON(de && de->deleted); + if (de != NULL && !try_module_get(de->owner)) + goto out_mod; + inode = iget(sb, ino); if (!inode) - goto out_fail; - + goto out_ino; + PROC_I(inode)->pde = de; if (de) { if (de->mode) { @@ -171,20 +174,20 @@ struct inode *proc_get_inode(struct super_block *sb, unsigned int ino, inode->i_size = de->size; if (de->nlink) inode->i_nlink = de->nlink; - if (!try_module_get(de->owner)) - goto out_fail; if (de->proc_iops) inode->i_op = de->proc_iops; if (de->proc_fops) inode->i_fop = de->proc_fops; } -out: return inode; -out_fail: +out_ino: + if (de != NULL) + module_put(de->owner); +out_mod: de_put(de); - goto out; + return NULL; } int proc_fill_super(struct super_block *s, void *data, int silent)