Commit 353739f1 authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: Fix btree_iter_peek_prev() at end of inode



At the end of the inode, on an extents iterator, peek_slot() has to
advance to the next position to avoid returning a 0 size extent, which
is not allowed.

Changing iter->pos confuses peek_prev(), but we don't need to call
peek_slot() in this case.

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent c4f89a1d
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -2577,7 +2577,10 @@ struct bkey_s_c bch2_btree_iter_peek_prev_min(struct btree_trans *trans, struct
					      struct bpos end)
{
	if ((iter->flags & (BTREE_ITER_is_extents|BTREE_ITER_filter_snapshots)) &&
	   !bkey_eq(iter->pos, POS_MAX)) {
	   !bkey_eq(iter->pos, POS_MAX) &&
	   !((iter->flags & BTREE_ITER_is_extents) &&
	     iter->pos.offset == U64_MAX)) {

		/*
		 * bkey_start_pos(), for extents, is not monotonically
		 * increasing until after filtering for snapshots: