diff --git a/fs/ubifs/debug.c b/fs/ubifs/debug.c index 69e287e2..bc8396b 100644 --- a/fs/ubifs/debug.c +++ b/fs/ubifs/debug.c @@ -310,6 +310,7 @@ void ubifs_dump_node(const struct ubifs_info *c, const void *node) pr_err("Not a node, first %zu bytes:", UBIFS_CH_SZ); print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 32, 1, (void *)node, UBIFS_CH_SZ, 1); + pr_err("magic 0x%08x\n", le32_to_cpu(ch->magic)); return; } diff --git a/fs/ubifs/io.c b/fs/ubifs/io.c index 97be412..e2ddc55 100644 --- a/fs/ubifs/io.c +++ b/fs/ubifs/io.c @@ -984,8 +984,10 @@ int ubifs_read_node(const struct ubifs_info *c, void *buf, int type, int len, ubifs_assert(type >= 0 && type < UBIFS_NODE_TYPES_CNT); err = ubifs_leb_read(c, lnum, buf, offs, len, 0); - if (err && err != -EBADMSG) + if (err && err != -EBADMSG) { + dbg_gen("ubifs_leb_read ret %d", err); return err; + } if (type != ch->node_type) { ubifs_errc(c, "bad node type (%d but expected %d)", @@ -1010,7 +1012,7 @@ int ubifs_read_node(const struct ubifs_info *c, void *buf, int type, int len, out: ubifs_errc(c, "bad node at LEB %d:%d, LEB mapping status %d", lnum, offs, ubi_is_mapped(c->ubi, lnum)); - if (!c->probing) { + if (!c->probing || c->mounting) { ubifs_dump_node(c, buf); dump_stack(); } diff --git a/fs/ubifs/sb.c b/fs/ubifs/sb.c index 3cbb904..b96f4b7 100644 --- a/fs/ubifs/sb.c +++ b/fs/ubifs/sb.c @@ -493,6 +493,7 @@ struct ubifs_sb_node *ubifs_read_sb_node(struct ubifs_info *c) err = ubifs_read_node(c, sup, UBIFS_SB_NODE, UBIFS_SB_NODE_SZ, UBIFS_SB_LNUM, 0); if (err) { + dbg_gen("ubifs_read_node err %d", err); kfree(sup); return ERR_PTR(err); } @@ -530,13 +531,16 @@ int ubifs_read_superblock(struct ubifs_info *c) if (c->empty) { err = create_default_filesystem(c); + dbg_gen("create_default_filesystem ret %d", err); if (err) return err; } sup = ubifs_read_sb_node(c); - if (IS_ERR(sup)) + if (IS_ERR(sup)) { + dbg_gen("ubifs_read_sb_node ret %ld", PTR_ERR(sup)); return PTR_ERR(sup); + } c->fmt_version = le32_to_cpu(sup->fmt_version); c->ro_compat_version = le32_to_cpu(sup->ro_compat_version); @@ -558,6 +562,7 @@ int ubifs_read_superblock(struct ubifs_info *c) err = -EROFS; } else err = -EINVAL; + dbg_gen("ubifs_assert ret %d", err); goto out; } @@ -633,6 +638,7 @@ int ubifs_read_superblock(struct ubifs_info *c) c->old_leb_cnt, c->leb_cnt); sup->leb_cnt = cpu_to_le32(c->leb_cnt); err = ubifs_write_sb_node(c, sup); + dbg_gen("ubifs_write_sb_node ret %d", err); if (err) goto out; c->old_leb_cnt = c->leb_cnt; @@ -650,6 +656,7 @@ int ubifs_read_superblock(struct ubifs_info *c) c->main_first = c->leb_cnt - c->main_lebs; err = validate_sb(c, sup); + dbg_gen("validate_sb ret %d", err); out: kfree(sup); return err; diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h index ddf9f6b9..33e6948 100644 --- a/fs/ubifs/ubifs.h +++ b/fs/ubifs/ubifs.h @@ -1788,7 +1788,7 @@ void ubifs_warn(const struct ubifs_info *c, const char *fmt, ...); */ #define ubifs_errc(c, fmt, ...) \ do { \ - if (!(c)->probing) \ + if (!(c)->probing || (c)->mounting) \ ubifs_err(c, fmt, ##__VA_ARGS__); \ } while (0)