diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-03-28 19:15:53 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-22 17:09:58 -0400 |
commit | 2a6c302fb3a00bd74dfc3882698d290482bc5382 (patch) | |
tree | 41b61442363928fd085ce6f35aca77cadc181c84 | |
parent | e9b9e475eaef1c50e89072e4efc3910ff25a0552 (diff) | |
download | lwn-2a6c302fb3a00bd74dfc3882698d290482bc5382.tar.gz lwn-2a6c302fb3a00bd74dfc3882698d290482bc5382.zip |
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); |