56 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * inode.c4 *5 * Copyright (C) 2001 Will Dyson <will_dyson@pobox.com>6 */7 8#include <linux/fs.h>9 10#include "befs.h"11#include "inode.h"12 13/*14 * Validates the correctness of the befs inode15 * Returns BEFS_OK if the inode should be used, otherwise16 * returns BEFS_BAD_INODE17 */18int19befs_check_inode(struct super_block *sb, befs_inode *raw_inode,20 befs_blocknr_t inode)21{22 u32 magic1 = fs32_to_cpu(sb, raw_inode->magic1);23 befs_inode_addr ino_num = fsrun_to_cpu(sb, raw_inode->inode_num);24 u32 flags = fs32_to_cpu(sb, raw_inode->flags);25 26 /* check magic header. */27 if (magic1 != BEFS_INODE_MAGIC1) {28 befs_error(sb,29 "Inode has a bad magic header - inode = %lu",30 (unsigned long)inode);31 return BEFS_BAD_INODE;32 }33 34 /*35 * Sanity check2: inodes store their own block address. Check it.36 */37 if (inode != iaddr2blockno(sb, &ino_num)) {38 befs_error(sb, "inode blocknr field disagrees with vfs "39 "VFS: %lu, Inode %lu", (unsigned long)40 inode, (unsigned long)iaddr2blockno(sb, &ino_num));41 return BEFS_BAD_INODE;42 }43 44 /*45 * check flag46 */47 48 if (!(flags & BEFS_INODE_IN_USE)) {49 befs_error(sb, "inode is not used - inode = %lu",50 (unsigned long)inode);51 return BEFS_BAD_INODE;52 }53 54 return BEFS_OK;55}56