inode.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * inode.c
  3. *
  4. * Copyright (C) 2001 Will Dyson <will_dyson@pobox.com>
  5. */
  6. #include <linux/fs.h>
  7. #include "befs.h"
  8. #include "inode.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. }