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 <konishi.ryusuke@lab.ntt.co.jp>
This commit is contained in:
parent
59a3759d0f
commit
62013ab5d5
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue