15e5c12b0Sopenharmony_ci/** 25e5c12b0Sopenharmony_ci * fsck_debug.c 35e5c12b0Sopenharmony_ci * 45e5c12b0Sopenharmony_ci * Copyright (C) 2024 Huawei Ltd. 55e5c12b0Sopenharmony_ci * 65e5c12b0Sopenharmony_ci * This program is free software; you can redistribute it and/or modify 75e5c12b0Sopenharmony_ci * it under the terms of the GNU General Public License version 2 as 85e5c12b0Sopenharmony_ci * published by the Free Software Foundation. 95e5c12b0Sopenharmony_ci */ 105e5c12b0Sopenharmony_ci#include "fsck_debug.h" 115e5c12b0Sopenharmony_ci 125e5c12b0Sopenharmony_civoid dump_sbi_info(struct f2fs_sb_info *sbi) 135e5c12b0Sopenharmony_ci{ 145e5c12b0Sopenharmony_ci if (sbi == NULL) { 155e5c12b0Sopenharmony_ci MSG(0, "sbi is null\n"); 165e5c12b0Sopenharmony_ci return; 175e5c12b0Sopenharmony_ci } 185e5c12b0Sopenharmony_ci 195e5c12b0Sopenharmony_ci MSG(0, "\n"); 205e5c12b0Sopenharmony_ci MSG(0, "+--------------------------------------------------------+\n"); 215e5c12b0Sopenharmony_ci MSG(0, "| SBI |\n"); 225e5c12b0Sopenharmony_ci MSG(0, "+--------------------------------------------------------+\n"); 235e5c12b0Sopenharmony_ci MSG(0, "total_count %u\n", total_segments(sbi)); 245e5c12b0Sopenharmony_ci MSG(0, "resvd_segs %u\n", reserved_segments(sbi)); 255e5c12b0Sopenharmony_ci MSG(0, "overp_segs %u\n", overprov_segments(sbi)); 265e5c12b0Sopenharmony_ci MSG(0, "valid_count %u\n", of_valid_block_count(sbi)); 275e5c12b0Sopenharmony_ci MSG(0, "utilization %u\n", f2fs_utilization(sbi)); 285e5c12b0Sopenharmony_ci MSG(0, "\n"); 295e5c12b0Sopenharmony_ci hex_info_dump("f2fs_sb_info", sbi, 305e5c12b0Sopenharmony_ci sizeof(struct f2fs_sb_info)); 315e5c12b0Sopenharmony_ci MSG(0, "\n"); 325e5c12b0Sopenharmony_ci} 335e5c12b0Sopenharmony_ci 345e5c12b0Sopenharmony_ci#define LINE_MAX_LEN 80 355e5c12b0Sopenharmony_ci#define LINE_MAX_INTS 16 365e5c12b0Sopenharmony_ci#define BATCH_INTS 8 375e5c12b0Sopenharmony_ci#define HEX_SHIFT_12 12 385e5c12b0Sopenharmony_ci#define HEX_SHIFT_8 8 395e5c12b0Sopenharmony_ci#define HEX_SHIFT_4 4 405e5c12b0Sopenharmony_ci#define HEX_MASK 0x0F 415e5c12b0Sopenharmony_civoid hex_info_dump(const char *prompts, const unsigned char *buf, 425e5c12b0Sopenharmony_ci unsigned int len) 435e5c12b0Sopenharmony_ci{ 445e5c12b0Sopenharmony_ci static const unsigned char hex_ascii[] = "0123456789abcdef"; 455e5c12b0Sopenharmony_ci unsigned char line[LINE_MAX_LEN]; 465e5c12b0Sopenharmony_ci unsigned int i, j, k, line_len; 475e5c12b0Sopenharmony_ci unsigned int rest = len; 485e5c12b0Sopenharmony_ci 495e5c12b0Sopenharmony_ci MSG(0, "===HEX DUMP START: %.25s, len %u===\n", 505e5c12b0Sopenharmony_ci prompts, len); 515e5c12b0Sopenharmony_ci for (i = 0; i < len; i += LINE_MAX_INTS) { 525e5c12b0Sopenharmony_ci line_len = rest > LINE_MAX_INTS ? LINE_MAX_INTS : rest; 535e5c12b0Sopenharmony_ci k = 0; 545e5c12b0Sopenharmony_ci line[k++] = hex_ascii[(i >> HEX_SHIFT_12) & HEX_MASK]; 555e5c12b0Sopenharmony_ci line[k++] = hex_ascii[(i >> HEX_SHIFT_8) & HEX_MASK]; 565e5c12b0Sopenharmony_ci line[k++] = hex_ascii[(i >> HEX_SHIFT_4) & HEX_MASK]; 575e5c12b0Sopenharmony_ci line[k++] = hex_ascii[i & HEX_MASK]; 585e5c12b0Sopenharmony_ci line[k++] = ':'; 595e5c12b0Sopenharmony_ci for (j = 0; j < line_len; j++) { 605e5c12b0Sopenharmony_ci j % BATCH_INTS == 0 ? line[k++] = ' ' : 1; 615e5c12b0Sopenharmony_ci line[k++] = hex_ascii[(buf[i + j] >> HEX_SHIFT_4) & HEX_MASK]; 625e5c12b0Sopenharmony_ci line[k++] = hex_ascii[(buf[i + j] & HEX_MASK)]; 635e5c12b0Sopenharmony_ci } 645e5c12b0Sopenharmony_ci line[k++] = '\0'; 655e5c12b0Sopenharmony_ci rest -= line_len; 665e5c12b0Sopenharmony_ci MSG(0, "%s\n", line); 675e5c12b0Sopenharmony_ci } 685e5c12b0Sopenharmony_ci MSG(0, "===HEX DUMP END===\n"); 695e5c12b0Sopenharmony_ci}