Lines Matching refs:c

101 const char *dbg_snprintf_key(const struct ubifs_info *c,  in dbg_snprintf_key()  argument
105 int type = key_type(c, key); in dbg_snprintf_key()
107 if (c->key_fmt == UBIFS_SIMPLE_KEY_FMT) { in dbg_snprintf_key()
111 (unsigned long)key_inum(c, key), in dbg_snprintf_key()
117 (unsigned long)key_inum(c, key), in dbg_snprintf_key()
118 get_key_type(type), key_hash(c, key)); in dbg_snprintf_key()
122 (unsigned long)key_inum(c, key), in dbg_snprintf_key()
123 get_key_type(type), key_block(c, key)); in dbg_snprintf_key()
127 (unsigned long)key_inum(c, key), in dbg_snprintf_key()
135 len -= snprintf(p, len, "bad key format %d", c->key_fmt); in dbg_snprintf_key()
233 void ubifs_dump_inode(struct ubifs_info *c, const struct inode *inode) in ubifs_dump_inode() argument
279 ubifs_assert(!mutex_is_locked(&c->tnc_mutex)); in ubifs_dump_inode()
281 lowest_dent_key(c, &key, inode->i_ino); in ubifs_dump_inode()
283 dent = ubifs_tnc_next_ent(c, &key, &nm); in ubifs_dump_inode()
297 key_read(c, &dent->key, &key); in ubifs_dump_inode()
303 void ubifs_dump_node(const struct ubifs_info *c, const void *node) in ubifs_dump_node() argument
421 key_read(c, &ino->key, &key); in ubifs_dump_node()
423 dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN)); in ubifs_dump_node()
456 key_read(c, &dent->key, &key); in ubifs_dump_node()
458 dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN)); in ubifs_dump_node()
480 key_read(c, &dn->key, &key); in ubifs_dump_node()
482 dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN)); in ubifs_dump_node()
512 for (i = 0; i < n && i < c->fanout - 1; i++) { in ubifs_dump_node()
515 br = ubifs_idx_branch(c, idx, i); in ubifs_dump_node()
516 key_read(c, &br->key, &key); in ubifs_dump_node()
520 dbg_snprintf_key(c, &key, key_buf, in ubifs_dump_node()
580 void ubifs_dump_budg(struct ubifs_info *c, const struct ubifs_budg_info *bi) in ubifs_dump_budg() argument
588 spin_lock(&c->space_lock); in ubifs_dump_budg()
601 c->dark_wm, c->dead_wm, c->max_idx_node_sz); in ubifs_dump_budg()
603 if (bi != &c->bi) in ubifs_dump_budg()
612 c->freeable_cnt, c->calc_idx_sz, c->idx_gc_cnt); in ubifs_dump_budg()
614 atomic_long_read(&c->dirty_pg_cnt), in ubifs_dump_budg()
615 atomic_long_read(&c->dirty_zn_cnt), in ubifs_dump_budg()
616 atomic_long_read(&c->clean_zn_cnt)); in ubifs_dump_budg()
617 pr_err("\tgc_lnum %d, ihead_lnum %d\n", c->gc_lnum, c->ihead_lnum); in ubifs_dump_budg()
620 if (c->jheads) in ubifs_dump_budg()
621 for (i = 0; i < c->jhead_cnt; i++) in ubifs_dump_budg()
623 dbg_jhead(c->jheads[i].wbuf.jhead), in ubifs_dump_budg()
624 c->jheads[i].wbuf.lnum); in ubifs_dump_budg()
625 for (rb = rb_first(&c->buds); rb; rb = rb_next(rb)) { in ubifs_dump_budg()
629 list_for_each_entry(bud, &c->old_buds, list) in ubifs_dump_budg()
631 list_for_each_entry(idx_gc, &c->idx_gc, list) in ubifs_dump_budg()
634 pr_err("\tcommit state %d\n", c->cmt_state); in ubifs_dump_budg()
637 available = ubifs_calc_available(c, c->bi.min_idx_lebs); in ubifs_dump_budg()
638 outstanding = c->bi.data_growth + c->bi.dd_growth; in ubifs_dump_budg()
639 free = ubifs_get_free_space_nolock(c); in ubifs_dump_budg()
645 spin_unlock(&c->space_lock); in ubifs_dump_budg()
648 void ubifs_dump_budg(struct ubifs_info *c, const struct ubifs_budg_info *bi) in ubifs_dump_budg() argument
653 void ubifs_dump_lprop(const struct ubifs_info *c, const struct ubifs_lprops *lp) in ubifs_dump_lprop() argument
660 if (spc < c->dead_wm) in ubifs_dump_lprop()
663 dark = ubifs_calc_dark(c, spc); in ubifs_dump_lprop()
667 lp->lnum, lp->free, lp->dirty, c->leb_size - spc, spc, in ubifs_dump_lprop()
671 lp->lnum, lp->free, lp->dirty, c->leb_size - spc, spc, in ubifs_dump_lprop()
718 for (rb = rb_first((struct rb_root *)&c->buds); rb; rb = rb_next(rb)) { in ubifs_dump_lprop()
722 for (i = 0; i < c->jhead_cnt; i++) { in ubifs_dump_lprop()
728 if (c->jheads && in ubifs_dump_lprop()
729 lp->lnum == c->jheads[i].wbuf.lnum) { in ubifs_dump_lprop()
739 if (lp->lnum == c->gc_lnum) in ubifs_dump_lprop()
744 void ubifs_dump_lprops(struct ubifs_info *c) in ubifs_dump_lprops() argument
751 ubifs_get_lp_stats(c, &lst); in ubifs_dump_lprops()
754 for (lnum = c->main_first; lnum < c->leb_cnt; lnum++) { in ubifs_dump_lprops()
755 err = ubifs_read_one_lp(c, lnum, &lp); in ubifs_dump_lprops()
757 ubifs_err(c, "cannot read lprops for LEB %d", lnum); in ubifs_dump_lprops()
761 ubifs_dump_lprop(c, &lp); in ubifs_dump_lprops()
766 void ubifs_dump_lpt_info(struct ubifs_info *c) in ubifs_dump_lpt_info() argument
772 pr_err("\tlpt_sz: %lld\n", c->lpt_sz); in ubifs_dump_lpt_info()
773 pr_err("\tpnode_sz: %d\n", c->pnode_sz); in ubifs_dump_lpt_info()
774 pr_err("\tnnode_sz: %d\n", c->nnode_sz); in ubifs_dump_lpt_info()
775 pr_err("\tltab_sz: %d\n", c->ltab_sz); in ubifs_dump_lpt_info()
776 pr_err("\tlsave_sz: %d\n", c->lsave_sz); in ubifs_dump_lpt_info()
777 pr_err("\tbig_lpt: %d\n", c->big_lpt); in ubifs_dump_lpt_info()
778 pr_err("\tlpt_hght: %d\n", c->lpt_hght); in ubifs_dump_lpt_info()
779 pr_err("\tpnode_cnt: %d\n", c->pnode_cnt); in ubifs_dump_lpt_info()
780 pr_err("\tnnode_cnt: %d\n", c->nnode_cnt); in ubifs_dump_lpt_info()
781 pr_err("\tdirty_pn_cnt: %d\n", c->dirty_pn_cnt); in ubifs_dump_lpt_info()
782 pr_err("\tdirty_nn_cnt: %d\n", c->dirty_nn_cnt); in ubifs_dump_lpt_info()
783 pr_err("\tlsave_cnt: %d\n", c->lsave_cnt); in ubifs_dump_lpt_info()
784 pr_err("\tspace_bits: %d\n", c->space_bits); in ubifs_dump_lpt_info()
785 pr_err("\tlpt_lnum_bits: %d\n", c->lpt_lnum_bits); in ubifs_dump_lpt_info()
786 pr_err("\tlpt_offs_bits: %d\n", c->lpt_offs_bits); in ubifs_dump_lpt_info()
787 pr_err("\tlpt_spc_bits: %d\n", c->lpt_spc_bits); in ubifs_dump_lpt_info()
788 pr_err("\tpcnt_bits: %d\n", c->pcnt_bits); in ubifs_dump_lpt_info()
789 pr_err("\tlnum_bits: %d\n", c->lnum_bits); in ubifs_dump_lpt_info()
790 pr_err("\tLPT root is at %d:%d\n", c->lpt_lnum, c->lpt_offs); in ubifs_dump_lpt_info()
792 c->nhead_lnum, c->nhead_offs); in ubifs_dump_lpt_info()
793 pr_err("\tLPT ltab is at %d:%d\n", c->ltab_lnum, c->ltab_offs); in ubifs_dump_lpt_info()
794 if (c->big_lpt) in ubifs_dump_lpt_info()
796 c->lsave_lnum, c->lsave_offs); in ubifs_dump_lpt_info()
797 for (i = 0; i < c->lpt_lebs; i++) in ubifs_dump_lpt_info()
799 i + c->lpt_first, c->ltab[i].free, c->ltab[i].dirty, in ubifs_dump_lpt_info()
800 c->ltab[i].tgc, c->ltab[i].cmt); in ubifs_dump_lpt_info()
804 void ubifs_dump_sleb(const struct ubifs_info *c, in ubifs_dump_sleb() argument
816 ubifs_dump_node(c, snod->node); in ubifs_dump_sleb()
820 void ubifs_dump_leb(const struct ubifs_info *c, int lnum) in ubifs_dump_leb() argument
828 buf = __vmalloc(c->leb_size, GFP_NOFS, PAGE_KERNEL); in ubifs_dump_leb()
830 ubifs_err(c, "cannot allocate memory for dumping LEB %d", lnum); in ubifs_dump_leb()
834 sleb = ubifs_scan(c, lnum, 0, buf, 0); in ubifs_dump_leb()
836 ubifs_err(c, "scan error %d", (int)PTR_ERR(sleb)); in ubifs_dump_leb()
847 ubifs_dump_node(c, snod->node); in ubifs_dump_leb()
858 void ubifs_dump_znode(const struct ubifs_info *c, in ubifs_dump_znode() argument
869 zbr = &c->zroot; in ubifs_dump_znode()
875 if (znode->child_cnt <= 0 || znode->child_cnt > c->fanout) { in ubifs_dump_znode()
886 dbg_snprintf_key(c, &zbr->key, key_buf, in ubifs_dump_znode()
891 dbg_snprintf_key(c, &zbr->key, key_buf, in ubifs_dump_znode()
897 void ubifs_dump_heap(struct ubifs_info *c, struct ubifs_lpt_heap *heap, int cat) in ubifs_dump_heap() argument
913 void ubifs_dump_pnode(struct ubifs_info *c, struct ubifs_pnode *pnode, in ubifs_dump_pnode() argument
931 void ubifs_dump_tnc(struct ubifs_info *c) in ubifs_dump_tnc() argument
938 znode = ubifs_tnc_levelorder_next(c->zroot.znode, NULL); in ubifs_dump_tnc()
946 ubifs_dump_znode(c, znode); in ubifs_dump_tnc()
947 znode = ubifs_tnc_levelorder_next(c->zroot.znode, znode); in ubifs_dump_tnc()
952 static int dump_znode(struct ubifs_info *c, struct ubifs_znode *znode, in dump_znode() argument
955 ubifs_dump_znode(c, znode); in dump_znode()
966 void ubifs_dump_index(struct ubifs_info *c) in ubifs_dump_index() argument
968 dbg_walk_index(c, NULL, dump_znode, NULL); in ubifs_dump_index()
979 void dbg_save_space_info(struct ubifs_info *c) in dbg_save_space_info() argument
981 struct ubifs_debug_info *d = c->dbg; in dbg_save_space_info()
984 spin_lock(&c->space_lock); in dbg_save_space_info()
985 memcpy(&d->saved_lst, &c->lst, sizeof(struct ubifs_lp_stats)); in dbg_save_space_info()
986 memcpy(&d->saved_bi, &c->bi, sizeof(struct ubifs_budg_info)); in dbg_save_space_info()
987 d->saved_idx_gc_cnt = c->idx_gc_cnt; in dbg_save_space_info()
1013 freeable_cnt = c->freeable_cnt; in dbg_save_space_info()
1014 c->freeable_cnt = 0; in dbg_save_space_info()
1015 d->saved_free = ubifs_get_free_space_nolock(c); in dbg_save_space_info()
1016 c->freeable_cnt = freeable_cnt; in dbg_save_space_info()
1017 spin_unlock(&c->space_lock); in dbg_save_space_info()
1029 int dbg_check_space_info(struct ubifs_info *c) in dbg_check_space_info() argument
1031 struct ubifs_debug_info *d = c->dbg; in dbg_check_space_info()
1036 spin_lock(&c->space_lock); in dbg_check_space_info()
1037 freeable_cnt = c->freeable_cnt; in dbg_check_space_info()
1038 c->freeable_cnt = 0; in dbg_check_space_info()
1039 free = ubifs_get_free_space_nolock(c); in dbg_check_space_info()
1040 c->freeable_cnt = freeable_cnt; in dbg_check_space_info()
1041 spin_unlock(&c->space_lock); in dbg_check_space_info()
1044 ubifs_err(c, "free space changed from %lld to %lld", in dbg_check_space_info()
1052 ubifs_msg(c, "saved lprops statistics dump"); in dbg_check_space_info()
1054 ubifs_msg(c, "saved budgeting info dump"); in dbg_check_space_info()
1055 ubifs_dump_budg(c, &d->saved_bi); in dbg_check_space_info()
1056 ubifs_msg(c, "saved idx_gc_cnt %d", d->saved_idx_gc_cnt); in dbg_check_space_info()
1057 ubifs_msg(c, "current lprops statistics dump"); in dbg_check_space_info()
1058 ubifs_get_lp_stats(c, &lst); in dbg_check_space_info()
1060 ubifs_msg(c, "current budgeting info dump"); in dbg_check_space_info()
1061 ubifs_dump_budg(c, &c->bi); in dbg_check_space_info()
1076 int dbg_check_synced_i_size(const struct ubifs_info *c, struct inode *inode) in dbg_check_synced_i_size() argument
1081 if (!dbg_is_chk_gen(c)) in dbg_check_synced_i_size()
1089 ubifs_err(c, "ui_size is %lld, synced_i_size is %lld, but inode is clean", in dbg_check_synced_i_size()
1091 ubifs_err(c, "i_ino %lu, i_mode %#x, i_size %lld", inode->i_ino, in dbg_check_synced_i_size()
1114 int dbg_check_dir(struct ubifs_info *c, const struct inode *dir) in dbg_check_dir() argument
1122 if (!dbg_is_chk_gen(c)) in dbg_check_dir()
1128 lowest_dent_key(c, &key, dir->i_ino); in dbg_check_dir()
1132 dent = ubifs_tnc_next_ent(c, &key, &nm); in dbg_check_dir()
1147 key_read(c, &dent->key, &key); in dbg_check_dir()
1152 ubifs_err(c, "directory inode %lu has size %llu, but calculated size is %llu", in dbg_check_dir()
1155 ubifs_dump_inode(c, dir); in dbg_check_dir()
1160 ubifs_err(c, "directory inode %lu has nlink %u, but calculated nlink is %u", in dbg_check_dir()
1162 ubifs_dump_inode(c, dir); in dbg_check_dir()
1183 static int dbg_check_key_order(struct ubifs_info *c, struct ubifs_zbranch *zbr1, in dbg_check_key_order() argument
1191 ubifs_assert(!keys_cmp(c, &zbr1->key, &zbr2->key)); in dbg_check_key_order()
1201 err = ubifs_tnc_read_node(c, zbr1, dent1); in dbg_check_key_order()
1204 err = ubifs_validate_entry(c, dent1); in dbg_check_key_order()
1208 err = ubifs_tnc_read_node(c, zbr2, dent2); in dbg_check_key_order()
1211 err = ubifs_validate_entry(c, dent2); in dbg_check_key_order()
1217 key_read(c, &dent1->key, &key); in dbg_check_key_order()
1218 if (keys_cmp(c, &zbr1->key, &key)) { in dbg_check_key_order()
1219 ubifs_err(c, "1st entry at %d:%d has key %s", zbr1->lnum, in dbg_check_key_order()
1220 zbr1->offs, dbg_snprintf_key(c, &key, key_buf, in dbg_check_key_order()
1222 ubifs_err(c, "but it should have key %s according to tnc", in dbg_check_key_order()
1223 dbg_snprintf_key(c, &zbr1->key, key_buf, in dbg_check_key_order()
1225 ubifs_dump_node(c, dent1); in dbg_check_key_order()
1229 key_read(c, &dent2->key, &key); in dbg_check_key_order()
1230 if (keys_cmp(c, &zbr2->key, &key)) { in dbg_check_key_order()
1231 ubifs_err(c, "2nd entry at %d:%d has key %s", zbr1->lnum, in dbg_check_key_order()
1232 zbr1->offs, dbg_snprintf_key(c, &key, key_buf, in dbg_check_key_order()
1234 ubifs_err(c, "but it should have key %s according to tnc", in dbg_check_key_order()
1235 dbg_snprintf_key(c, &zbr2->key, key_buf, in dbg_check_key_order()
1237 ubifs_dump_node(c, dent2); in dbg_check_key_order()
1250 ubifs_err(c, "2 xent/dent nodes with the same name"); in dbg_check_key_order()
1252 ubifs_err(c, "bad order of colliding key %s", in dbg_check_key_order()
1253 dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN)); in dbg_check_key_order()
1255 ubifs_msg(c, "first node at %d:%d\n", zbr1->lnum, zbr1->offs); in dbg_check_key_order()
1256 ubifs_dump_node(c, dent1); in dbg_check_key_order()
1257 ubifs_msg(c, "second node at %d:%d\n", zbr2->lnum, zbr2->offs); in dbg_check_key_order()
1258 ubifs_dump_node(c, dent2); in dbg_check_key_order()
1274 static int dbg_check_znode(struct ubifs_info *c, struct ubifs_zbranch *zbr) in dbg_check_znode() argument
1280 if (znode->child_cnt <= 0 || znode->child_cnt > c->fanout) { in dbg_check_znode()
1288 if (znode->iip < 0 || znode->iip >= c->fanout) { in dbg_check_znode()
1331 err = ubifs_search_zbranch(c, zp, &zbr->key, &n); in dbg_check_znode()
1345 if (keys_cmp(c, &zp->zbranch[n].key, in dbg_check_znode()
1358 cmp = keys_cmp(c, min, &znode->zbranch[0].key); in dbg_check_znode()
1372 cmp = keys_cmp(c, max, in dbg_check_znode()
1381 if (zbr != &c->zroot) { in dbg_check_znode()
1392 cmp = keys_cmp(c, &znode->zbranch[n - 1].key, in dbg_check_znode()
1400 if (!is_hash_key(c, &znode->zbranch[n].key)) { in dbg_check_znode()
1405 if (znode->level != 0 || c->replaying) in dbg_check_znode()
1412 err = dbg_check_key_order(c, &znode->zbranch[n - 1], in dbg_check_znode()
1459 ubifs_err(c, "failed, error %d", err); in dbg_check_znode()
1460 ubifs_msg(c, "dump of the znode"); in dbg_check_znode()
1461 ubifs_dump_znode(c, znode); in dbg_check_znode()
1463 ubifs_msg(c, "dump of the parent znode"); in dbg_check_znode()
1464 ubifs_dump_znode(c, zp); in dbg_check_znode()
1471 int dbg_check_dir(struct ubifs_info *c, const struct inode *dir) in dbg_check_dir() argument
1476 void dbg_debugfs_exit_fs(struct ubifs_info *c) in dbg_debugfs_exit_fs() argument
1481 int ubifs_debugging_init(struct ubifs_info *c) in ubifs_debugging_init() argument
1485 void ubifs_debugging_exit(struct ubifs_info *c) in ubifs_debugging_exit() argument
1488 int dbg_check_filesystem(struct ubifs_info *c) in dbg_check_filesystem() argument
1492 int dbg_debugfs_init_fs(struct ubifs_info *c) in dbg_debugfs_init_fs() argument
1507 int dbg_check_tnc(struct ubifs_info *c, int extra) in dbg_check_tnc() argument
1513 if (!dbg_is_chk_index(c)) in dbg_check_tnc()
1516 ubifs_assert(mutex_is_locked(&c->tnc_mutex)); in dbg_check_tnc()
1517 if (!c->zroot.znode) in dbg_check_tnc()
1520 znode = ubifs_tnc_postorder_first(c->zroot.znode); in dbg_check_tnc()
1526 zbr = &c->zroot; in dbg_check_tnc()
1530 err = dbg_check_znode(c, zbr); in dbg_check_tnc()
1551 if (prev->level == 0 && znode->level == 0 && !c->replaying && in dbg_check_tnc()
1552 !keys_cmp(c, &prev->zbranch[last].key, in dbg_check_tnc()
1554 err = dbg_check_key_order(c, &prev->zbranch[last], in dbg_check_tnc()
1559 ubifs_msg(c, "first znode"); in dbg_check_tnc()
1560 ubifs_dump_znode(c, prev); in dbg_check_tnc()
1561 ubifs_msg(c, "second znode"); in dbg_check_tnc()
1562 ubifs_dump_znode(c, znode); in dbg_check_tnc()
1569 if (clean_cnt != atomic_long_read(&c->clean_zn_cnt)) { in dbg_check_tnc()
1570 ubifs_err(c, "incorrect clean_zn_cnt %ld, calculated %ld", in dbg_check_tnc()
1571 atomic_long_read(&c->clean_zn_cnt), in dbg_check_tnc()
1575 if (dirty_cnt != atomic_long_read(&c->dirty_zn_cnt)) { in dbg_check_tnc()
1576 ubifs_err(c, "incorrect dirty_zn_cnt %ld, calculated %ld", in dbg_check_tnc()
1577 atomic_long_read(&c->dirty_zn_cnt), in dbg_check_tnc()
1586 int dbg_check_tnc(struct ubifs_info *c, int extra) in dbg_check_tnc() argument
1607 int dbg_walk_index(struct ubifs_info *c, dbg_leaf_callback leaf_cb, in dbg_walk_index() argument
1614 mutex_lock(&c->tnc_mutex); in dbg_walk_index()
1616 if (!c->zroot.znode) { in dbg_walk_index()
1617 c->zroot.znode = ubifs_load_znode(c, &c->zroot, NULL, 0); in dbg_walk_index()
1618 if (IS_ERR(c->zroot.znode)) { in dbg_walk_index()
1619 err = PTR_ERR(c->zroot.znode); in dbg_walk_index()
1620 c->zroot.znode = NULL; in dbg_walk_index()
1630 znode = c->zroot.znode; in dbg_walk_index()
1635 child = ubifs_load_znode(c, zbr, znode, 0); in dbg_walk_index()
1653 err = znode_cb(c, znode, priv); in dbg_walk_index()
1655 ubifs_err(c, "znode checking function returned error %d", in dbg_walk_index()
1657 ubifs_dump_znode(c, znode); in dbg_walk_index()
1664 err = leaf_cb(c, zbr, priv); in dbg_walk_index()
1666 ubifs_err(c, "leaf checking function returned error %d, for leaf at LEB %d:%d", in dbg_walk_index()
1683 child = ubifs_load_znode(c, zbr, znode, idx); in dbg_walk_index()
1703 child = ubifs_load_znode(c, zbr, znode, 0); in dbg_walk_index()
1714 mutex_unlock(&c->tnc_mutex); in dbg_walk_index()
1721 zbr = &c->zroot; in dbg_walk_index()
1722 ubifs_msg(c, "dump of znode at LEB %d:%d", zbr->lnum, zbr->offs); in dbg_walk_index()
1723 ubifs_dump_znode(c, znode); in dbg_walk_index()
1725 mutex_unlock(&c->tnc_mutex); in dbg_walk_index()
1739 static int add_size(struct ubifs_info *c, struct ubifs_znode *znode, void *priv) in add_size() argument
1744 add = ubifs_idx_node_sz(c, znode->child_cnt); in add_size()
1759 int dbg_check_idx_size(struct ubifs_info *c, long long idx_size) in dbg_check_idx_size() argument
1764 if (!dbg_is_chk_index(c)) in dbg_check_idx_size()
1767 err = dbg_walk_index(c, NULL, add_size, &calc); in dbg_check_idx_size()
1769 ubifs_err(c, "error %d while walking the index", err); in dbg_check_idx_size()
1774 ubifs_err(c, "index size check failed: calculated size is %lld, should be %lld", in dbg_check_idx_size()
1839 static struct fsck_inode *add_inode(struct ubifs_info *c, in add_inode() argument
1845 ino_t inum = key_inum_flash(c, &ino->key); in add_inode()
1861 if (inum > c->highest_inum) { in add_inode()
1862 ubifs_err(c, "too high inode number, max. is %lu", in add_inode()
1863 (unsigned long)c->highest_inum); in add_inode()
1871 inode = ilookup(c->vfs_sb, inum); in add_inode()
1952 static struct fsck_inode *read_add_inode(struct ubifs_info *c, in read_add_inode() argument
1966 ino_key_init(c, &key, inum); in read_add_inode()
1967 err = ubifs_lookup_level0(c, &key, &znode, &n); in read_add_inode()
1969 ubifs_err(c, "inode %lu not found in index", (unsigned long)inum); in read_add_inode()
1972 ubifs_err(c, "error %d while looking up inode %lu", in read_add_inode()
1979 ubifs_err(c, "bad node %lu node length %d", in read_add_inode()
1988 err = ubifs_tnc_read_node(c, zbr, ino); in read_add_inode()
1990 ubifs_err(c, "cannot read inode node at LEB %d:%d, error %d", in read_add_inode()
1996 fscki = add_inode(c, fsckd, ino); in read_add_inode()
1999 ubifs_err(c, "error %ld while adding inode %lu node", in read_add_inode()
2023 static int check_leaf(struct ubifs_info *c, struct ubifs_zbranch *zbr, in check_leaf() argument
2029 int err, type = key_type(c, &zbr->key); in check_leaf()
2033 ubifs_err(c, "bad leaf length %d (LEB %d:%d)", in check_leaf()
2042 err = ubifs_tnc_read_node(c, zbr, node); in check_leaf()
2044 ubifs_err(c, "cannot read leaf node at LEB %d:%d, error %d", in check_leaf()
2051 fscki = add_inode(c, priv, node); in check_leaf()
2054 ubifs_err(c, "error %d while adding inode node", err); in check_leaf()
2062 ubifs_err(c, "unexpected node type %d at LEB %d:%d", in check_leaf()
2069 if (le64_to_cpu(ch->sqnum) > c->max_sqnum) { in check_leaf()
2070 ubifs_err(c, "too high sequence number, max. is %llu", in check_leaf()
2071 c->max_sqnum); in check_leaf()
2086 inum = key_inum_flash(c, &dn->key); in check_leaf()
2087 fscki = read_add_inode(c, priv, inum); in check_leaf()
2090 ubifs_err(c, "error %d while processing data node and trying to find inode node %lu", in check_leaf()
2096 blk_offs = key_block_flash(c, &dn->key); in check_leaf()
2100 ubifs_err(c, "data node at LEB %d:%d is not within inode size %lld", in check_leaf()
2112 err = ubifs_validate_entry(c, dent); in check_leaf()
2121 fscki = read_add_inode(c, priv, inum); in check_leaf()
2124 ubifs_err(c, "error %d while processing entry node and trying to find inode node %lu", in check_leaf()
2132 inum = key_inum_flash(c, &dent->key); in check_leaf()
2133 fscki1 = read_add_inode(c, priv, inum); in check_leaf()
2136 ubifs_err(c, "error %d while processing entry node and trying to find parent inode node %lu", in check_leaf()
2159 ubifs_msg(c, "dump of node at LEB %d:%d", zbr->lnum, zbr->offs); in check_leaf()
2160 ubifs_dump_node(c, node); in check_leaf()
2188 static int check_inodes(struct ubifs_info *c, struct fsck_data *fsckd) in check_inodes() argument
2210 ubifs_err(c, "directory inode %lu has %d direntries which refer it, but should be 1", in check_inodes()
2217 ubifs_err(c, "root inode %lu has non-zero (%d) direntries which refer it", in check_inodes()
2223 ubifs_err(c, "directory inode %lu size is %lld, but calculated size is %lld", in check_inodes()
2229 ubifs_err(c, "directory inode %lu nlink is %d, but calculated nlink is %d", in check_inodes()
2236 ubifs_err(c, "inode %lu nlink is %d, but calculated nlink is %d", in check_inodes()
2243 ubifs_err(c, "inode %lu has xattr size %u, but calculated size is %lld", in check_inodes()
2249 ubifs_err(c, "inode %lu has %u xattrs, but calculated count is %lld", in check_inodes()
2255 ubifs_err(c, "inode %lu has xattr names' size %u, but calculated names' size is %lld", in check_inodes()
2266 ino_key_init(c, &key, fscki->inum); in check_inodes()
2267 err = ubifs_lookup_level0(c, &key, &znode, &n); in check_inodes()
2269 ubifs_err(c, "inode %lu not found in index", in check_inodes()
2273 ubifs_err(c, "error %d while looking up inode %lu", in check_inodes()
2283 err = ubifs_tnc_read_node(c, zbr, ino); in check_inodes()
2285 ubifs_err(c, "cannot read inode node at LEB %d:%d, error %d", in check_inodes()
2291 ubifs_msg(c, "dump of the inode %lu sitting in LEB %d:%d", in check_inodes()
2293 ubifs_dump_node(c, ino); in check_inodes()
2311 int dbg_check_filesystem(struct ubifs_info *c) in dbg_check_filesystem() argument
2316 if (!dbg_is_chk_fs(c)) in dbg_check_filesystem()
2320 err = dbg_walk_index(c, check_leaf, NULL, &fsckd); in dbg_check_filesystem()
2324 err = check_inodes(c, &fsckd); in dbg_check_filesystem()
2332 ubifs_err(c, "file-system check failed with error %d", err); in dbg_check_filesystem()
2346 int dbg_check_data_nodes_order(struct ubifs_info *c, struct list_head *head) in dbg_check_data_nodes_order() argument
2351 if (!dbg_is_chk_gen(c)) in dbg_check_data_nodes_order()
2363 ubifs_err(c, "bad node type %d", sa->type); in dbg_check_data_nodes_order()
2364 ubifs_dump_node(c, sa->node); in dbg_check_data_nodes_order()
2368 ubifs_err(c, "bad node type %d", sb->type); in dbg_check_data_nodes_order()
2369 ubifs_dump_node(c, sb->node); in dbg_check_data_nodes_order()
2373 inuma = key_inum(c, &sa->key); in dbg_check_data_nodes_order()
2374 inumb = key_inum(c, &sb->key); in dbg_check_data_nodes_order()
2379 ubifs_err(c, "larger inum %lu goes before inum %lu", in dbg_check_data_nodes_order()
2384 blka = key_block(c, &sa->key); in dbg_check_data_nodes_order()
2385 blkb = key_block(c, &sb->key); in dbg_check_data_nodes_order()
2388 ubifs_err(c, "larger block %u goes before %u", blka, blkb); in dbg_check_data_nodes_order()
2392 ubifs_err(c, "two data nodes for the same block"); in dbg_check_data_nodes_order()
2400 ubifs_dump_node(c, sa->node); in dbg_check_data_nodes_order()
2401 ubifs_dump_node(c, sb->node); in dbg_check_data_nodes_order()
2413 int dbg_check_nondata_nodes_order(struct ubifs_info *c, struct list_head *head) in dbg_check_nondata_nodes_order() argument
2418 if (!dbg_is_chk_gen(c)) in dbg_check_nondata_nodes_order()
2431 ubifs_err(c, "bad node type %d", sa->type); in dbg_check_nondata_nodes_order()
2432 ubifs_dump_node(c, sa->node); in dbg_check_nondata_nodes_order()
2437 ubifs_err(c, "bad node type %d", sb->type); in dbg_check_nondata_nodes_order()
2438 ubifs_dump_node(c, sb->node); in dbg_check_nondata_nodes_order()
2443 ubifs_err(c, "non-inode node goes before inode node"); in dbg_check_nondata_nodes_order()
2453 ubifs_err(c, "smaller inode node goes first"); in dbg_check_nondata_nodes_order()
2463 inuma = key_inum(c, &sa->key); in dbg_check_nondata_nodes_order()
2464 inumb = key_inum(c, &sb->key); in dbg_check_nondata_nodes_order()
2469 ubifs_err(c, "larger inum %lu goes before inum %lu", in dbg_check_nondata_nodes_order()
2474 hasha = key_block(c, &sa->key); in dbg_check_nondata_nodes_order()
2475 hashb = key_block(c, &sb->key); in dbg_check_nondata_nodes_order()
2478 ubifs_err(c, "larger hash %u goes before %u", in dbg_check_nondata_nodes_order()
2487 ubifs_msg(c, "dumping first node"); in dbg_check_nondata_nodes_order()
2488 ubifs_dump_node(c, sa->node); in dbg_check_nondata_nodes_order()
2489 ubifs_msg(c, "dumping second node"); in dbg_check_nondata_nodes_order()
2490 ubifs_dump_node(c, sb->node); in dbg_check_nondata_nodes_order()
2501 static int power_cut_emulated(struct ubifs_info *c, int lnum, int write) in power_cut_emulated() argument
2503 struct ubifs_debug_info *d = c->dbg; in power_cut_emulated()
2505 ubifs_assert(dbg_is_tst_rcvry(c)); in power_cut_emulated()
2518 ubifs_warn(c, "failing after %lums", delay); in power_cut_emulated()
2524 ubifs_warn(c, "failing after %lu calls", delay); in power_cut_emulated()
2542 ubifs_warn(c, "failing in super block LEB %d", lnum); in power_cut_emulated()
2546 ubifs_warn(c, "failing in master LEB %d", lnum); in power_cut_emulated()
2547 } else if (lnum >= UBIFS_LOG_LNUM && lnum <= c->log_last) { in power_cut_emulated()
2552 ubifs_warn(c, "failing in log LEB %d", lnum); in power_cut_emulated()
2553 } else if (lnum >= c->lpt_first && lnum <= c->lpt_last) { in power_cut_emulated()
2558 ubifs_warn(c, "failing in LPT LEB %d", lnum); in power_cut_emulated()
2559 } else if (lnum >= c->orph_first && lnum <= c->orph_last) { in power_cut_emulated()
2564 ubifs_warn(c, "failing in orphan LEB %d", lnum); in power_cut_emulated()
2565 } else if (lnum == c->ihead_lnum) { in power_cut_emulated()
2568 ubifs_warn(c, "failing in index head LEB %d", lnum); in power_cut_emulated()
2569 } else if (c->jheads && lnum == c->jheads[GCHD].wbuf.lnum) { in power_cut_emulated()
2572 ubifs_warn(c, "failing in GC head LEB %d", lnum); in power_cut_emulated()
2573 } else if (write && !RB_EMPTY_ROOT(&c->buds) && in power_cut_emulated()
2574 !ubifs_search_bud(c, lnum)) { in power_cut_emulated()
2577 ubifs_warn(c, "failing in non-bud LEB %d", lnum); in power_cut_emulated()
2578 } else if (c->cmt_state == COMMIT_RUNNING_BACKGROUND || in power_cut_emulated()
2579 c->cmt_state == COMMIT_RUNNING_REQUIRED) { in power_cut_emulated()
2582 ubifs_warn(c, "failing in bud LEB %d commit running", lnum); in power_cut_emulated()
2586 ubifs_warn(c, "failing in bud LEB %d commit not running", lnum); in power_cut_emulated()
2590 ubifs_warn(c, "========== Power cut emulated =========="); in power_cut_emulated()
2595 static int corrupt_data(const struct ubifs_info *c, const void *buf, in corrupt_data() argument
2603 to = min(len, ALIGN(from + 1, c->max_write_size)); in corrupt_data()
2605 ubifs_warn(c, "filled bytes %u-%u with %s", from, to - 1, in corrupt_data()
2616 int dbg_leb_write(struct ubifs_info *c, int lnum, const void *buf, in dbg_leb_write() argument
2621 if (c->dbg->pc_happened) in dbg_leb_write()
2624 failing = power_cut_emulated(c, lnum, 1); in dbg_leb_write()
2626 len = corrupt_data(c, buf, len); in dbg_leb_write()
2627 ubifs_warn(c, "actually write %d bytes to LEB %d:%d (the buffer was corrupted)", in dbg_leb_write()
2630 err = ubi_leb_write(c->ubi, lnum, buf, offs, len); in dbg_leb_write()
2638 int dbg_leb_change(struct ubifs_info *c, int lnum, const void *buf, in dbg_leb_change() argument
2643 if (c->dbg->pc_happened) in dbg_leb_change()
2645 if (power_cut_emulated(c, lnum, 1)) in dbg_leb_change()
2647 err = ubi_leb_change(c->ubi, lnum, buf, len); in dbg_leb_change()
2650 if (power_cut_emulated(c, lnum, 1)) in dbg_leb_change()
2655 int dbg_leb_unmap(struct ubifs_info *c, int lnum) in dbg_leb_unmap() argument
2659 if (c->dbg->pc_happened) in dbg_leb_unmap()
2661 if (power_cut_emulated(c, lnum, 0)) in dbg_leb_unmap()
2663 err = ubi_leb_unmap(c->ubi, lnum); in dbg_leb_unmap()
2666 if (power_cut_emulated(c, lnum, 0)) in dbg_leb_unmap()
2671 int dbg_leb_map(struct ubifs_info *c, int lnum) in dbg_leb_map() argument
2675 if (c->dbg->pc_happened) in dbg_leb_map()
2677 if (power_cut_emulated(c, lnum, 0)) in dbg_leb_map()
2679 err = ubi_leb_map(c->ubi, lnum); in dbg_leb_map()
2682 if (power_cut_emulated(c, lnum, 0)) in dbg_leb_map()
2730 struct ubifs_info *c = file->private_data; in dfs_file_read() local
2731 struct ubifs_debug_info *d = c->dbg; in dfs_file_read()
2747 val = c->ro_error; in dfs_file_read()
2783 struct ubifs_info *c = file->private_data; in dfs_file_write() local
2784 struct ubifs_debug_info *d = c->dbg; in dfs_file_write()
2801 ubifs_dump_lprops(c); in dfs_file_write()
2805 ubifs_dump_budg(c, &c->bi); in dfs_file_write()
2809 mutex_lock(&c->tnc_mutex); in dfs_file_write()
2810 ubifs_dump_tnc(c); in dfs_file_write()
2811 mutex_unlock(&c->tnc_mutex); in dfs_file_write()
2832 c->ro_error = !!val; in dfs_file_write()
2859 int dbg_debugfs_init_fs(struct ubifs_info *c) in dbg_debugfs_init_fs() argument
2864 struct ubifs_debug_info *d = c->dbg; in dbg_debugfs_init_fs()
2870 c->vi.ubi_num, c->vi.vol_id); in dbg_debugfs_init_fs()
2885 dent = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, c, &dfs_fops); in dbg_debugfs_init_fs()
2891 dent = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, c, &dfs_fops); in dbg_debugfs_init_fs()
2897 dent = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, c, &dfs_fops); in dbg_debugfs_init_fs()
2903 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2910 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2917 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2924 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2931 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2938 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2945 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2957 ubifs_err(c, "cannot create \"%s\" debugfs file or directory, error %d\n", in dbg_debugfs_init_fs()
2966 void dbg_debugfs_exit_fs(struct ubifs_info *c) in dbg_debugfs_exit_fs() argument
2969 debugfs_remove_recursive(c->dbg->dfs_dir); in dbg_debugfs_exit_fs()
3133 int ubifs_debugging_init(struct ubifs_info *c) in ubifs_debugging_init() argument
3135 c->dbg = kzalloc(sizeof(struct ubifs_debug_info), GFP_KERNEL); in ubifs_debugging_init()
3136 if (!c->dbg) in ubifs_debugging_init()
3146 void ubifs_debugging_exit(struct ubifs_info *c) in ubifs_debugging_exit() argument
3148 kfree(c->dbg); in ubifs_debugging_exit()