Skip to content

Commit

Permalink
[JFFS2][XATTR] Fix memory leak with jffs2_xattr_ref
Browse files Browse the repository at this point in the history
If xattr_ref is associated with an orphan inode_cache
on filesystem mounting, those xattr_refs are not
released even if this inode_cache is released.

This patch enables to call jffs2_xattr_delete_inode()
for such a irregular inode_cachde too.

Signed-off-by: KaiGai Kohei <kaigai@ak.jp.nec.com>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
  • Loading branch information
KaiGai Kohei authored and David Woodhouse committed Jun 27, 2006
1 parent 8a13695 commit 355ed4e
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 2 deletions.
2 changes: 0 additions & 2 deletions fs/jffs2/fs.c
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,6 @@ void jffs2_clear_inode (struct inode *inode)
struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);

D1(printk(KERN_DEBUG "jffs2_clear_inode(): ino #%lu mode %o\n", inode->i_ino, inode->i_mode));

jffs2_xattr_delete_inode(c, f->inocache);
jffs2_do_clear_inode(c, f);
}

Expand Down
1 change: 1 addition & 0 deletions fs/jffs2/gc.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ int jffs2_garbage_collect_pass(struct jffs2_sb_info *c)
D1(printk(KERN_DEBUG "Skipping check of ino #%d with nlink zero\n",
ic->ino));
spin_unlock(&c->inocache_lock);
jffs2_xattr_delete_inode(c, ic);
continue;
}
switch(ic->state) {
Expand Down
3 changes: 3 additions & 0 deletions fs/jffs2/nodelist.c
Original file line number Diff line number Diff line change
Expand Up @@ -906,6 +906,9 @@ void jffs2_del_ino_cache(struct jffs2_sb_info *c, struct jffs2_inode_cache *old)
{
struct jffs2_inode_cache **prev;

#ifdef CONFIG_JFFS2_FS_XATTR
BUG_ON(old->xref);
#endif
dbg_inocache("del %p (ino #%u)\n", old, old->ino);
spin_lock(&c->inocache_lock);

Expand Down
1 change: 1 addition & 0 deletions fs/jffs2/readinode.c
Original file line number Diff line number Diff line change
Expand Up @@ -968,6 +968,7 @@ void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f)
struct jffs2_full_dirent *fd, *fds;
int deleted;

jffs2_xattr_delete_inode(c, f->inocache);
down(&f->sem);
deleted = f->inocache && !f->inocache->nlink;

Expand Down

0 comments on commit 355ed4e

Please sign in to comment.