Commit a7dc10ce authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: Make sure allocation failure errors are logged



The previous patch fixed a bug in allocation path error handling, and it
would've been noticed sooner had it been logged properly.

Generally speaking, errors that shouldn't happen in normal operation and
are being returned up the stack should be logged: the write path was
already logging IO errors, but non IO errors were missed.

Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 548673f8
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -326,6 +326,12 @@ do { \
		bch_err(_c, "%s(): error %s", __func__, bch2_err_str(_ret));\
} while (0)

#define bch_err_fn_ratelimited(_c, _ret)				\
do {									\
	if (should_print_err(_ret))					\
		bch_err_ratelimited(_c, "%s(): error %s", __func__, bch2_err_str(_ret));\
} while (0)

#define bch_err_msg(_c, _ret, _msg, ...)				\
do {									\
	if (should_print_err(_ret))					\
+3 −0
Original line number Diff line number Diff line
@@ -1190,6 +1190,9 @@ bch2_btree_update_start(struct btree_trans *trans, struct btree_path *path,
	return as;
err:
	bch2_btree_update_free(as, trans);
	if (!bch2_err_matches(ret, ENOSPC) &&
	    !bch2_err_matches(ret, EROFS))
		bch_err_fn_ratelimited(c, ret);
	return ERR_PTR(ret);
}

+2 −0
Original line number Diff line number Diff line
@@ -418,6 +418,8 @@ static void bch2_update_unwritten_extent(struct btree_trans *trans,
			continue;
		}

		bch_err_fn_ratelimited(c, ret);

		if (ret)
			return;

+7 −2
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ int bch2_extent_fallocate(struct btree_trans *trans,
		 */
		ret = bch2_disk_reservation_get(c, &disk_res, sectors, new_replicas, 0);
		if (unlikely(ret))
			goto err;
			goto err_noprint;

		bch2_bkey_buf_reassemble(&old, c, k);
	}
@@ -125,7 +125,12 @@ int bch2_extent_fallocate(struct btree_trans *trans,
err:
	if (!ret && sectors_allocated)
		bch2_increment_clock(c, sectors_allocated, WRITE);

	if (should_print_err(ret))
		bch_err_inum_offset_ratelimited(c,
			inum.inum,
			iter->pos.offset << 9,
			"%s(): error: %s", __func__, bch2_err_str(ret));
err_noprint:
	bch2_open_buckets_put(c, &open_buckets);
	bch2_disk_reservation_put(c, &disk_res);
	bch2_bkey_buf_exit(&new, c);
+4 −0
Original line number Diff line number Diff line
@@ -1463,6 +1463,10 @@ static void __bch2_write(struct bch_write_op *op)
			op->flags |= BCH_WRITE_DONE;

			if (ret < 0) {
				bch_err_inum_offset_ratelimited(c,
					op->pos.inode,
					op->pos.offset << 9,
					"%s(): error: %s", __func__, bch2_err_str(ret));
				op->error = ret;
				break;
			}