Btrfs: do not continue if out of memory happens
If out of memory happens, we should return -ENOMEM directly to the caller rather than continue the work. Signed-off-by: Wang Shilong <wangsl-fnst@cn.fujitsu.com> Signed-off-by: Josef Bacik <jbacik@fusionio.com>
This commit is contained in:
committed by
Josef Bacik
parent
9c931c5ab2
commit
e36902d4cc
@@ -352,6 +352,8 @@ static int __resolve_indirect_refs(struct btrfs_fs_info *fs_info,
|
|||||||
err = __resolve_indirect_ref(fs_info, search_commit_root,
|
err = __resolve_indirect_ref(fs_info, search_commit_root,
|
||||||
time_seq, ref, parents,
|
time_seq, ref, parents,
|
||||||
extent_item_pos);
|
extent_item_pos);
|
||||||
|
if (err == -ENOMEM)
|
||||||
|
goto out;
|
||||||
if (err)
|
if (err)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -367,7 +369,7 @@ static int __resolve_indirect_refs(struct btrfs_fs_info *fs_info,
|
|||||||
new_ref = kmalloc(sizeof(*new_ref), GFP_NOFS);
|
new_ref = kmalloc(sizeof(*new_ref), GFP_NOFS);
|
||||||
if (!new_ref) {
|
if (!new_ref) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
break;
|
goto out;
|
||||||
}
|
}
|
||||||
memcpy(new_ref, ref, sizeof(*ref));
|
memcpy(new_ref, ref, sizeof(*ref));
|
||||||
new_ref->parent = node->val;
|
new_ref->parent = node->val;
|
||||||
@@ -377,7 +379,7 @@ static int __resolve_indirect_refs(struct btrfs_fs_info *fs_info,
|
|||||||
}
|
}
|
||||||
ulist_reinit(parents);
|
ulist_reinit(parents);
|
||||||
}
|
}
|
||||||
|
out:
|
||||||
ulist_free(parents);
|
ulist_free(parents);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user