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
278 ubifs_assert(!mutex_is_locked(&c->tnc_mutex)); in ubifs_dump_inode()
280 lowest_dent_key(c, &key, inode->i_ino); in ubifs_dump_inode()
282 dent = ubifs_tnc_next_ent(c, &key, &nm); in ubifs_dump_inode()
296 key_read(c, &dent->key, &key); in ubifs_dump_inode()
301 void ubifs_dump_node(const struct ubifs_info *c, const void *node) in ubifs_dump_node() argument
419 key_read(c, &ino->key, &key); in ubifs_dump_node()
421 dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN)); in ubifs_dump_node()
454 key_read(c, &dent->key, &key); in ubifs_dump_node()
456 dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN)); in ubifs_dump_node()
478 key_read(c, &dn->key, &key); in ubifs_dump_node()
480 dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN)); in ubifs_dump_node()
510 for (i = 0; i < n && i < c->fanout - 1; i++) { in ubifs_dump_node()
513 br = ubifs_idx_branch(c, idx, i); in ubifs_dump_node()
514 key_read(c, &br->key, &key); in ubifs_dump_node()
518 dbg_snprintf_key(c, &key, key_buf, in ubifs_dump_node()
577 void ubifs_dump_budg(struct ubifs_info *c, const struct ubifs_budg_info *bi) in ubifs_dump_budg() argument
585 spin_lock(&c->space_lock); in ubifs_dump_budg()
598 c->dark_wm, c->dead_wm, c->max_idx_node_sz); in ubifs_dump_budg()
600 if (bi != &c->bi) in ubifs_dump_budg()
609 c->freeable_cnt, c->calc_idx_sz, c->idx_gc_cnt); in ubifs_dump_budg()
611 atomic_long_read(&c->dirty_pg_cnt), in ubifs_dump_budg()
612 atomic_long_read(&c->dirty_zn_cnt), in ubifs_dump_budg()
613 atomic_long_read(&c->clean_zn_cnt)); in ubifs_dump_budg()
614 pr_err("\tgc_lnum %d, ihead_lnum %d\n", c->gc_lnum, c->ihead_lnum); in ubifs_dump_budg()
617 if (c->jheads) in ubifs_dump_budg()
618 for (i = 0; i < c->jhead_cnt; i++) in ubifs_dump_budg()
620 dbg_jhead(c->jheads[i].wbuf.jhead), in ubifs_dump_budg()
621 c->jheads[i].wbuf.lnum); in ubifs_dump_budg()
622 for (rb = rb_first(&c->buds); rb; rb = rb_next(rb)) { in ubifs_dump_budg()
626 list_for_each_entry(bud, &c->old_buds, list) in ubifs_dump_budg()
628 list_for_each_entry(idx_gc, &c->idx_gc, list) in ubifs_dump_budg()
631 pr_err("\tcommit state %d\n", c->cmt_state); in ubifs_dump_budg()
634 available = ubifs_calc_available(c, c->bi.min_idx_lebs); in ubifs_dump_budg()
635 outstanding = c->bi.data_growth + c->bi.dd_growth; in ubifs_dump_budg()
636 free = ubifs_get_free_space_nolock(c); in ubifs_dump_budg()
642 spin_unlock(&c->space_lock); in ubifs_dump_budg()
645 void ubifs_dump_lprop(const struct ubifs_info *c, const struct ubifs_lprops *lp) in ubifs_dump_lprop() argument
652 if (spc < c->dead_wm) in ubifs_dump_lprop()
655 dark = ubifs_calc_dark(c, spc); in ubifs_dump_lprop()
659 lp->lnum, lp->free, lp->dirty, c->leb_size - spc, spc, in ubifs_dump_lprop()
663 lp->lnum, lp->free, lp->dirty, c->leb_size - spc, spc, in ubifs_dump_lprop()
710 for (rb = rb_first((struct rb_root *)&c->buds); rb; rb = rb_next(rb)) { in ubifs_dump_lprop()
714 for (i = 0; i < c->jhead_cnt; i++) { in ubifs_dump_lprop()
720 if (c->jheads && in ubifs_dump_lprop()
721 lp->lnum == c->jheads[i].wbuf.lnum) { in ubifs_dump_lprop()
731 if (lp->lnum == c->gc_lnum) in ubifs_dump_lprop()
736 void ubifs_dump_lprops(struct ubifs_info *c) in ubifs_dump_lprops() argument
743 ubifs_get_lp_stats(c, &lst); in ubifs_dump_lprops()
746 for (lnum = c->main_first; lnum < c->leb_cnt; lnum++) { in ubifs_dump_lprops()
747 err = ubifs_read_one_lp(c, lnum, &lp); in ubifs_dump_lprops()
749 ubifs_err(c, "cannot read lprops for LEB %d", lnum); in ubifs_dump_lprops()
753 ubifs_dump_lprop(c, &lp); in ubifs_dump_lprops()
758 void ubifs_dump_lpt_info(struct ubifs_info *c) in ubifs_dump_lpt_info() argument
764 pr_err("\tlpt_sz: %lld\n", c->lpt_sz); in ubifs_dump_lpt_info()
765 pr_err("\tpnode_sz: %d\n", c->pnode_sz); in ubifs_dump_lpt_info()
766 pr_err("\tnnode_sz: %d\n", c->nnode_sz); in ubifs_dump_lpt_info()
767 pr_err("\tltab_sz: %d\n", c->ltab_sz); in ubifs_dump_lpt_info()
768 pr_err("\tlsave_sz: %d\n", c->lsave_sz); in ubifs_dump_lpt_info()
769 pr_err("\tbig_lpt: %d\n", c->big_lpt); in ubifs_dump_lpt_info()
770 pr_err("\tlpt_hght: %d\n", c->lpt_hght); in ubifs_dump_lpt_info()
771 pr_err("\tpnode_cnt: %d\n", c->pnode_cnt); in ubifs_dump_lpt_info()
772 pr_err("\tnnode_cnt: %d\n", c->nnode_cnt); in ubifs_dump_lpt_info()
773 pr_err("\tdirty_pn_cnt: %d\n", c->dirty_pn_cnt); in ubifs_dump_lpt_info()
774 pr_err("\tdirty_nn_cnt: %d\n", c->dirty_nn_cnt); in ubifs_dump_lpt_info()
775 pr_err("\tlsave_cnt: %d\n", c->lsave_cnt); in ubifs_dump_lpt_info()
776 pr_err("\tspace_bits: %d\n", c->space_bits); in ubifs_dump_lpt_info()
777 pr_err("\tlpt_lnum_bits: %d\n", c->lpt_lnum_bits); in ubifs_dump_lpt_info()
778 pr_err("\tlpt_offs_bits: %d\n", c->lpt_offs_bits); in ubifs_dump_lpt_info()
779 pr_err("\tlpt_spc_bits: %d\n", c->lpt_spc_bits); in ubifs_dump_lpt_info()
780 pr_err("\tpcnt_bits: %d\n", c->pcnt_bits); in ubifs_dump_lpt_info()
781 pr_err("\tlnum_bits: %d\n", c->lnum_bits); in ubifs_dump_lpt_info()
782 pr_err("\tLPT root is at %d:%d\n", c->lpt_lnum, c->lpt_offs); in ubifs_dump_lpt_info()
784 c->nhead_lnum, c->nhead_offs); in ubifs_dump_lpt_info()
785 pr_err("\tLPT ltab is at %d:%d\n", c->ltab_lnum, c->ltab_offs); in ubifs_dump_lpt_info()
786 if (c->big_lpt) in ubifs_dump_lpt_info()
788 c->lsave_lnum, c->lsave_offs); in ubifs_dump_lpt_info()
789 for (i = 0; i < c->lpt_lebs; i++) in ubifs_dump_lpt_info()
791 i + c->lpt_first, c->ltab[i].free, c->ltab[i].dirty, in ubifs_dump_lpt_info()
792 c->ltab[i].tgc, c->ltab[i].cmt); in ubifs_dump_lpt_info()
796 void ubifs_dump_sleb(const struct ubifs_info *c, in ubifs_dump_sleb() argument
808 ubifs_dump_node(c, snod->node); in ubifs_dump_sleb()
812 void ubifs_dump_leb(const struct ubifs_info *c, int lnum) in ubifs_dump_leb() argument
820 buf = __vmalloc(c->leb_size, GFP_NOFS, PAGE_KERNEL); in ubifs_dump_leb()
822 ubifs_err(c, "cannot allocate memory for dumping LEB %d", lnum); in ubifs_dump_leb()
826 sleb = ubifs_scan(c, lnum, 0, buf, 0); in ubifs_dump_leb()
828 ubifs_err(c, "scan error %d", (int)PTR_ERR(sleb)); in ubifs_dump_leb()
839 ubifs_dump_node(c, snod->node); in ubifs_dump_leb()
850 void ubifs_dump_znode(const struct ubifs_info *c, in ubifs_dump_znode() argument
861 zbr = &c->zroot; in ubifs_dump_znode()
867 if (znode->child_cnt <= 0 || znode->child_cnt > c->fanout) { in ubifs_dump_znode()
878 dbg_snprintf_key(c, &zbr->key, key_buf, in ubifs_dump_znode()
883 dbg_snprintf_key(c, &zbr->key, key_buf, in ubifs_dump_znode()
889 void ubifs_dump_heap(struct ubifs_info *c, struct ubifs_lpt_heap *heap, int cat) in ubifs_dump_heap() argument
905 void ubifs_dump_pnode(struct ubifs_info *c, struct ubifs_pnode *pnode, in ubifs_dump_pnode() argument
923 void ubifs_dump_tnc(struct ubifs_info *c) in ubifs_dump_tnc() argument
930 znode = ubifs_tnc_levelorder_next(c->zroot.znode, NULL); in ubifs_dump_tnc()
938 ubifs_dump_znode(c, znode); in ubifs_dump_tnc()
939 znode = ubifs_tnc_levelorder_next(c->zroot.znode, znode); in ubifs_dump_tnc()
944 static int dump_znode(struct ubifs_info *c, struct ubifs_znode *znode, in dump_znode() argument
947 ubifs_dump_znode(c, znode); in dump_znode()
958 void ubifs_dump_index(struct ubifs_info *c) in ubifs_dump_index() argument
960 dbg_walk_index(c, NULL, dump_znode, NULL); in ubifs_dump_index()
970 void dbg_save_space_info(struct ubifs_info *c) in dbg_save_space_info() argument
972 struct ubifs_debug_info *d = c->dbg; in dbg_save_space_info()
975 spin_lock(&c->space_lock); in dbg_save_space_info()
976 memcpy(&d->saved_lst, &c->lst, sizeof(struct ubifs_lp_stats)); in dbg_save_space_info()
977 memcpy(&d->saved_bi, &c->bi, sizeof(struct ubifs_budg_info)); in dbg_save_space_info()
978 d->saved_idx_gc_cnt = c->idx_gc_cnt; in dbg_save_space_info()
1004 freeable_cnt = c->freeable_cnt; in dbg_save_space_info()
1005 c->freeable_cnt = 0; in dbg_save_space_info()
1006 d->saved_free = ubifs_get_free_space_nolock(c); in dbg_save_space_info()
1007 c->freeable_cnt = freeable_cnt; in dbg_save_space_info()
1008 spin_unlock(&c->space_lock); in dbg_save_space_info()
1020 int dbg_check_space_info(struct ubifs_info *c) in dbg_check_space_info() argument
1022 struct ubifs_debug_info *d = c->dbg; in dbg_check_space_info()
1027 spin_lock(&c->space_lock); in dbg_check_space_info()
1028 freeable_cnt = c->freeable_cnt; in dbg_check_space_info()
1029 c->freeable_cnt = 0; in dbg_check_space_info()
1030 free = ubifs_get_free_space_nolock(c); in dbg_check_space_info()
1031 c->freeable_cnt = freeable_cnt; in dbg_check_space_info()
1032 spin_unlock(&c->space_lock); in dbg_check_space_info()
1035 ubifs_err(c, "free space changed from %lld to %lld", in dbg_check_space_info()
1043 ubifs_msg(c, "saved lprops statistics dump"); in dbg_check_space_info()
1045 ubifs_msg(c, "saved budgeting info dump"); in dbg_check_space_info()
1046 ubifs_dump_budg(c, &d->saved_bi); in dbg_check_space_info()
1047 ubifs_msg(c, "saved idx_gc_cnt %d", d->saved_idx_gc_cnt); in dbg_check_space_info()
1048 ubifs_msg(c, "current lprops statistics dump"); in dbg_check_space_info()
1049 ubifs_get_lp_stats(c, &lst); in dbg_check_space_info()
1051 ubifs_msg(c, "current budgeting info dump"); in dbg_check_space_info()
1052 ubifs_dump_budg(c, &c->bi); in dbg_check_space_info()
1067 int dbg_check_synced_i_size(const struct ubifs_info *c, struct inode *inode) in dbg_check_synced_i_size() argument
1072 if (!dbg_is_chk_gen(c)) in dbg_check_synced_i_size()
1080 ubifs_err(c, "ui_size is %lld, synced_i_size is %lld, but inode is clean", in dbg_check_synced_i_size()
1082 ubifs_err(c, "i_ino %lu, i_mode %#x, i_size %lld", inode->i_ino, in dbg_check_synced_i_size()
1105 int dbg_check_dir(struct ubifs_info *c, const struct inode *dir) in dbg_check_dir() argument
1113 if (!dbg_is_chk_gen(c)) in dbg_check_dir()
1119 lowest_dent_key(c, &key, dir->i_ino); in dbg_check_dir()
1123 dent = ubifs_tnc_next_ent(c, &key, &nm); in dbg_check_dir()
1138 key_read(c, &dent->key, &key); in dbg_check_dir()
1143 ubifs_err(c, "directory inode %lu has size %llu, but calculated size is %llu", in dbg_check_dir()
1146 ubifs_dump_inode(c, dir); in dbg_check_dir()
1151 ubifs_err(c, "directory inode %lu has nlink %u, but calculated nlink is %u", in dbg_check_dir()
1153 ubifs_dump_inode(c, dir); in dbg_check_dir()
1174 static int dbg_check_key_order(struct ubifs_info *c, struct ubifs_zbranch *zbr1, in dbg_check_key_order() argument
1182 ubifs_assert(!keys_cmp(c, &zbr1->key, &zbr2->key)); in dbg_check_key_order()
1192 err = ubifs_tnc_read_node(c, zbr1, dent1); in dbg_check_key_order()
1195 err = ubifs_validate_entry(c, dent1); in dbg_check_key_order()
1199 err = ubifs_tnc_read_node(c, zbr2, dent2); in dbg_check_key_order()
1202 err = ubifs_validate_entry(c, dent2); in dbg_check_key_order()
1208 key_read(c, &dent1->key, &key); in dbg_check_key_order()
1209 if (keys_cmp(c, &zbr1->key, &key)) { in dbg_check_key_order()
1210 ubifs_err(c, "1st entry at %d:%d has key %s", zbr1->lnum, in dbg_check_key_order()
1211 zbr1->offs, dbg_snprintf_key(c, &key, key_buf, in dbg_check_key_order()
1213 ubifs_err(c, "but it should have key %s according to tnc", in dbg_check_key_order()
1214 dbg_snprintf_key(c, &zbr1->key, key_buf, in dbg_check_key_order()
1216 ubifs_dump_node(c, dent1); in dbg_check_key_order()
1220 key_read(c, &dent2->key, &key); in dbg_check_key_order()
1221 if (keys_cmp(c, &zbr2->key, &key)) { in dbg_check_key_order()
1222 ubifs_err(c, "2nd entry at %d:%d has key %s", zbr1->lnum, in dbg_check_key_order()
1223 zbr1->offs, dbg_snprintf_key(c, &key, key_buf, in dbg_check_key_order()
1225 ubifs_err(c, "but it should have key %s according to tnc", in dbg_check_key_order()
1226 dbg_snprintf_key(c, &zbr2->key, key_buf, in dbg_check_key_order()
1228 ubifs_dump_node(c, dent2); in dbg_check_key_order()
1241 ubifs_err(c, "2 xent/dent nodes with the same name"); in dbg_check_key_order()
1243 ubifs_err(c, "bad order of colliding key %s", in dbg_check_key_order()
1244 dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN)); in dbg_check_key_order()
1246 ubifs_msg(c, "first node at %d:%d\n", zbr1->lnum, zbr1->offs); in dbg_check_key_order()
1247 ubifs_dump_node(c, dent1); in dbg_check_key_order()
1248 ubifs_msg(c, "second node at %d:%d\n", zbr2->lnum, zbr2->offs); in dbg_check_key_order()
1249 ubifs_dump_node(c, dent2); in dbg_check_key_order()
1265 static int dbg_check_znode(struct ubifs_info *c, struct ubifs_zbranch *zbr) in dbg_check_znode() argument
1271 if (znode->child_cnt <= 0 || znode->child_cnt > c->fanout) { in dbg_check_znode()
1279 if (znode->iip < 0 || znode->iip >= c->fanout) { in dbg_check_znode()
1322 err = ubifs_search_zbranch(c, zp, &zbr->key, &n); in dbg_check_znode()
1336 if (keys_cmp(c, &zp->zbranch[n].key, in dbg_check_znode()
1349 cmp = keys_cmp(c, min, &znode->zbranch[0].key); in dbg_check_znode()
1363 cmp = keys_cmp(c, max, in dbg_check_znode()
1372 if (zbr != &c->zroot) { in dbg_check_znode()
1383 cmp = keys_cmp(c, &znode->zbranch[n - 1].key, in dbg_check_znode()
1391 if (!is_hash_key(c, &znode->zbranch[n].key)) { in dbg_check_znode()
1396 if (znode->level != 0 || c->replaying) in dbg_check_znode()
1403 err = dbg_check_key_order(c, &znode->zbranch[n - 1], in dbg_check_znode()
1450 ubifs_err(c, "failed, error %d", err); in dbg_check_znode()
1451 ubifs_msg(c, "dump of the znode"); in dbg_check_znode()
1452 ubifs_dump_znode(c, znode); in dbg_check_znode()
1454 ubifs_msg(c, "dump of the parent znode"); in dbg_check_znode()
1455 ubifs_dump_znode(c, zp); in dbg_check_znode()
1469 int dbg_check_tnc(struct ubifs_info *c, int extra) in dbg_check_tnc() argument
1475 if (!dbg_is_chk_index(c)) in dbg_check_tnc()
1478 ubifs_assert(mutex_is_locked(&c->tnc_mutex)); in dbg_check_tnc()
1479 if (!c->zroot.znode) in dbg_check_tnc()
1482 znode = ubifs_tnc_postorder_first(c->zroot.znode); in dbg_check_tnc()
1488 zbr = &c->zroot; in dbg_check_tnc()
1492 err = dbg_check_znode(c, zbr); in dbg_check_tnc()
1513 if (prev->level == 0 && znode->level == 0 && !c->replaying && in dbg_check_tnc()
1514 !keys_cmp(c, &prev->zbranch[last].key, in dbg_check_tnc()
1516 err = dbg_check_key_order(c, &prev->zbranch[last], in dbg_check_tnc()
1521 ubifs_msg(c, "first znode"); in dbg_check_tnc()
1522 ubifs_dump_znode(c, prev); in dbg_check_tnc()
1523 ubifs_msg(c, "second znode"); in dbg_check_tnc()
1524 ubifs_dump_znode(c, znode); in dbg_check_tnc()
1531 if (clean_cnt != atomic_long_read(&c->clean_zn_cnt)) { in dbg_check_tnc()
1532 ubifs_err(c, "incorrect clean_zn_cnt %ld, calculated %ld", in dbg_check_tnc()
1533 atomic_long_read(&c->clean_zn_cnt), in dbg_check_tnc()
1537 if (dirty_cnt != atomic_long_read(&c->dirty_zn_cnt)) { in dbg_check_tnc()
1538 ubifs_err(c, "incorrect dirty_zn_cnt %ld, calculated %ld", in dbg_check_tnc()
1539 atomic_long_read(&c->dirty_zn_cnt), in dbg_check_tnc()
1563 int dbg_walk_index(struct ubifs_info *c, dbg_leaf_callback leaf_cb, in dbg_walk_index() argument
1570 mutex_lock(&c->tnc_mutex); in dbg_walk_index()
1572 if (!c->zroot.znode) { in dbg_walk_index()
1573 c->zroot.znode = ubifs_load_znode(c, &c->zroot, NULL, 0); in dbg_walk_index()
1574 if (IS_ERR(c->zroot.znode)) { in dbg_walk_index()
1575 err = PTR_ERR(c->zroot.znode); in dbg_walk_index()
1576 c->zroot.znode = NULL; in dbg_walk_index()
1586 znode = c->zroot.znode; in dbg_walk_index()
1591 child = ubifs_load_znode(c, zbr, znode, 0); in dbg_walk_index()
1609 err = znode_cb(c, znode, priv); in dbg_walk_index()
1611 ubifs_err(c, "znode checking function returned error %d", in dbg_walk_index()
1613 ubifs_dump_znode(c, znode); in dbg_walk_index()
1620 err = leaf_cb(c, zbr, priv); in dbg_walk_index()
1622 ubifs_err(c, "leaf checking function returned error %d, for leaf at LEB %d:%d", in dbg_walk_index()
1639 child = ubifs_load_znode(c, zbr, znode, idx); in dbg_walk_index()
1659 child = ubifs_load_znode(c, zbr, znode, 0); in dbg_walk_index()
1670 mutex_unlock(&c->tnc_mutex); in dbg_walk_index()
1677 zbr = &c->zroot; in dbg_walk_index()
1678 ubifs_msg(c, "dump of znode at LEB %d:%d", zbr->lnum, zbr->offs); in dbg_walk_index()
1679 ubifs_dump_znode(c, znode); in dbg_walk_index()
1681 mutex_unlock(&c->tnc_mutex); in dbg_walk_index()
1695 static int add_size(struct ubifs_info *c, struct ubifs_znode *znode, void *priv) in add_size() argument
1700 add = ubifs_idx_node_sz(c, znode->child_cnt); in add_size()
1715 int dbg_check_idx_size(struct ubifs_info *c, long long idx_size) in dbg_check_idx_size() argument
1720 if (!dbg_is_chk_index(c)) in dbg_check_idx_size()
1723 err = dbg_walk_index(c, NULL, add_size, &calc); in dbg_check_idx_size()
1725 ubifs_err(c, "error %d while walking the index", err); in dbg_check_idx_size()
1730 ubifs_err(c, "index size check failed: calculated size is %lld, should be %lld", in dbg_check_idx_size()
1794 static struct fsck_inode *add_inode(struct ubifs_info *c, in add_inode() argument
1800 ino_t inum = key_inum_flash(c, &ino->key); in add_inode()
1816 if (inum > c->highest_inum) { in add_inode()
1817 ubifs_err(c, "too high inode number, max. is %lu", in add_inode()
1818 (unsigned long)c->highest_inum); in add_inode()
1826 inode = ilookup(c->vfs_sb, inum); in add_inode()
1907 static struct fsck_inode *read_add_inode(struct ubifs_info *c, in read_add_inode() argument
1921 ino_key_init(c, &key, inum); in read_add_inode()
1922 err = ubifs_lookup_level0(c, &key, &znode, &n); in read_add_inode()
1924 ubifs_err(c, "inode %lu not found in index", (unsigned long)inum); in read_add_inode()
1927 ubifs_err(c, "error %d while looking up inode %lu", in read_add_inode()
1934 ubifs_err(c, "bad node %lu node length %d", in read_add_inode()
1943 err = ubifs_tnc_read_node(c, zbr, ino); in read_add_inode()
1945 ubifs_err(c, "cannot read inode node at LEB %d:%d, error %d", in read_add_inode()
1951 fscki = add_inode(c, fsckd, ino); in read_add_inode()
1954 ubifs_err(c, "error %ld while adding inode %lu node", in read_add_inode()
1978 static int check_leaf(struct ubifs_info *c, struct ubifs_zbranch *zbr, in check_leaf() argument
1984 int err, type = key_type(c, &zbr->key); in check_leaf()
1988 ubifs_err(c, "bad leaf length %d (LEB %d:%d)", in check_leaf()
1997 err = ubifs_tnc_read_node(c, zbr, node); in check_leaf()
1999 ubifs_err(c, "cannot read leaf node at LEB %d:%d, error %d", in check_leaf()
2006 fscki = add_inode(c, priv, node); in check_leaf()
2009 ubifs_err(c, "error %d while adding inode node", err); in check_leaf()
2017 ubifs_err(c, "unexpected node type %d at LEB %d:%d", in check_leaf()
2024 if (le64_to_cpu(ch->sqnum) > c->max_sqnum) { in check_leaf()
2025 ubifs_err(c, "too high sequence number, max. is %llu", in check_leaf()
2026 c->max_sqnum); in check_leaf()
2041 inum = key_inum_flash(c, &dn->key); in check_leaf()
2042 fscki = read_add_inode(c, priv, inum); in check_leaf()
2045 ubifs_err(c, "error %d while processing data node and trying to find inode node %lu", in check_leaf()
2051 blk_offs = key_block_flash(c, &dn->key); in check_leaf()
2055 ubifs_err(c, "data node at LEB %d:%d is not within inode size %lld", in check_leaf()
2067 err = ubifs_validate_entry(c, dent); in check_leaf()
2076 fscki = read_add_inode(c, priv, inum); in check_leaf()
2079 ubifs_err(c, "error %d while processing entry node and trying to find inode node %lu", in check_leaf()
2087 inum = key_inum_flash(c, &dent->key); in check_leaf()
2088 fscki1 = read_add_inode(c, priv, inum); in check_leaf()
2091 ubifs_err(c, "error %d while processing entry node and trying to find parent inode node %lu", in check_leaf()
2114 ubifs_msg(c, "dump of node at LEB %d:%d", zbr->lnum, zbr->offs); in check_leaf()
2115 ubifs_dump_node(c, node); in check_leaf()
2143 static int check_inodes(struct ubifs_info *c, struct fsck_data *fsckd) in check_inodes() argument
2165 ubifs_err(c, "directory inode %lu has %d direntries which refer it, but should be 1", in check_inodes()
2172 ubifs_err(c, "root inode %lu has non-zero (%d) direntries which refer it", in check_inodes()
2178 ubifs_err(c, "directory inode %lu size is %lld, but calculated size is %lld", in check_inodes()
2184 ubifs_err(c, "directory inode %lu nlink is %d, but calculated nlink is %d", in check_inodes()
2191 ubifs_err(c, "inode %lu nlink is %d, but calculated nlink is %d", in check_inodes()
2198 ubifs_err(c, "inode %lu has xattr size %u, but calculated size is %lld", in check_inodes()
2204 ubifs_err(c, "inode %lu has %u xattrs, but calculated count is %lld", in check_inodes()
2210 ubifs_err(c, "inode %lu has xattr names' size %u, but calculated names' size is %lld", in check_inodes()
2221 ino_key_init(c, &key, fscki->inum); in check_inodes()
2222 err = ubifs_lookup_level0(c, &key, &znode, &n); in check_inodes()
2224 ubifs_err(c, "inode %lu not found in index", in check_inodes()
2228 ubifs_err(c, "error %d while looking up inode %lu", in check_inodes()
2238 err = ubifs_tnc_read_node(c, zbr, ino); in check_inodes()
2240 ubifs_err(c, "cannot read inode node at LEB %d:%d, error %d", in check_inodes()
2246 ubifs_msg(c, "dump of the inode %lu sitting in LEB %d:%d", in check_inodes()
2248 ubifs_dump_node(c, ino); in check_inodes()
2266 int dbg_check_filesystem(struct ubifs_info *c) in dbg_check_filesystem() argument
2271 if (!dbg_is_chk_fs(c)) in dbg_check_filesystem()
2275 err = dbg_walk_index(c, check_leaf, NULL, &fsckd); in dbg_check_filesystem()
2279 err = check_inodes(c, &fsckd); in dbg_check_filesystem()
2287 ubifs_err(c, "file-system check failed with error %d", err); in dbg_check_filesystem()
2301 int dbg_check_data_nodes_order(struct ubifs_info *c, struct list_head *head) in dbg_check_data_nodes_order() argument
2306 if (!dbg_is_chk_gen(c)) in dbg_check_data_nodes_order()
2318 ubifs_err(c, "bad node type %d", sa->type); in dbg_check_data_nodes_order()
2319 ubifs_dump_node(c, sa->node); in dbg_check_data_nodes_order()
2323 ubifs_err(c, "bad node type %d", sb->type); in dbg_check_data_nodes_order()
2324 ubifs_dump_node(c, sb->node); in dbg_check_data_nodes_order()
2328 inuma = key_inum(c, &sa->key); in dbg_check_data_nodes_order()
2329 inumb = key_inum(c, &sb->key); in dbg_check_data_nodes_order()
2334 ubifs_err(c, "larger inum %lu goes before inum %lu", in dbg_check_data_nodes_order()
2339 blka = key_block(c, &sa->key); in dbg_check_data_nodes_order()
2340 blkb = key_block(c, &sb->key); in dbg_check_data_nodes_order()
2343 ubifs_err(c, "larger block %u goes before %u", blka, blkb); in dbg_check_data_nodes_order()
2347 ubifs_err(c, "two data nodes for the same block"); in dbg_check_data_nodes_order()
2355 ubifs_dump_node(c, sa->node); in dbg_check_data_nodes_order()
2356 ubifs_dump_node(c, sb->node); in dbg_check_data_nodes_order()
2368 int dbg_check_nondata_nodes_order(struct ubifs_info *c, struct list_head *head) in dbg_check_nondata_nodes_order() argument
2373 if (!dbg_is_chk_gen(c)) in dbg_check_nondata_nodes_order()
2386 ubifs_err(c, "bad node type %d", sa->type); in dbg_check_nondata_nodes_order()
2387 ubifs_dump_node(c, sa->node); in dbg_check_nondata_nodes_order()
2392 ubifs_err(c, "bad node type %d", sb->type); in dbg_check_nondata_nodes_order()
2393 ubifs_dump_node(c, sb->node); in dbg_check_nondata_nodes_order()
2398 ubifs_err(c, "non-inode node goes before inode node"); in dbg_check_nondata_nodes_order()
2408 ubifs_err(c, "smaller inode node goes first"); in dbg_check_nondata_nodes_order()
2418 inuma = key_inum(c, &sa->key); in dbg_check_nondata_nodes_order()
2419 inumb = key_inum(c, &sb->key); in dbg_check_nondata_nodes_order()
2424 ubifs_err(c, "larger inum %lu goes before inum %lu", in dbg_check_nondata_nodes_order()
2429 hasha = key_block(c, &sa->key); in dbg_check_nondata_nodes_order()
2430 hashb = key_block(c, &sb->key); in dbg_check_nondata_nodes_order()
2433 ubifs_err(c, "larger hash %u goes before %u", in dbg_check_nondata_nodes_order()
2442 ubifs_msg(c, "dumping first node"); in dbg_check_nondata_nodes_order()
2443 ubifs_dump_node(c, sa->node); in dbg_check_nondata_nodes_order()
2444 ubifs_msg(c, "dumping second node"); in dbg_check_nondata_nodes_order()
2445 ubifs_dump_node(c, sb->node); in dbg_check_nondata_nodes_order()
2456 static int power_cut_emulated(struct ubifs_info *c, int lnum, int write) in power_cut_emulated() argument
2458 struct ubifs_debug_info *d = c->dbg; in power_cut_emulated()
2460 ubifs_assert(dbg_is_tst_rcvry(c)); in power_cut_emulated()
2473 ubifs_warn(c, "failing after %lums", delay); in power_cut_emulated()
2479 ubifs_warn(c, "failing after %lu calls", delay); in power_cut_emulated()
2497 ubifs_warn(c, "failing in super block LEB %d", lnum); in power_cut_emulated()
2501 ubifs_warn(c, "failing in master LEB %d", lnum); in power_cut_emulated()
2502 } else if (lnum >= UBIFS_LOG_LNUM && lnum <= c->log_last) { in power_cut_emulated()
2507 ubifs_warn(c, "failing in log LEB %d", lnum); in power_cut_emulated()
2508 } else if (lnum >= c->lpt_first && lnum <= c->lpt_last) { in power_cut_emulated()
2513 ubifs_warn(c, "failing in LPT LEB %d", lnum); in power_cut_emulated()
2514 } else if (lnum >= c->orph_first && lnum <= c->orph_last) { in power_cut_emulated()
2519 ubifs_warn(c, "failing in orphan LEB %d", lnum); in power_cut_emulated()
2520 } else if (lnum == c->ihead_lnum) { in power_cut_emulated()
2523 ubifs_warn(c, "failing in index head LEB %d", lnum); in power_cut_emulated()
2524 } else if (c->jheads && lnum == c->jheads[GCHD].wbuf.lnum) { in power_cut_emulated()
2527 ubifs_warn(c, "failing in GC head LEB %d", lnum); in power_cut_emulated()
2528 } else if (write && !RB_EMPTY_ROOT(&c->buds) && in power_cut_emulated()
2529 !ubifs_search_bud(c, lnum)) { in power_cut_emulated()
2532 ubifs_warn(c, "failing in non-bud LEB %d", lnum); in power_cut_emulated()
2533 } else if (c->cmt_state == COMMIT_RUNNING_BACKGROUND || in power_cut_emulated()
2534 c->cmt_state == COMMIT_RUNNING_REQUIRED) { in power_cut_emulated()
2537 ubifs_warn(c, "failing in bud LEB %d commit running", lnum); in power_cut_emulated()
2541 ubifs_warn(c, "failing in bud LEB %d commit not running", lnum); in power_cut_emulated()
2545 ubifs_warn(c, "========== Power cut emulated =========="); in power_cut_emulated()
2550 static int corrupt_data(const struct ubifs_info *c, const void *buf, in corrupt_data() argument
2558 to = min(len, ALIGN(from + 1, c->max_write_size)); in corrupt_data()
2560 ubifs_warn(c, "filled bytes %u-%u with %s", from, to - 1, in corrupt_data()
2571 int dbg_leb_write(struct ubifs_info *c, int lnum, const void *buf, in dbg_leb_write() argument
2576 if (c->dbg->pc_happened) in dbg_leb_write()
2579 failing = power_cut_emulated(c, lnum, 1); in dbg_leb_write()
2581 len = corrupt_data(c, buf, len); in dbg_leb_write()
2582 ubifs_warn(c, "actually write %d bytes to LEB %d:%d (the buffer was corrupted)", in dbg_leb_write()
2585 err = ubi_leb_write(c->ubi, lnum, buf, offs, len); in dbg_leb_write()
2593 int dbg_leb_change(struct ubifs_info *c, int lnum, const void *buf, in dbg_leb_change() argument
2598 if (c->dbg->pc_happened) in dbg_leb_change()
2600 if (power_cut_emulated(c, lnum, 1)) in dbg_leb_change()
2602 err = ubi_leb_change(c->ubi, lnum, buf, len); in dbg_leb_change()
2605 if (power_cut_emulated(c, lnum, 1)) in dbg_leb_change()
2610 int dbg_leb_unmap(struct ubifs_info *c, int lnum) in dbg_leb_unmap() argument
2614 if (c->dbg->pc_happened) in dbg_leb_unmap()
2616 if (power_cut_emulated(c, lnum, 0)) in dbg_leb_unmap()
2618 err = ubi_leb_unmap(c->ubi, lnum); in dbg_leb_unmap()
2621 if (power_cut_emulated(c, lnum, 0)) in dbg_leb_unmap()
2626 int dbg_leb_map(struct ubifs_info *c, int lnum) in dbg_leb_map() argument
2630 if (c->dbg->pc_happened) in dbg_leb_map()
2632 if (power_cut_emulated(c, lnum, 0)) in dbg_leb_map()
2634 err = ubi_leb_map(c->ubi, lnum); in dbg_leb_map()
2637 if (power_cut_emulated(c, lnum, 0)) in dbg_leb_map()
2685 struct ubifs_info *c = file->private_data; in dfs_file_read() local
2686 struct ubifs_debug_info *d = c->dbg; in dfs_file_read()
2702 val = c->ro_error; in dfs_file_read()
2738 struct ubifs_info *c = file->private_data; in dfs_file_write() local
2739 struct ubifs_debug_info *d = c->dbg; in dfs_file_write()
2756 ubifs_dump_lprops(c); in dfs_file_write()
2760 ubifs_dump_budg(c, &c->bi); in dfs_file_write()
2764 mutex_lock(&c->tnc_mutex); in dfs_file_write()
2765 ubifs_dump_tnc(c); in dfs_file_write()
2766 mutex_unlock(&c->tnc_mutex); in dfs_file_write()
2787 c->ro_error = !!val; in dfs_file_write()
2814 int dbg_debugfs_init_fs(struct ubifs_info *c) in dbg_debugfs_init_fs() argument
2819 struct ubifs_debug_info *d = c->dbg; in dbg_debugfs_init_fs()
2825 c->vi.ubi_num, c->vi.vol_id); in dbg_debugfs_init_fs()
2840 dent = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, c, &dfs_fops); in dbg_debugfs_init_fs()
2846 dent = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, c, &dfs_fops); in dbg_debugfs_init_fs()
2852 dent = debugfs_create_file(fname, S_IWUSR, d->dfs_dir, c, &dfs_fops); in dbg_debugfs_init_fs()
2858 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2865 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2872 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2879 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2886 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2893 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2900 dent = debugfs_create_file(fname, S_IRUSR | S_IWUSR, d->dfs_dir, c, in dbg_debugfs_init_fs()
2912 ubifs_err(c, "cannot create \"%s\" debugfs file or directory, error %d\n", in dbg_debugfs_init_fs()
2921 void dbg_debugfs_exit_fs(struct ubifs_info *c) in dbg_debugfs_exit_fs() argument
2924 debugfs_remove_recursive(c->dbg->dfs_dir); in dbg_debugfs_exit_fs()
3088 int ubifs_debugging_init(struct ubifs_info *c) in ubifs_debugging_init() argument
3090 c->dbg = kzalloc(sizeof(struct ubifs_debug_info), GFP_KERNEL); in ubifs_debugging_init()
3091 if (!c->dbg) in ubifs_debugging_init()
3101 void ubifs_debugging_exit(struct ubifs_info *c) in ubifs_debugging_exit() argument
3103 kfree(c->dbg); in ubifs_debugging_exit()