f2fs: don't let the orphan inode counter underflow
Accounting errors from buggy code calling the acquire/release/remove orphan inode interfaces can cause n_orphans to underflow, which will then cause acquire_orphan_inode() to return -ENOSPC on the next operation. This commit guards against that condition. Signed-off-by: Russ Knize <rknize@motorola.com> Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
This commit is contained in:
parent
691c6fd2a2
commit
885166c03c
|
@ -206,6 +206,7 @@ int acquire_orphan_inode(struct f2fs_sb_info *sbi)
|
|||
void release_orphan_inode(struct f2fs_sb_info *sbi)
|
||||
{
|
||||
mutex_lock(&sbi->orphan_inode_mutex);
|
||||
BUG_ON(sbi->n_orphans == 0);
|
||||
sbi->n_orphans--;
|
||||
mutex_unlock(&sbi->orphan_inode_mutex);
|
||||
}
|
||||
|
@ -253,6 +254,7 @@ void remove_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
|
|||
if (orphan->ino == ino) {
|
||||
list_del(&orphan->list);
|
||||
kmem_cache_free(orphan_entry_slab, orphan);
|
||||
BUG_ON(sbi->n_orphans == 0);
|
||||
sbi->n_orphans--;
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue