diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-03-28 19:15:53 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-05-12 19:42:31 -0400 |
commit | e0aeb8eb4cc4395e973ffc16eb5de8edaff5113f (patch) | |
tree | 71efc9d4b462223b258b0048b990b4ecbb0ce6b6 | |
parent | 4532808705e3905821feba0ca86c6e5c09a527c3 (diff) |
bcachefs: Check return code from need_whiteout_for_snapshot()
This could return a transaction restart; we need to check for that.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/btree_update_leaf.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/bcachefs/btree_update_leaf.c b/fs/bcachefs/btree_update_leaf.c index ba3191016575..da9840edc023 100644 --- a/fs/bcachefs/btree_update_leaf.c +++ b/fs/bcachefs/btree_update_leaf.c @@ -1426,10 +1426,15 @@ int bch2_trans_update_extent(struct btree_trans *trans, update->k.p = k.k->p; update->k.p.snapshot = insert->k.p.snapshot; - if (insert->k.p.snapshot != k.k->p.snapshot || - (btree_type_has_snapshots(btree_id) && - need_whiteout_for_snapshot(trans, btree_id, update->k.p))) + if (insert->k.p.snapshot != k.k->p.snapshot) { update->k.type = KEY_TYPE_whiteout; + } else if (btree_type_has_snapshots(btree_id)) { + ret = need_whiteout_for_snapshot(trans, btree_id, update->k.p); + if (ret < 0) + goto err; + if (ret) + update->k.type = KEY_TYPE_whiteout; + } ret = bch2_btree_insert_nonextent(trans, btree_id, update, BTREE_UPDATE_INTERNAL_SNAPSHOT_NODE|flags); |