Commit 2adfa467 authored by Kent Overstreet's avatar Kent Overstreet
Browse files

bcachefs: btree node write errors now print btree node

It turned out a user was wondering why we were going read-only after a
write error, and he didn't realize he didn't have replication enabled -
this will make that more obvious, and we should be printing it anyways.

Link: https://www.reddit.com/r/bcachefs/comments/1jf9akl/large_data_transfers_switched_bcachefs_to_readonly/


Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 739200c5
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
@@ -2117,8 +2117,14 @@ static void btree_node_write_work(struct work_struct *work)
	return;
err:
	set_btree_node_noevict(b);
	bch2_fs_fatal_err_on(!bch2_err_matches(ret, EROFS), c,
			     "writing btree node: %s", bch2_err_str(ret));

	if (!bch2_err_matches(ret, EROFS)) {
		struct printbuf buf = PRINTBUF;
		prt_printf(&buf, "writing btree node: %s\n  ", bch2_err_str(ret));
		bch2_btree_pos_to_text(&buf, c, b);
		bch2_fs_fatal_error(c, "%s", buf.buf);
		printbuf_exit(&buf);
	}
	goto out;
}

@@ -2135,10 +2141,14 @@ static void btree_node_write_endio(struct bio *bio)
	bch2_account_io_completion(ca, BCH_MEMBER_ERROR_write,
				   wbio->submit_time, !bio->bi_status);

	if (ca && bio->bi_status)
		bch_err_dev_ratelimited(ca,
				   "btree write error: %s",
	if (ca && bio->bi_status) {
		struct printbuf buf = PRINTBUF;
		prt_printf(&buf, "btree write error: %s\n  ",
			   bch2_blk_status_to_str(bio->bi_status));
		bch2_btree_pos_to_text(&buf, c, b);
		bch_err_dev_ratelimited(ca, "%s", buf.buf);
		printbuf_exit(&buf);
	}

	if (bio->bi_status) {
		unsigned long flags;