#include <linux/module.h>
#include <linux/parser.h>
#include <linux/buffer_head.h>
#include <linux/vmalloc.h>
#include <linux/writeback.h>
#include <linux/seq_file.h>
#include <linux/crc-itu-t.h>
MODULE_AUTHOR("Bob Copeland <me@bobcopeland.com>");
MODULE_DESCRIPTION("OMFS (ReplayTV/Karma) Filesystem for Linux");
struct buffer_head *omfs_bread(struct super_block *sb, sector_t block)
struct omfs_sb_info *sbi = OMFS_SB(sb);
if (block >= sbi->s_num_blocks)
return sb_bread(sb, clus_to_blk(sbi, block));
struct inode *omfs_new_inode(struct inode *dir, umode_t mode)
struct omfs_sb_info *sbi = OMFS_SB(dir->i_sb);
inode = new_inode(dir->i_sb);
err = omfs_allocate_range(dir->i_sb, sbi->s_mirrors, sbi->s_mirrors,
inode->i_ino = new_block;
inode_init_owner(inode, NULL, mode);
inode->i_mapping->a_ops = &omfs_aops;
inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
inode->i_op = &omfs_dir_inops;
inode->i_fop = &omfs_dir_operations;
inode->i_size = sbi->s_sys_blocksize;
inode->i_op = &omfs_file_inops;
inode->i_fop = &omfs_file_operations;
insert_inode_hash(inode);
static void omfs_update_checksums(struct omfs_inode *oi)
int xor, i, ofs = 0, count;
unsigned char *ptr = (unsigned char *) oi;
count = be32_to_cpu(oi->i_head.h_body_size);
ofs = sizeof(struct omfs_header);
crc = crc_itu_t(crc, ptr + ofs, count);