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