Commit 1f5af5fc authored by Kent Overstreet's avatar Kent Overstreet

bcachefs: %pg is banished

not portable to userspace
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent c13fbb7d
...@@ -557,7 +557,7 @@ void bch2_target_to_text(struct printbuf *out, struct bch_fs *c, unsigned v) ...@@ -557,7 +557,7 @@ void bch2_target_to_text(struct printbuf *out, struct bch_fs *c, unsigned v)
: NULL; : NULL;
if (ca && percpu_ref_tryget(&ca->io_ref)) { if (ca && percpu_ref_tryget(&ca->io_ref)) {
prt_printf(out, "/dev/%pg", ca->disk_sb.bdev); prt_printf(out, "/dev/%s", ca->name);
percpu_ref_put(&ca->io_ref); percpu_ref_put(&ca->io_ref);
} else if (ca) { } else if (ca) {
prt_printf(out, "offline device %u", t.dev); prt_printf(out, "offline device %u", t.dev);
......
...@@ -170,8 +170,12 @@ int bch2_sb_realloc(struct bch_sb_handle *sb, unsigned u64s) ...@@ -170,8 +170,12 @@ int bch2_sb_realloc(struct bch_sb_handle *sb, unsigned u64s)
u64 max_bytes = 512 << sb->sb->layout.sb_max_size_bits; u64 max_bytes = 512 << sb->sb->layout.sb_max_size_bits;
if (new_bytes > max_bytes) { if (new_bytes > max_bytes) {
pr_err("%pg: superblock too big: want %zu but have %llu", struct printbuf buf = PRINTBUF;
sb->bdev, new_bytes, max_bytes);
prt_bdevname(&buf, sb->bdev);
prt_printf(&buf, ": superblock too big: want %zu but have %llu", new_bytes, max_bytes);
pr_err("%s", buf.buf);
printbuf_exit(&buf);
return -BCH_ERR_ENOSPC_sb; return -BCH_ERR_ENOSPC_sb;
} }
} }
......
...@@ -1083,17 +1083,22 @@ static int bch2_dev_in_fs(struct bch_sb_handle *fs, ...@@ -1083,17 +1083,22 @@ static int bch2_dev_in_fs(struct bch_sb_handle *fs,
fs->sb->write_time != sb->sb->write_time) { fs->sb->write_time != sb->sb->write_time) {
struct printbuf buf = PRINTBUF; struct printbuf buf = PRINTBUF;
prt_printf(&buf, "Split brain detected between %pg and %pg:", prt_str(&buf, "Split brain detected between ");
sb->bdev, fs->bdev); prt_bdevname(&buf, sb->bdev);
prt_str(&buf, " and ");
prt_bdevname(&buf, fs->bdev);
prt_char(&buf, ':');
prt_newline(&buf); prt_newline(&buf);
prt_printf(&buf, "seq=%llu but write_time different, got", le64_to_cpu(sb->sb->seq)); prt_printf(&buf, "seq=%llu but write_time different, got", le64_to_cpu(sb->sb->seq));
prt_newline(&buf); prt_newline(&buf);
prt_printf(&buf, "%pg ", fs->bdev); prt_bdevname(&buf, fs->bdev);
prt_char(&buf, ' ');
bch2_prt_datetime(&buf, le64_to_cpu(fs->sb->write_time));; bch2_prt_datetime(&buf, le64_to_cpu(fs->sb->write_time));;
prt_newline(&buf); prt_newline(&buf);
prt_printf(&buf, "%pg ", sb->bdev); prt_bdevname(&buf, sb->bdev);
prt_char(&buf, ' ');
bch2_prt_datetime(&buf, le64_to_cpu(sb->sb->write_time));; bch2_prt_datetime(&buf, le64_to_cpu(sb->sb->write_time));;
prt_newline(&buf); prt_newline(&buf);
...@@ -1109,13 +1114,26 @@ static int bch2_dev_in_fs(struct bch_sb_handle *fs, ...@@ -1109,13 +1114,26 @@ static int bch2_dev_in_fs(struct bch_sb_handle *fs,
u64 seq_from_member = le64_to_cpu(sb->sb->seq); u64 seq_from_member = le64_to_cpu(sb->sb->seq);
if (seq_from_fs && seq_from_fs < seq_from_member) { if (seq_from_fs && seq_from_fs < seq_from_member) {
pr_err("Split brain detected between %pg and %pg:\n" struct printbuf buf = PRINTBUF;
"%pg believes seq of %pg to be %llu, but %pg has %llu\n"
"Not using %pg", prt_str(&buf, "Split brain detected between ");
sb->bdev, fs->bdev, prt_bdevname(&buf, sb->bdev);
fs->bdev, sb->bdev, seq_from_fs, prt_str(&buf, " and ");
sb->bdev, seq_from_member, prt_bdevname(&buf, fs->bdev);
sb->bdev); prt_char(&buf, ':');
prt_newline(&buf);
prt_bdevname(&buf, fs->bdev);
prt_str(&buf, "believes seq of ");
prt_bdevname(&buf, sb->bdev);
prt_printf(&buf, " to be %llu, but ", seq_from_fs);
prt_bdevname(&buf, sb->bdev);
prt_printf(&buf, " has %llu\n", seq_from_member);
prt_str(&buf, "Not using ");
prt_bdevname(&buf, sb->bdev);
pr_err("%s", buf.buf);
printbuf_exit(&buf);
return -BCH_ERR_device_splitbrain; return -BCH_ERR_device_splitbrain;
} }
...@@ -1364,9 +1382,14 @@ static int bch2_dev_attach_bdev(struct bch_fs *c, struct bch_sb_handle *sb) ...@@ -1364,9 +1382,14 @@ static int bch2_dev_attach_bdev(struct bch_fs *c, struct bch_sb_handle *sb)
bch2_dev_sysfs_online(c, ca); bch2_dev_sysfs_online(c, ca);
struct printbuf name = PRINTBUF;
prt_bdevname(&name, ca->disk_sb.bdev);
if (c->sb.nr_devices == 1) if (c->sb.nr_devices == 1)
snprintf(c->name, sizeof(c->name), "%pg", ca->disk_sb.bdev); strlcpy(c->name, name.buf, sizeof(c->name));
snprintf(ca->name, sizeof(ca->name), "%pg", ca->disk_sb.bdev); strlcpy(ca->name, name.buf, sizeof(ca->name));
printbuf_exit(&name);
rebalance_wakeup(c); rebalance_wakeup(c);
return 0; return 0;
......
...@@ -351,6 +351,15 @@ int bch2_save_backtrace(bch_stacktrace *stack, struct task_struct *, unsigned); ...@@ -351,6 +351,15 @@ int bch2_save_backtrace(bch_stacktrace *stack, struct task_struct *, unsigned);
void bch2_prt_backtrace(struct printbuf *, bch_stacktrace *); void bch2_prt_backtrace(struct printbuf *, bch_stacktrace *);
int bch2_prt_task_backtrace(struct printbuf *, struct task_struct *, unsigned); int bch2_prt_task_backtrace(struct printbuf *, struct task_struct *, unsigned);
static inline void prt_bdevname(struct printbuf *out, struct block_device *bdev)
{
#ifdef __KERNEL__
prt_printf(out, "%pg", bdev);
#else
prt_str(out, bdev->name);
#endif
}
#define NR_QUANTILES 15 #define NR_QUANTILES 15
#define QUANTILE_IDX(i) inorder_to_eytzinger0(i, NR_QUANTILES) #define QUANTILE_IDX(i) inorder_to_eytzinger0(i, NR_QUANTILES)
#define QUANTILE_FIRST eytzinger0_first(NR_QUANTILES) #define QUANTILE_FIRST eytzinger0_first(NR_QUANTILES)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment