debug.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:7k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/fs/befs/debug.c
  3.  * 
  4.  * Copyright (C) 2001 Will Dyson (will_dyson at pobox.com)
  5.  *
  6.  * With help from the ntfs-tng driver by Anton Altparmakov
  7.  *
  8.  * Copyright (C) 1999  Makoto Kato (m_kato@ga2.so-net.ne.jp)
  9.  *
  10.  * debug functions
  11.  */
  12. #ifdef __KERNEL__
  13. #include <stdarg.h>
  14. #include <linux/string.h>
  15. #include <linux/spinlock.h>
  16. #include <linux/kernel.h>
  17. #include <linux/fs.h>
  18. #endif /* __KERNEL__ */
  19. #include "befs_fs.h"
  20. #include "endian.h"
  21. #define ERRBUFSIZE 1024
  22. void
  23. befs_error(const struct super_block *sb, const char *fmt, ...)
  24. {
  25. va_list args;
  26. char err_buf[ERRBUFSIZE];
  27. va_start(args, fmt);
  28. vsnprintf(err_buf, ERRBUFSIZE, fmt, args);
  29. va_end(args);
  30. printk(KERN_ERR "BeFS(%s): %sn", bdevname(sb->s_dev), err_buf);
  31. befs_debug(sb, err_buf);
  32. }
  33. void
  34. befs_warning(const struct super_block *sb, const char *fmt, ...)
  35. {
  36. va_list args;
  37. char err_buf[ERRBUFSIZE];
  38. va_start(args, fmt);
  39. vsnprintf(err_buf, ERRBUFSIZE, fmt, args);
  40. va_end(args);
  41. printk(KERN_WARNING "BeFS(%s): %sn", bdevname(sb->s_dev), err_buf);
  42. befs_debug(sb, err_buf);
  43. }
  44. void
  45. befs_debug(const struct super_block *sb, const char *fmt, ...)
  46. {
  47. #ifdef CONFIG_BEFS_DEBUG
  48. va_list args;
  49. char err_buf[ERRBUFSIZE];
  50. if (BEFS_SB(sb)->mount_opts.debug) {
  51. va_start(args, fmt);
  52. vsnprintf(err_buf, ERRBUFSIZE, fmt, args);
  53. va_end(args);
  54. printk(KERN_DEBUG "BeFS(%s): %sn",
  55.        bdevname(sb->s_dev), err_buf);
  56. }
  57. #endif //CONFIG_BEFS_DEBUG
  58. }
  59. void
  60. befs_dump_inode(const struct super_block *sb, befs_inode * inode)
  61. {
  62. #ifdef CONFIG_BEFS_DEBUG
  63. befs_block_run tmp_run;
  64. befs_debug(sb, "befs_inode infomation");
  65. befs_debug(sb, "  magic1 %08x", fs32_to_cpu(sb, inode->magic1));
  66. tmp_run = fsrun_to_cpu(sb, inode->inode_num);
  67. befs_debug(sb, "  inode_num %u, %hu, %hu",
  68.    tmp_run.allocation_group, tmp_run.start, tmp_run.len);
  69. befs_debug(sb, "  uid %u", fs32_to_cpu(sb, inode->uid));
  70. befs_debug(sb, "  gid %u", fs32_to_cpu(sb, inode->gid));
  71. befs_debug(sb, "  mode %08x", fs32_to_cpu(sb, inode->mode));
  72. befs_debug(sb, "  flags %08x", fs32_to_cpu(sb, inode->flags));
  73. befs_debug(sb, "  create_time %Lu",
  74.    fs64_to_cpu(sb, inode->create_time));
  75. befs_debug(sb, "  last_modified_time %Lu",
  76.    fs64_to_cpu(sb, inode->last_modified_time));
  77. tmp_run = fsrun_to_cpu(sb, inode->parent);
  78. befs_debug(sb, "  parent [%u, %hu, %hu]",
  79.    tmp_run.allocation_group, tmp_run.start, tmp_run.len);
  80. tmp_run = fsrun_to_cpu(sb, inode->attributes);
  81. befs_debug(sb, "  attributes [%u, %hu, %hu]",
  82.    tmp_run.allocation_group, tmp_run.start, tmp_run.len);
  83. befs_debug(sb, "  type %08x", fs32_to_cpu(sb, inode->type));
  84. befs_debug(sb, "  inode_size %u", fs32_to_cpu(sb, inode->inode_size));
  85. if (S_ISLNK(inode->mode)) {
  86. befs_debug(sb, "  Symbolic link [%s]", inode->data.symlink);
  87. } else {
  88. int i;
  89. for (i = 0; i < BEFS_NUM_DIRECT_BLOCKS; i++) {
  90. tmp_run =
  91.     fsrun_to_cpu(sb, inode->data.datastream.direct[i]);
  92. befs_debug(sb, "  direct %d [%u, %hu, %hu]", i,
  93.    tmp_run.allocation_group, tmp_run.start,
  94.    tmp_run.len);
  95. }
  96. befs_debug(sb, "  max_direct_range %Lu",
  97.    fs64_to_cpu(sb,
  98.        inode->data.datastream.
  99.        max_direct_range));
  100. tmp_run = fsrun_to_cpu(sb, inode->data.datastream.indirect);
  101. befs_debug(sb, "  indirect [%u, %hu, %hu]",
  102.    tmp_run.allocation_group,
  103.    tmp_run.start, tmp_run.len);
  104. befs_debug(sb, "  max_indirect_range %Lu",
  105.    fs64_to_cpu(sb,
  106.        inode->data.datastream.
  107.        max_indirect_range));
  108. tmp_run =
  109.     fsrun_to_cpu(sb, inode->data.datastream.double_indirect);
  110. befs_debug(sb, "  double indirect [%u, %hu, %hu]",
  111.    tmp_run.allocation_group, tmp_run.start,
  112.    tmp_run.len);
  113. befs_debug(sb, "  max_double_indirect_range %Lu",
  114.    fs64_to_cpu(sb,
  115.        inode->data.datastream.
  116.        max_double_indirect_range));
  117. befs_debug(sb, "  size %Lu",
  118.    fs64_to_cpu(sb, inode->data.datastream.size));
  119. }
  120. #endif //CONFIG_BEFS_DEBUG
  121. }
  122. /*
  123.  * Display super block structure for debug.
  124.  */
  125. void
  126. befs_dump_super_block(const struct super_block *sb, befs_super_block * sup)
  127. {
  128. #ifdef CONFIG_BEFS_DEBUG
  129. befs_block_run tmp_run;
  130. befs_debug(sb, "befs_super_block information");
  131. befs_debug(sb, "  name %s", sup->name);
  132. befs_debug(sb, "  magic1 %08x", fs32_to_cpu(sb, sup->magic1));
  133. befs_debug(sb, "  fs_byte_order %08x",
  134.    fs32_to_cpu(sb, sup->fs_byte_order));
  135. befs_debug(sb, "  block_size %u", fs32_to_cpu(sb, sup->block_size));
  136. befs_debug(sb, "  block_shift %u", fs32_to_cpu(sb, sup->block_shift));
  137. befs_debug(sb, "  num_blocks %Lu", fs64_to_cpu(sb, sup->num_blocks));
  138. befs_debug(sb, "  used_blocks %Lu", fs64_to_cpu(sb, sup->used_blocks));
  139. befs_debug(sb, "  magic2 %08x", fs32_to_cpu(sb, sup->magic2));
  140. befs_debug(sb, "  blocks_per_ag %u",
  141.    fs32_to_cpu(sb, sup->blocks_per_ag));
  142. befs_debug(sb, "  ag_shift %u", fs32_to_cpu(sb, sup->ag_shift));
  143. befs_debug(sb, "  num_ags %u", fs32_to_cpu(sb, sup->num_ags));
  144. befs_debug(sb, "  flags %08x", fs32_to_cpu(sb, sup->flags));
  145. tmp_run = fsrun_to_cpu(sb, sup->log_blocks);
  146. befs_debug(sb, "  log_blocks %u, %hu, %hu",
  147.    tmp_run.allocation_group, tmp_run.start, tmp_run.len);
  148. befs_debug(sb, "  log_start %Ld", fs64_to_cpu(sb, sup->log_start));
  149. befs_debug(sb, "  log_end %Ld", fs64_to_cpu(sb, sup->log_end));
  150. befs_debug(sb, "  magic3 %08x", fs32_to_cpu(sb, sup->magic3));
  151. tmp_run = fsrun_to_cpu(sb, sup->root_dir);
  152. befs_debug(sb, "  root_dir %u, %hu, %hu",
  153.    tmp_run.allocation_group, tmp_run.start, tmp_run.len);
  154. tmp_run = fsrun_to_cpu(sb, sup->indices);
  155. befs_debug(sb, "  indices %u, %hu, %hu",
  156.    tmp_run.allocation_group, tmp_run.start, tmp_run.len);
  157. #endif //CONFIG_BEFS_DEBUG
  158. }
  159. void
  160. befs_dump_small_data(const struct super_block *sb, befs_small_data * sd)
  161. {
  162. }
  163. void
  164. befs_dump_run(const struct super_block *sb, befs_block_run run)
  165. {
  166. #ifdef CONFIG_BEFS_DEBUG
  167. run = fsrun_to_cpu(sb, run);
  168. befs_debug(sb, "[%u, %hu, %hu]",
  169.    run.allocation_group, run.start, run.len);
  170. #endif //CONFIG_BEFS_DEBUG
  171. }
  172. void
  173. befs_dump_index_entry(const struct super_block *sb, befs_btree_super * super)
  174. {
  175. #ifdef CONFIG_BEFS_DEBUG
  176. befs_debug(sb, "Btree super structure");
  177. befs_debug(sb, "  magic %08x", fs32_to_cpu(sb, super->magic));
  178. befs_debug(sb, "  node_size %u", fs32_to_cpu(sb, super->node_size));
  179. befs_debug(sb, "  max_depth %08x", fs32_to_cpu(sb, super->max_depth));
  180. befs_debug(sb, "  data_type %08x", fs32_to_cpu(sb, super->data_type));
  181. befs_debug(sb, "  root_node_pointer %016LX",
  182.    fs64_to_cpu(sb, super->root_node_ptr));
  183. befs_debug(sb, "  free_node_pointer %016LX",
  184.    fs64_to_cpu(sb, super->free_node_ptr));
  185. befs_debug(sb, "  maximum size %016LX",
  186.    fs64_to_cpu(sb, super->max_size));
  187. #endif //CONFIG_BEFS_DEBUG
  188. }
  189. void
  190. befs_dump_index_node(const struct super_block *sb, befs_btree_nodehead * node)
  191. {
  192. #ifdef CONFIG_BEFS_DEBUG
  193. befs_debug(sb, "Btree node structure");
  194. befs_debug(sb, "  left %016LX", fs64_to_cpu(sb, node->left));
  195. befs_debug(sb, "  right %016LX", fs64_to_cpu(sb, node->right));
  196. befs_debug(sb, "  overflow %016LX", fs64_to_cpu(sb, node->overflow));
  197. befs_debug(sb, "  all_key_count %hu",
  198.    fs16_to_cpu(sb, node->all_key_count));
  199. befs_debug(sb, "  all_key_length %hu",
  200.    fs16_to_cpu(sb, node->all_key_length));
  201. #endif //CONFIG_BEFS_DEBUG
  202. }