263 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * linux/fs/befs/debug.c4 *5 * Copyright (C) 2001 Will Dyson (will_dyson at pobox.com)6 *7 * With help from the ntfs-tng driver by Anton Altparmakov8 *9 * Copyright (C) 1999 Makoto Kato (m_kato@ga2.so-net.ne.jp)10 *11 * debug functions12 */13 14#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt15#ifdef __KERNEL__16 17#include <linux/stdarg.h>18#include <linux/string.h>19#include <linux/spinlock.h>20#include <linux/kernel.h>21#include <linux/fs.h>22#include <linux/slab.h>23 24#endif /* __KERNEL__ */25 26#include "befs.h"27 28void29befs_error(const struct super_block *sb, const char *fmt, ...)30{31 struct va_format vaf;32 va_list args;33 34 va_start(args, fmt);35 vaf.fmt = fmt;36 vaf.va = &args;37 pr_err("(%s): %pV\n", sb->s_id, &vaf);38 va_end(args);39}40 41void42befs_warning(const struct super_block *sb, const char *fmt, ...)43{44 struct va_format vaf;45 va_list args;46 47 va_start(args, fmt);48 vaf.fmt = fmt;49 vaf.va = &args;50 pr_warn("(%s): %pV\n", sb->s_id, &vaf);51 va_end(args);52}53 54void55befs_debug(const struct super_block *sb, const char *fmt, ...)56{57#ifdef CONFIG_BEFS_DEBUG58 59 struct va_format vaf;60 va_list args;61 62 va_start(args, fmt);63 vaf.fmt = fmt;64 vaf.va = &args;65 pr_debug("(%s): %pV\n", sb->s_id, &vaf);66 va_end(args);67 68#endif //CONFIG_BEFS_DEBUG69}70 71void72befs_dump_inode(const struct super_block *sb, befs_inode *inode)73{74#ifdef CONFIG_BEFS_DEBUG75 76 befs_block_run tmp_run;77 78 befs_debug(sb, "befs_inode information");79 80 befs_debug(sb, " magic1 %08x", fs32_to_cpu(sb, inode->magic1));81 82 tmp_run = fsrun_to_cpu(sb, inode->inode_num);83 befs_debug(sb, " inode_num %u, %hu, %hu",84 tmp_run.allocation_group, tmp_run.start, tmp_run.len);85 86 befs_debug(sb, " uid %u", fs32_to_cpu(sb, inode->uid));87 befs_debug(sb, " gid %u", fs32_to_cpu(sb, inode->gid));88 befs_debug(sb, " mode %08x", fs32_to_cpu(sb, inode->mode));89 befs_debug(sb, " flags %08x", fs32_to_cpu(sb, inode->flags));90 befs_debug(sb, " create_time %llu",91 fs64_to_cpu(sb, inode->create_time));92 befs_debug(sb, " last_modified_time %llu",93 fs64_to_cpu(sb, inode->last_modified_time));94 95 tmp_run = fsrun_to_cpu(sb, inode->parent);96 befs_debug(sb, " parent [%u, %hu, %hu]",97 tmp_run.allocation_group, tmp_run.start, tmp_run.len);98 99 tmp_run = fsrun_to_cpu(sb, inode->attributes);100 befs_debug(sb, " attributes [%u, %hu, %hu]",101 tmp_run.allocation_group, tmp_run.start, tmp_run.len);102 103 befs_debug(sb, " type %08x", fs32_to_cpu(sb, inode->type));104 befs_debug(sb, " inode_size %u", fs32_to_cpu(sb, inode->inode_size));105 106 if (S_ISLNK(fs32_to_cpu(sb, inode->mode))) {107 befs_debug(sb, " Symbolic link [%s]", inode->data.symlink);108 } else {109 int i;110 111 for (i = 0; i < BEFS_NUM_DIRECT_BLOCKS; i++) {112 tmp_run =113 fsrun_to_cpu(sb, inode->data.datastream.direct[i]);114 befs_debug(sb, " direct %d [%u, %hu, %hu]", i,115 tmp_run.allocation_group, tmp_run.start,116 tmp_run.len);117 }118 befs_debug(sb, " max_direct_range %llu",119 fs64_to_cpu(sb,120 inode->data.datastream.121 max_direct_range));122 123 tmp_run = fsrun_to_cpu(sb, inode->data.datastream.indirect);124 befs_debug(sb, " indirect [%u, %hu, %hu]",125 tmp_run.allocation_group,126 tmp_run.start, tmp_run.len);127 128 befs_debug(sb, " max_indirect_range %llu",129 fs64_to_cpu(sb,130 inode->data.datastream.131 max_indirect_range));132 133 tmp_run =134 fsrun_to_cpu(sb, inode->data.datastream.double_indirect);135 befs_debug(sb, " double indirect [%u, %hu, %hu]",136 tmp_run.allocation_group, tmp_run.start,137 tmp_run.len);138 139 befs_debug(sb, " max_double_indirect_range %llu",140 fs64_to_cpu(sb,141 inode->data.datastream.142 max_double_indirect_range));143 144 befs_debug(sb, " size %llu",145 fs64_to_cpu(sb, inode->data.datastream.size));146 }147 148#endif //CONFIG_BEFS_DEBUG149}150 151/*152 * Display super block structure for debug.153 */154 155void156befs_dump_super_block(const struct super_block *sb, befs_super_block *sup)157{158#ifdef CONFIG_BEFS_DEBUG159 160 befs_block_run tmp_run;161 162 befs_debug(sb, "befs_super_block information");163 164 befs_debug(sb, " name %s", sup->name);165 befs_debug(sb, " magic1 %08x", fs32_to_cpu(sb, sup->magic1));166 befs_debug(sb, " fs_byte_order %08x",167 fs32_to_cpu(sb, sup->fs_byte_order));168 169 befs_debug(sb, " block_size %u", fs32_to_cpu(sb, sup->block_size));170 befs_debug(sb, " block_shift %u", fs32_to_cpu(sb, sup->block_shift));171 172 befs_debug(sb, " num_blocks %llu", fs64_to_cpu(sb, sup->num_blocks));173 befs_debug(sb, " used_blocks %llu", fs64_to_cpu(sb, sup->used_blocks));174 befs_debug(sb, " inode_size %u", fs32_to_cpu(sb, sup->inode_size));175 176 befs_debug(sb, " magic2 %08x", fs32_to_cpu(sb, sup->magic2));177 befs_debug(sb, " blocks_per_ag %u",178 fs32_to_cpu(sb, sup->blocks_per_ag));179 befs_debug(sb, " ag_shift %u", fs32_to_cpu(sb, sup->ag_shift));180 befs_debug(sb, " num_ags %u", fs32_to_cpu(sb, sup->num_ags));181 182 befs_debug(sb, " flags %08x", fs32_to_cpu(sb, sup->flags));183 184 tmp_run = fsrun_to_cpu(sb, sup->log_blocks);185 befs_debug(sb, " log_blocks %u, %hu, %hu",186 tmp_run.allocation_group, tmp_run.start, tmp_run.len);187 188 befs_debug(sb, " log_start %lld", fs64_to_cpu(sb, sup->log_start));189 befs_debug(sb, " log_end %lld", fs64_to_cpu(sb, sup->log_end));190 191 befs_debug(sb, " magic3 %08x", fs32_to_cpu(sb, sup->magic3));192 193 tmp_run = fsrun_to_cpu(sb, sup->root_dir);194 befs_debug(sb, " root_dir %u, %hu, %hu",195 tmp_run.allocation_group, tmp_run.start, tmp_run.len);196 197 tmp_run = fsrun_to_cpu(sb, sup->indices);198 befs_debug(sb, " indices %u, %hu, %hu",199 tmp_run.allocation_group, tmp_run.start, tmp_run.len);200 201#endif //CONFIG_BEFS_DEBUG202}203 204#if 0205/* unused */206void207befs_dump_small_data(const struct super_block *sb, befs_small_data *sd)208{209}210 211/* unused */212void213befs_dump_run(const struct super_block *sb, befs_disk_block_run run)214{215#ifdef CONFIG_BEFS_DEBUG216 217 befs_block_run n = fsrun_to_cpu(sb, run);218 219 befs_debug(sb, "[%u, %hu, %hu]", n.allocation_group, n.start, n.len);220 221#endif //CONFIG_BEFS_DEBUG222}223#endif /* 0 */224 225void226befs_dump_index_entry(const struct super_block *sb,227 befs_disk_btree_super *super)228{229#ifdef CONFIG_BEFS_DEBUG230 231 befs_debug(sb, "Btree super structure");232 befs_debug(sb, " magic %08x", fs32_to_cpu(sb, super->magic));233 befs_debug(sb, " node_size %u", fs32_to_cpu(sb, super->node_size));234 befs_debug(sb, " max_depth %08x", fs32_to_cpu(sb, super->max_depth));235 236 befs_debug(sb, " data_type %08x", fs32_to_cpu(sb, super->data_type));237 befs_debug(sb, " root_node_pointer %016LX",238 fs64_to_cpu(sb, super->root_node_ptr));239 befs_debug(sb, " free_node_pointer %016LX",240 fs64_to_cpu(sb, super->free_node_ptr));241 befs_debug(sb, " maximum size %016LX",242 fs64_to_cpu(sb, super->max_size));243 244#endif //CONFIG_BEFS_DEBUG245}246 247void248befs_dump_index_node(const struct super_block *sb, befs_btree_nodehead *node)249{250#ifdef CONFIG_BEFS_DEBUG251 252 befs_debug(sb, "Btree node structure");253 befs_debug(sb, " left %016LX", fs64_to_cpu(sb, node->left));254 befs_debug(sb, " right %016LX", fs64_to_cpu(sb, node->right));255 befs_debug(sb, " overflow %016LX", fs64_to_cpu(sb, node->overflow));256 befs_debug(sb, " all_key_count %hu",257 fs16_to_cpu(sb, node->all_key_count));258 befs_debug(sb, " all_key_length %hu",259 fs16_to_cpu(sb, node->all_key_length));260 261#endif //CONFIG_BEFS_DEBUG262}263