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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * inode.c
  3.  * 
  4.  * Copyright (C) 2001 Will Dyson <will_dyson@pobox.com>
  5.  */
  6. #include <linux/fs.h>
  7. #include "befs_fs.h"
  8. #include "endian.h"
  9. /*
  10. Validates the correctness of the befs inode
  11. Returns BEFS_OK if the inode should be used, otherwise
  12. returns BEFS_BAD_INODE
  13. */
  14. int
  15. befs_check_inode(struct super_block *sb, befs_inode * raw_inode,
  16.  befs_blocknr_t inode)
  17. {
  18. __u32 magic1 = fs32_to_cpu(sb, raw_inode->magic1);
  19. befs_inode_addr ino_num = fsrun_to_cpu(sb, raw_inode->inode_num);
  20. __u32 flags = fs32_to_cpu(sb, raw_inode->flags);
  21. /* check magic header. */
  22. if (magic1 != BEFS_INODE_MAGIC1) {
  23. befs_error(sb,
  24.    "Inode has a bad magic header - inode = %lu", inode);
  25. return BEFS_BAD_INODE;
  26. }
  27. /*
  28.  * Sanity check2: inodes store their own block address. Check it.
  29.  */
  30. if (inode != iaddr2blockno(sb, &ino_num)) {
  31. befs_error(sb, "inode blocknr field disagrees with vfs "
  32.    "VFS: %lu, Inode %lu",
  33.    inode, iaddr2blockno(sb, &ino_num));
  34. return BEFS_BAD_INODE;
  35. }
  36. /*
  37.  * check flag
  38.  */
  39. if (!(flags & BEFS_INODE_IN_USE)) {
  40. befs_error(sb, "inode is not used - inode = %lu", inode);
  41. return BEFS_BAD_INODE;
  42. }
  43. return BEFS_OK;
  44. }