11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * linux/fs/befs/debug.c 31da177e4SLinus Torvalds * 41da177e4SLinus Torvalds * Copyright (C) 2001 Will Dyson (will_dyson at pobox.com) 51da177e4SLinus Torvalds * 61da177e4SLinus Torvalds * With help from the ntfs-tng driver by Anton Altparmakov 71da177e4SLinus Torvalds * 81da177e4SLinus Torvalds * Copyright (C) 1999 Makoto Kato (m_kato@ga2.so-net.ne.jp) 91da177e4SLinus Torvalds * 101da177e4SLinus Torvalds * debug functions 111da177e4SLinus Torvalds */ 121da177e4SLinus Torvalds 131da177e4SLinus Torvalds #ifdef __KERNEL__ 141da177e4SLinus Torvalds 151da177e4SLinus Torvalds #include <stdarg.h> 161da177e4SLinus Torvalds #include <linux/string.h> 171da177e4SLinus Torvalds #include <linux/spinlock.h> 181da177e4SLinus Torvalds #include <linux/kernel.h> 191da177e4SLinus Torvalds #include <linux/fs.h> 201da177e4SLinus Torvalds 211da177e4SLinus Torvalds #endif /* __KERNEL__ */ 221da177e4SLinus Torvalds 231da177e4SLinus Torvalds #include "befs.h" 241da177e4SLinus Torvalds #include "endian.h" 251da177e4SLinus Torvalds 261da177e4SLinus Torvalds #define ERRBUFSIZE 1024 271da177e4SLinus Torvalds 281da177e4SLinus Torvalds void 291da177e4SLinus Torvalds befs_error(const struct super_block *sb, const char *fmt, ...) 301da177e4SLinus Torvalds { 311da177e4SLinus Torvalds va_list args; 321da177e4SLinus Torvalds char *err_buf = (char *) kmalloc(ERRBUFSIZE, GFP_KERNEL); 331da177e4SLinus Torvalds if (err_buf == NULL) { 341da177e4SLinus Torvalds printk(KERN_ERR "could not allocate %d bytes\n", ERRBUFSIZE); 351da177e4SLinus Torvalds return; 361da177e4SLinus Torvalds } 371da177e4SLinus Torvalds 381da177e4SLinus Torvalds va_start(args, fmt); 391da177e4SLinus Torvalds vsnprintf(err_buf, ERRBUFSIZE, fmt, args); 401da177e4SLinus Torvalds va_end(args); 411da177e4SLinus Torvalds 421da177e4SLinus Torvalds printk(KERN_ERR "BeFS(%s): %s\n", sb->s_id, err_buf); 431da177e4SLinus Torvalds kfree(err_buf); 441da177e4SLinus Torvalds } 451da177e4SLinus Torvalds 461da177e4SLinus Torvalds void 471da177e4SLinus Torvalds befs_warning(const struct super_block *sb, const char *fmt, ...) 481da177e4SLinus Torvalds { 491da177e4SLinus Torvalds va_list args; 501da177e4SLinus Torvalds char *err_buf = (char *) kmalloc(ERRBUFSIZE, GFP_KERNEL); 511da177e4SLinus Torvalds if (err_buf == NULL) { 521da177e4SLinus Torvalds printk(KERN_ERR "could not allocate %d bytes\n", ERRBUFSIZE); 531da177e4SLinus Torvalds return; 541da177e4SLinus Torvalds } 551da177e4SLinus Torvalds 561da177e4SLinus Torvalds va_start(args, fmt); 571da177e4SLinus Torvalds vsnprintf(err_buf, ERRBUFSIZE, fmt, args); 581da177e4SLinus Torvalds va_end(args); 591da177e4SLinus Torvalds 601da177e4SLinus Torvalds printk(KERN_WARNING "BeFS(%s): %s\n", sb->s_id, err_buf); 611da177e4SLinus Torvalds 621da177e4SLinus Torvalds kfree(err_buf); 631da177e4SLinus Torvalds } 641da177e4SLinus Torvalds 651da177e4SLinus Torvalds void 661da177e4SLinus Torvalds befs_debug(const struct super_block *sb, const char *fmt, ...) 671da177e4SLinus Torvalds { 681da177e4SLinus Torvalds #ifdef CONFIG_BEFS_DEBUG 691da177e4SLinus Torvalds 701da177e4SLinus Torvalds va_list args; 711da177e4SLinus Torvalds char *err_buf = NULL; 721da177e4SLinus Torvalds 731da177e4SLinus Torvalds if (BEFS_SB(sb)->mount_opts.debug) { 741da177e4SLinus Torvalds err_buf = (char *) kmalloc(ERRBUFSIZE, GFP_KERNEL); 751da177e4SLinus Torvalds if (err_buf == NULL) { 761da177e4SLinus Torvalds printk(KERN_ERR "could not allocate %d bytes\n", 771da177e4SLinus Torvalds ERRBUFSIZE); 781da177e4SLinus Torvalds return; 791da177e4SLinus Torvalds } 801da177e4SLinus Torvalds 811da177e4SLinus Torvalds va_start(args, fmt); 821da177e4SLinus Torvalds vsnprintf(err_buf, ERRBUFSIZE, fmt, args); 831da177e4SLinus Torvalds va_end(args); 841da177e4SLinus Torvalds 851da177e4SLinus Torvalds printk(KERN_DEBUG "BeFS(%s): %s\n", sb->s_id, err_buf); 861da177e4SLinus Torvalds 871da177e4SLinus Torvalds kfree(err_buf); 881da177e4SLinus Torvalds } 891da177e4SLinus Torvalds 901da177e4SLinus Torvalds #endif //CONFIG_BEFS_DEBUG 911da177e4SLinus Torvalds } 921da177e4SLinus Torvalds 931da177e4SLinus Torvalds void 941da177e4SLinus Torvalds befs_dump_inode(const struct super_block *sb, befs_inode * inode) 951da177e4SLinus Torvalds { 961da177e4SLinus Torvalds #ifdef CONFIG_BEFS_DEBUG 971da177e4SLinus Torvalds 981da177e4SLinus Torvalds befs_block_run tmp_run; 991da177e4SLinus Torvalds 1001da177e4SLinus Torvalds befs_debug(sb, "befs_inode information"); 1011da177e4SLinus Torvalds 1021da177e4SLinus Torvalds befs_debug(sb, " magic1 %08x", fs32_to_cpu(sb, inode->magic1)); 1031da177e4SLinus Torvalds 1041da177e4SLinus Torvalds tmp_run = fsrun_to_cpu(sb, inode->inode_num); 1051da177e4SLinus Torvalds befs_debug(sb, " inode_num %u, %hu, %hu", 1061da177e4SLinus Torvalds tmp_run.allocation_group, tmp_run.start, tmp_run.len); 1071da177e4SLinus Torvalds 1081da177e4SLinus Torvalds befs_debug(sb, " uid %u", fs32_to_cpu(sb, inode->uid)); 1091da177e4SLinus Torvalds befs_debug(sb, " gid %u", fs32_to_cpu(sb, inode->gid)); 1101da177e4SLinus Torvalds befs_debug(sb, " mode %08x", fs32_to_cpu(sb, inode->mode)); 1111da177e4SLinus Torvalds befs_debug(sb, " flags %08x", fs32_to_cpu(sb, inode->flags)); 1121da177e4SLinus Torvalds befs_debug(sb, " create_time %Lu", 1131da177e4SLinus Torvalds fs64_to_cpu(sb, inode->create_time)); 1141da177e4SLinus Torvalds befs_debug(sb, " last_modified_time %Lu", 1151da177e4SLinus Torvalds fs64_to_cpu(sb, inode->last_modified_time)); 1161da177e4SLinus Torvalds 1171da177e4SLinus Torvalds tmp_run = fsrun_to_cpu(sb, inode->parent); 1181da177e4SLinus Torvalds befs_debug(sb, " parent [%u, %hu, %hu]", 1191da177e4SLinus Torvalds tmp_run.allocation_group, tmp_run.start, tmp_run.len); 1201da177e4SLinus Torvalds 1211da177e4SLinus Torvalds tmp_run = fsrun_to_cpu(sb, inode->attributes); 1221da177e4SLinus Torvalds befs_debug(sb, " attributes [%u, %hu, %hu]", 1231da177e4SLinus Torvalds tmp_run.allocation_group, tmp_run.start, tmp_run.len); 1241da177e4SLinus Torvalds 1251da177e4SLinus Torvalds befs_debug(sb, " type %08x", fs32_to_cpu(sb, inode->type)); 1261da177e4SLinus Torvalds befs_debug(sb, " inode_size %u", fs32_to_cpu(sb, inode->inode_size)); 1271da177e4SLinus Torvalds 1281da177e4SLinus Torvalds if (S_ISLNK(inode->mode)) { 1291da177e4SLinus Torvalds befs_debug(sb, " Symbolic link [%s]", inode->data.symlink); 1301da177e4SLinus Torvalds } else { 1311da177e4SLinus Torvalds int i; 1321da177e4SLinus Torvalds 1331da177e4SLinus Torvalds for (i = 0; i < BEFS_NUM_DIRECT_BLOCKS; i++) { 1341da177e4SLinus Torvalds tmp_run = 1351da177e4SLinus Torvalds fsrun_to_cpu(sb, inode->data.datastream.direct[i]); 1361da177e4SLinus Torvalds befs_debug(sb, " direct %d [%u, %hu, %hu]", i, 1371da177e4SLinus Torvalds tmp_run.allocation_group, tmp_run.start, 1381da177e4SLinus Torvalds tmp_run.len); 1391da177e4SLinus Torvalds } 1401da177e4SLinus Torvalds befs_debug(sb, " max_direct_range %Lu", 1411da177e4SLinus Torvalds fs64_to_cpu(sb, 1421da177e4SLinus Torvalds inode->data.datastream. 1431da177e4SLinus Torvalds max_direct_range)); 1441da177e4SLinus Torvalds 1451da177e4SLinus Torvalds tmp_run = fsrun_to_cpu(sb, inode->data.datastream.indirect); 1461da177e4SLinus Torvalds befs_debug(sb, " indirect [%u, %hu, %hu]", 1471da177e4SLinus Torvalds tmp_run.allocation_group, 1481da177e4SLinus Torvalds tmp_run.start, tmp_run.len); 1491da177e4SLinus Torvalds 1501da177e4SLinus Torvalds befs_debug(sb, " max_indirect_range %Lu", 1511da177e4SLinus Torvalds fs64_to_cpu(sb, 1521da177e4SLinus Torvalds inode->data.datastream. 1531da177e4SLinus Torvalds max_indirect_range)); 1541da177e4SLinus Torvalds 1551da177e4SLinus Torvalds tmp_run = 1561da177e4SLinus Torvalds fsrun_to_cpu(sb, inode->data.datastream.double_indirect); 1571da177e4SLinus Torvalds befs_debug(sb, " double indirect [%u, %hu, %hu]", 1581da177e4SLinus Torvalds tmp_run.allocation_group, tmp_run.start, 1591da177e4SLinus Torvalds tmp_run.len); 1601da177e4SLinus Torvalds 1611da177e4SLinus Torvalds befs_debug(sb, " max_double_indirect_range %Lu", 1621da177e4SLinus Torvalds fs64_to_cpu(sb, 1631da177e4SLinus Torvalds inode->data.datastream. 1641da177e4SLinus Torvalds max_double_indirect_range)); 1651da177e4SLinus Torvalds 1661da177e4SLinus Torvalds befs_debug(sb, " size %Lu", 1671da177e4SLinus Torvalds fs64_to_cpu(sb, inode->data.datastream.size)); 1681da177e4SLinus Torvalds } 1691da177e4SLinus Torvalds 1701da177e4SLinus Torvalds #endif //CONFIG_BEFS_DEBUG 1711da177e4SLinus Torvalds } 1721da177e4SLinus Torvalds 1731da177e4SLinus Torvalds /* 1741da177e4SLinus Torvalds * Display super block structure for debug. 1751da177e4SLinus Torvalds */ 1761da177e4SLinus Torvalds 1771da177e4SLinus Torvalds void 1781da177e4SLinus Torvalds befs_dump_super_block(const struct super_block *sb, befs_super_block * sup) 1791da177e4SLinus Torvalds { 1801da177e4SLinus Torvalds #ifdef CONFIG_BEFS_DEBUG 1811da177e4SLinus Torvalds 1821da177e4SLinus Torvalds befs_block_run tmp_run; 1831da177e4SLinus Torvalds 1841da177e4SLinus Torvalds befs_debug(sb, "befs_super_block information"); 1851da177e4SLinus Torvalds 1861da177e4SLinus Torvalds befs_debug(sb, " name %s", sup->name); 1871da177e4SLinus Torvalds befs_debug(sb, " magic1 %08x", fs32_to_cpu(sb, sup->magic1)); 1881da177e4SLinus Torvalds befs_debug(sb, " fs_byte_order %08x", 1891da177e4SLinus Torvalds fs32_to_cpu(sb, sup->fs_byte_order)); 1901da177e4SLinus Torvalds 1911da177e4SLinus Torvalds befs_debug(sb, " block_size %u", fs32_to_cpu(sb, sup->block_size)); 1921da177e4SLinus Torvalds befs_debug(sb, " block_shift %u", fs32_to_cpu(sb, sup->block_shift)); 1931da177e4SLinus Torvalds 1941da177e4SLinus Torvalds befs_debug(sb, " num_blocks %Lu", fs64_to_cpu(sb, sup->num_blocks)); 1951da177e4SLinus Torvalds befs_debug(sb, " used_blocks %Lu", fs64_to_cpu(sb, sup->used_blocks)); 1961da177e4SLinus Torvalds 1971da177e4SLinus Torvalds befs_debug(sb, " magic2 %08x", fs32_to_cpu(sb, sup->magic2)); 1981da177e4SLinus Torvalds befs_debug(sb, " blocks_per_ag %u", 1991da177e4SLinus Torvalds fs32_to_cpu(sb, sup->blocks_per_ag)); 2001da177e4SLinus Torvalds befs_debug(sb, " ag_shift %u", fs32_to_cpu(sb, sup->ag_shift)); 2011da177e4SLinus Torvalds befs_debug(sb, " num_ags %u", fs32_to_cpu(sb, sup->num_ags)); 2021da177e4SLinus Torvalds 2031da177e4SLinus Torvalds befs_debug(sb, " flags %08x", fs32_to_cpu(sb, sup->flags)); 2041da177e4SLinus Torvalds 2051da177e4SLinus Torvalds tmp_run = fsrun_to_cpu(sb, sup->log_blocks); 2061da177e4SLinus Torvalds befs_debug(sb, " log_blocks %u, %hu, %hu", 2071da177e4SLinus Torvalds tmp_run.allocation_group, tmp_run.start, tmp_run.len); 2081da177e4SLinus Torvalds 2091da177e4SLinus Torvalds befs_debug(sb, " log_start %Ld", fs64_to_cpu(sb, sup->log_start)); 2101da177e4SLinus Torvalds befs_debug(sb, " log_end %Ld", fs64_to_cpu(sb, sup->log_end)); 2111da177e4SLinus Torvalds 2121da177e4SLinus Torvalds befs_debug(sb, " magic3 %08x", fs32_to_cpu(sb, sup->magic3)); 2131da177e4SLinus Torvalds 2141da177e4SLinus Torvalds tmp_run = fsrun_to_cpu(sb, sup->root_dir); 2151da177e4SLinus Torvalds befs_debug(sb, " root_dir %u, %hu, %hu", 2161da177e4SLinus Torvalds tmp_run.allocation_group, tmp_run.start, tmp_run.len); 2171da177e4SLinus Torvalds 2181da177e4SLinus Torvalds tmp_run = fsrun_to_cpu(sb, sup->indices); 2191da177e4SLinus Torvalds befs_debug(sb, " indices %u, %hu, %hu", 2201da177e4SLinus Torvalds tmp_run.allocation_group, tmp_run.start, tmp_run.len); 2211da177e4SLinus Torvalds 2221da177e4SLinus Torvalds #endif //CONFIG_BEFS_DEBUG 2231da177e4SLinus Torvalds } 2241da177e4SLinus Torvalds 2251da177e4SLinus Torvalds #if 0 2261da177e4SLinus Torvalds /* unused */ 2271da177e4SLinus Torvalds void 2281da177e4SLinus Torvalds befs_dump_small_data(const struct super_block *sb, befs_small_data * sd) 2291da177e4SLinus Torvalds { 2301da177e4SLinus Torvalds } 2311da177e4SLinus Torvalds 2321da177e4SLinus Torvalds /* unused */ 2331da177e4SLinus Torvalds void 2341da177e4SLinus Torvalds befs_dump_run(const struct super_block *sb, befs_block_run run) 2351da177e4SLinus Torvalds { 2361da177e4SLinus Torvalds #ifdef CONFIG_BEFS_DEBUG 2371da177e4SLinus Torvalds 2381da177e4SLinus Torvalds run = fsrun_to_cpu(sb, run); 2391da177e4SLinus Torvalds 2401da177e4SLinus Torvalds befs_debug(sb, "[%u, %hu, %hu]", 2411da177e4SLinus Torvalds run.allocation_group, run.start, run.len); 2421da177e4SLinus Torvalds 2431da177e4SLinus Torvalds #endif //CONFIG_BEFS_DEBUG 2441da177e4SLinus Torvalds } 2451da177e4SLinus Torvalds #endif /* 0 */ 2461da177e4SLinus Torvalds 2471da177e4SLinus Torvalds void 2481da177e4SLinus Torvalds befs_dump_index_entry(const struct super_block *sb, befs_btree_super * super) 2491da177e4SLinus Torvalds { 2501da177e4SLinus Torvalds #ifdef CONFIG_BEFS_DEBUG 2511da177e4SLinus Torvalds 2521da177e4SLinus Torvalds befs_debug(sb, "Btree super structure"); 2531da177e4SLinus Torvalds befs_debug(sb, " magic %08x", fs32_to_cpu(sb, super->magic)); 2541da177e4SLinus Torvalds befs_debug(sb, " node_size %u", fs32_to_cpu(sb, super->node_size)); 2551da177e4SLinus Torvalds befs_debug(sb, " max_depth %08x", fs32_to_cpu(sb, super->max_depth)); 2561da177e4SLinus Torvalds 2571da177e4SLinus Torvalds befs_debug(sb, " data_type %08x", fs32_to_cpu(sb, super->data_type)); 2581da177e4SLinus Torvalds befs_debug(sb, " root_node_pointer %016LX", 2591da177e4SLinus Torvalds fs64_to_cpu(sb, super->root_node_ptr)); 2601da177e4SLinus Torvalds befs_debug(sb, " free_node_pointer %016LX", 2611da177e4SLinus Torvalds fs64_to_cpu(sb, super->free_node_ptr)); 2621da177e4SLinus Torvalds befs_debug(sb, " maximum size %016LX", 2631da177e4SLinus Torvalds fs64_to_cpu(sb, super->max_size)); 2641da177e4SLinus Torvalds 2651da177e4SLinus Torvalds #endif //CONFIG_BEFS_DEBUG 2661da177e4SLinus Torvalds } 2671da177e4SLinus Torvalds 2681da177e4SLinus Torvalds void 2691da177e4SLinus Torvalds befs_dump_index_node(const struct super_block *sb, befs_btree_nodehead * node) 2701da177e4SLinus Torvalds { 2711da177e4SLinus Torvalds #ifdef CONFIG_BEFS_DEBUG 2721da177e4SLinus Torvalds 2731da177e4SLinus Torvalds befs_debug(sb, "Btree node structure"); 2741da177e4SLinus Torvalds befs_debug(sb, " left %016LX", fs64_to_cpu(sb, node->left)); 2751da177e4SLinus Torvalds befs_debug(sb, " right %016LX", fs64_to_cpu(sb, node->right)); 2761da177e4SLinus Torvalds befs_debug(sb, " overflow %016LX", fs64_to_cpu(sb, node->overflow)); 2771da177e4SLinus Torvalds befs_debug(sb, " all_key_count %hu", 2781da177e4SLinus Torvalds fs16_to_cpu(sb, node->all_key_count)); 2791da177e4SLinus Torvalds befs_debug(sb, " all_key_length %hu", 2801da177e4SLinus Torvalds fs16_to_cpu(sb, node->all_key_length)); 2811da177e4SLinus Torvalds 2821da177e4SLinus Torvalds #endif //CONFIG_BEFS_DEBUG 2831da177e4SLinus Torvalds } 284