From: Ryusuke Konishi Date: Sat, 30 May 2009 12:50:58 +0000 (+0900) Subject: nilfs2: fix bh leak in nilfs_cpfile_delete_checkpoints function X-Git-Tag: v2.6.30-rc8~12^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=62013ab5d5df297a01ae5863b5c26d758ec0af7f;p=profile%2Fcommon%2Fkernel-common.git nilfs2: fix bh leak in nilfs_cpfile_delete_checkpoints function The nilfs_cpfile_delete_checkpoints() wrongly skips brelse() for the header block of checkpoint file in case of errors. This fixes the leak bug. Signed-off-by: Ryusuke Konishi --- diff --git a/fs/nilfs2/cpfile.c b/fs/nilfs2/cpfile.c index e90b60d..300f1cd 100644 --- a/fs/nilfs2/cpfile.c +++ b/fs/nilfs2/cpfile.c @@ -311,7 +311,7 @@ int nilfs_cpfile_delete_checkpoints(struct inode *cpfile, ret = nilfs_cpfile_get_checkpoint_block(cpfile, cno, 0, &cp_bh); if (ret < 0) { if (ret != -ENOENT) - goto out_sem; + goto out_header; /* skip hole */ ret = 0; continue; @@ -344,7 +344,7 @@ int nilfs_cpfile_delete_checkpoints(struct inode *cpfile, continue; printk(KERN_ERR "%s: cannot delete block\n", __func__); - goto out_sem; + goto out_header; } } @@ -361,6 +361,8 @@ int nilfs_cpfile_delete_checkpoints(struct inode *cpfile, nilfs_mdt_mark_dirty(cpfile); kunmap_atomic(kaddr, KM_USER0); } + + out_header: brelse(header_bh); out_sem: