debug.c (32f6ccc743b89bb4c51d4a868ffdb6ebda2909cf) debug.c (c4c0d19d39d26c5f58633f8fcca75f03b2854fc0)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * This file is part of UBIFS.
4 *
5 * Copyright (C) 2006-2008 Nokia Corporation
6 *
7 * Authors: Artem Bityutskiy (Битюцкий Артём)
8 * Adrian Hunter

--- 277 unchanged lines hidden (view full) ---

286 fname_len(&nm) = le16_to_cpu(dent->nlen);
287 kfree(pdent);
288 pdent = dent;
289 key_read(c, &dent->key, &key);
290 }
291 kfree(pdent);
292}
293
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * This file is part of UBIFS.
4 *
5 * Copyright (C) 2006-2008 Nokia Corporation
6 *
7 * Authors: Artem Bityutskiy (Битюцкий Артём)
8 * Adrian Hunter

--- 277 unchanged lines hidden (view full) ---

286 fname_len(&nm) = le16_to_cpu(dent->nlen);
287 kfree(pdent);
288 pdent = dent;
289 key_read(c, &dent->key, &key);
290 }
291 kfree(pdent);
292}
293
294void ubifs_dump_node(const struct ubifs_info *c, const void *node)
294void ubifs_dump_node(const struct ubifs_info *c, const void *node, int node_len)
295{
295{
296 int i, n;
296 int i, n, type, safe_len, max_node_len, min_node_len;
297 union ubifs_key key;
298 const struct ubifs_ch *ch = node;
299 char key_buf[DBG_KEY_BUF_LEN];
300
301 /* If the magic is incorrect, just hexdump the first bytes */
302 if (le32_to_cpu(ch->magic) != UBIFS_NODE_MAGIC) {
303 pr_err("Not a node, first %zu bytes:", UBIFS_CH_SZ);
304 print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 32, 1,
305 (void *)node, UBIFS_CH_SZ, 1);
306 return;
307 }
308
297 union ubifs_key key;
298 const struct ubifs_ch *ch = node;
299 char key_buf[DBG_KEY_BUF_LEN];
300
301 /* If the magic is incorrect, just hexdump the first bytes */
302 if (le32_to_cpu(ch->magic) != UBIFS_NODE_MAGIC) {
303 pr_err("Not a node, first %zu bytes:", UBIFS_CH_SZ);
304 print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 32, 1,
305 (void *)node, UBIFS_CH_SZ, 1);
306 return;
307 }
308
309 /* Skip dumping unknown type node */
310 type = ch->node_type;
311 if (type < 0 || type >= UBIFS_NODE_TYPES_CNT) {
312 pr_err("node type %d was not recognized\n", type);
313 return;
314 }
315
309 spin_lock(&dbg_lock);
310 dump_ch(node);
311
316 spin_lock(&dbg_lock);
317 dump_ch(node);
318
312 switch (ch->node_type) {
319 if (c->ranges[type].max_len == 0) {
320 max_node_len = min_node_len = c->ranges[type].len;
321 } else {
322 max_node_len = c->ranges[type].max_len;
323 min_node_len = c->ranges[type].min_len;
324 }
325 safe_len = le32_to_cpu(ch->len);
326 safe_len = safe_len > 0 ? safe_len : 0;
327 safe_len = min3(safe_len, max_node_len, node_len);
328 if (safe_len < min_node_len) {
329 pr_err("node len(%d) is too short for %s, left %d bytes:\n",
330 safe_len, dbg_ntype(type),
331 safe_len > UBIFS_CH_SZ ?
332 safe_len - (int)UBIFS_CH_SZ : 0);
333 if (safe_len > UBIFS_CH_SZ)
334 print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 32, 1,
335 (void *)node + UBIFS_CH_SZ,
336 safe_len - UBIFS_CH_SZ, 0);
337 goto out_unlock;
338 }
339 if (safe_len != le32_to_cpu(ch->len))
340 pr_err("\ttruncated node length %d\n", safe_len);
341
342 switch (type) {
313 case UBIFS_PAD_NODE:
314 {
315 const struct ubifs_pad_node *pad = node;
316
317 pr_err("\tpad_len %u\n", le32_to_cpu(pad->pad_len));
318 break;
319 }
320 case UBIFS_SB_NODE:

--- 127 unchanged lines hidden (view full) ---

448 pr_err("\tkey %s\n",
449 dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN));
450 pr_err("\tinum %llu\n",
451 (unsigned long long)le64_to_cpu(dent->inum));
452 pr_err("\ttype %d\n", (int)dent->type);
453 pr_err("\tnlen %d\n", nlen);
454 pr_err("\tname ");
455
343 case UBIFS_PAD_NODE:
344 {
345 const struct ubifs_pad_node *pad = node;
346
347 pr_err("\tpad_len %u\n", le32_to_cpu(pad->pad_len));
348 break;
349 }
350 case UBIFS_SB_NODE:

--- 127 unchanged lines hidden (view full) ---

478 pr_err("\tkey %s\n",
479 dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN));
480 pr_err("\tinum %llu\n",
481 (unsigned long long)le64_to_cpu(dent->inum));
482 pr_err("\ttype %d\n", (int)dent->type);
483 pr_err("\tnlen %d\n", nlen);
484 pr_err("\tname ");
485
456 if (nlen > UBIFS_MAX_NLEN)
486 if (nlen > UBIFS_MAX_NLEN ||
487 nlen > safe_len - UBIFS_DENT_NODE_SZ)
457 pr_err("(bad name length, not printing, bad or corrupted node)");
458 else {
459 for (i = 0; i < nlen && dent->name[i]; i++)
460 pr_cont("%c", isprint(dent->name[i]) ?
461 dent->name[i] : '?');
462 }
463 pr_cont("\n");
464
465 break;
466 }
467 case UBIFS_DATA_NODE:
468 {
469 const struct ubifs_data_node *dn = node;
488 pr_err("(bad name length, not printing, bad or corrupted node)");
489 else {
490 for (i = 0; i < nlen && dent->name[i]; i++)
491 pr_cont("%c", isprint(dent->name[i]) ?
492 dent->name[i] : '?');
493 }
494 pr_cont("\n");
495
496 break;
497 }
498 case UBIFS_DATA_NODE:
499 {
500 const struct ubifs_data_node *dn = node;
470 int dlen = le32_to_cpu(ch->len) - UBIFS_DATA_NODE_SZ;
471
472 key_read(c, &dn->key, &key);
473 pr_err("\tkey %s\n",
474 dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN));
475 pr_err("\tsize %u\n", le32_to_cpu(dn->size));
476 pr_err("\tcompr_typ %d\n",
477 (int)le16_to_cpu(dn->compr_type));
501
502 key_read(c, &dn->key, &key);
503 pr_err("\tkey %s\n",
504 dbg_snprintf_key(c, &key, key_buf, DBG_KEY_BUF_LEN));
505 pr_err("\tsize %u\n", le32_to_cpu(dn->size));
506 pr_err("\tcompr_typ %d\n",
507 (int)le16_to_cpu(dn->compr_type));
478 pr_err("\tdata size %d\n", dlen);
479 pr_err("\tdata:\n");
508 pr_err("\tdata size %u\n",
509 le32_to_cpu(ch->len) - (unsigned int)UBIFS_DATA_NODE_SZ);
510 pr_err("\tdata (length = %d):\n",
511 safe_len - (int)UBIFS_DATA_NODE_SZ);
480 print_hex_dump(KERN_ERR, "\t", DUMP_PREFIX_OFFSET, 32, 1,
512 print_hex_dump(KERN_ERR, "\t", DUMP_PREFIX_OFFSET, 32, 1,
481 (void *)&dn->data, dlen, 0);
513 (void *)&dn->data,
514 safe_len - (int)UBIFS_DATA_NODE_SZ, 0);
482 break;
483 }
484 case UBIFS_TRUN_NODE:
485 {
486 const struct ubifs_trun_node *trun = node;
487
488 pr_err("\tinum %u\n", le32_to_cpu(trun->inum));
489 pr_err("\told_size %llu\n",
490 (unsigned long long)le64_to_cpu(trun->old_size));
491 pr_err("\tnew_size %llu\n",
492 (unsigned long long)le64_to_cpu(trun->new_size));
493 break;
494 }
495 case UBIFS_IDX_NODE:
496 {
497 const struct ubifs_idx_node *idx = node;
515 break;
516 }
517 case UBIFS_TRUN_NODE:
518 {
519 const struct ubifs_trun_node *trun = node;
520
521 pr_err("\tinum %u\n", le32_to_cpu(trun->inum));
522 pr_err("\told_size %llu\n",
523 (unsigned long long)le64_to_cpu(trun->old_size));
524 pr_err("\tnew_size %llu\n",
525 (unsigned long long)le64_to_cpu(trun->new_size));
526 break;
527 }
528 case UBIFS_IDX_NODE:
529 {
530 const struct ubifs_idx_node *idx = node;
531 int max_child_cnt = (safe_len - UBIFS_IDX_NODE_SZ) /
532 (ubifs_idx_node_sz(c, 1) -
533 UBIFS_IDX_NODE_SZ);
498
534
499 n = le16_to_cpu(idx->child_cnt);
500 pr_err("\tchild_cnt %d\n", n);
535 n = min_t(int, le16_to_cpu(idx->child_cnt), max_child_cnt);
536 pr_err("\tchild_cnt %d\n", (int)le16_to_cpu(idx->child_cnt));
501 pr_err("\tlevel %d\n", (int)le16_to_cpu(idx->level));
502 pr_err("\tBranches:\n");
503
504 for (i = 0; i < n && i < c->fanout - 1; i++) {
505 const struct ubifs_branch *br;
506
507 br = ubifs_idx_branch(c, idx, i);
508 key_read(c, &br->key, &key);

--- 11 unchanged lines hidden (view full) ---

520 {
521 const struct ubifs_orph_node *orph = node;
522
523 pr_err("\tcommit number %llu\n",
524 (unsigned long long)
525 le64_to_cpu(orph->cmt_no) & LLONG_MAX);
526 pr_err("\tlast node flag %llu\n",
527 (unsigned long long)(le64_to_cpu(orph->cmt_no)) >> 63);
537 pr_err("\tlevel %d\n", (int)le16_to_cpu(idx->level));
538 pr_err("\tBranches:\n");
539
540 for (i = 0; i < n && i < c->fanout - 1; i++) {
541 const struct ubifs_branch *br;
542
543 br = ubifs_idx_branch(c, idx, i);
544 key_read(c, &br->key, &key);

--- 11 unchanged lines hidden (view full) ---

556 {
557 const struct ubifs_orph_node *orph = node;
558
559 pr_err("\tcommit number %llu\n",
560 (unsigned long long)
561 le64_to_cpu(orph->cmt_no) & LLONG_MAX);
562 pr_err("\tlast node flag %llu\n",
563 (unsigned long long)(le64_to_cpu(orph->cmt_no)) >> 63);
528 n = (le32_to_cpu(ch->len) - UBIFS_ORPH_NODE_SZ) >> 3;
564 n = (safe_len - UBIFS_ORPH_NODE_SZ) >> 3;
529 pr_err("\t%d orphan inode numbers:\n", n);
530 for (i = 0; i < n; i++)
531 pr_err("\t ino %llu\n",
532 (unsigned long long)le64_to_cpu(orph->inos[i]));
533 break;
534 }
535 case UBIFS_AUTH_NODE:
536 {
537 break;
538 }
539 default:
565 pr_err("\t%d orphan inode numbers:\n", n);
566 for (i = 0; i < n; i++)
567 pr_err("\t ino %llu\n",
568 (unsigned long long)le64_to_cpu(orph->inos[i]));
569 break;
570 }
571 case UBIFS_AUTH_NODE:
572 {
573 break;
574 }
575 default:
540 pr_err("node type %d was not recognized\n",
541 (int)ch->node_type);
576 pr_err("node type %d was not recognized\n", type);
542 }
577 }
578
579out_unlock:
543 spin_unlock(&dbg_lock);
544}
545
546void ubifs_dump_budget_req(const struct ubifs_budget_req *req)
547{
548 spin_lock(&dbg_lock);
549 pr_err("Budgeting request: new_ino %d, dirtied_ino %d\n",
550 req->new_ino, req->dirtied_ino);

--- 2475 unchanged lines hidden ---
580 spin_unlock(&dbg_lock);
581}
582
583void ubifs_dump_budget_req(const struct ubifs_budget_req *req)
584{
585 spin_lock(&dbg_lock);
586 pr_err("Budgeting request: new_ino %d, dirtied_ino %d\n",
587 req->new_ino, req->dirtied_ino);

--- 2475 unchanged lines hidden ---