-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add header files containing OMFS on-disk and memory structures. Signed-off-by: Bob Copeland <me@bobcopeland.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
- Loading branch information
Bob Copeland
authored and
Linus Torvalds
committed
Jul 26, 2008
1 parent
a14e4b5
commit 1b002d7
Showing
2 changed files
with
147 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
#ifndef _OMFS_H | ||
#define _OMFS_H | ||
|
||
#include <linux/module.h> | ||
#include <linux/fs.h> | ||
|
||
#include "omfs_fs.h" | ||
|
||
/* In-memory structures */ | ||
struct omfs_sb_info { | ||
u64 s_num_blocks; | ||
u64 s_bitmap_ino; | ||
u64 s_root_ino; | ||
u32 s_blocksize; | ||
u32 s_mirrors; | ||
u32 s_sys_blocksize; | ||
u32 s_clustersize; | ||
int s_block_shift; | ||
unsigned long **s_imap; | ||
int s_imap_size; | ||
struct mutex s_bitmap_lock; | ||
int s_uid; | ||
int s_gid; | ||
int s_dmask; | ||
int s_fmask; | ||
}; | ||
|
||
/* convert a cluster number to a scaled block number */ | ||
static inline sector_t clus_to_blk(struct omfs_sb_info *sbi, sector_t block) | ||
{ | ||
return block << sbi->s_block_shift; | ||
} | ||
|
||
static inline struct omfs_sb_info *OMFS_SB(struct super_block *sb) | ||
{ | ||
return sb->s_fs_info; | ||
} | ||
|
||
/* bitmap.c */ | ||
extern unsigned long omfs_count_free(struct super_block *sb); | ||
extern int omfs_allocate_block(struct super_block *sb, u64 block); | ||
extern int omfs_allocate_range(struct super_block *sb, int min_request, | ||
int max_request, u64 *return_block, int *return_size); | ||
extern int omfs_clear_range(struct super_block *sb, u64 block, int count); | ||
|
||
/* dir.c */ | ||
extern struct file_operations omfs_dir_operations; | ||
extern struct inode_operations omfs_dir_inops; | ||
extern int omfs_make_empty(struct inode *inode, struct super_block *sb); | ||
extern int omfs_is_bad(struct omfs_sb_info *sbi, struct omfs_header *header, | ||
u64 fsblock); | ||
|
||
/* file.c */ | ||
extern struct file_operations omfs_file_operations; | ||
extern struct inode_operations omfs_file_inops; | ||
extern struct address_space_operations omfs_aops; | ||
extern void omfs_make_empty_table(struct buffer_head *bh, int offset); | ||
extern int omfs_shrink_inode(struct inode *inode); | ||
|
||
/* inode.c */ | ||
extern struct inode *omfs_iget(struct super_block *sb, ino_t inode); | ||
extern struct inode *omfs_new_inode(struct inode *dir, int mode); | ||
extern int omfs_reserve_block(struct super_block *sb, sector_t block); | ||
extern int omfs_find_empty_block(struct super_block *sb, int mode, ino_t *ino); | ||
extern int omfs_sync_inode(struct inode *inode); | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
#ifndef _OMFS_FS_H | ||
#define _OMFS_FS_H | ||
|
||
/* OMFS On-disk structures */ | ||
|
||
#define OMFS_MAGIC 0xC2993D87 | ||
#define OMFS_IMAGIC 0xD2 | ||
|
||
#define OMFS_DIR 'D' | ||
#define OMFS_FILE 'F' | ||
#define OMFS_INODE_NORMAL 'e' | ||
#define OMFS_INODE_CONTINUATION 'c' | ||
#define OMFS_INODE_SYSTEM 's' | ||
#define OMFS_NAMELEN 256 | ||
#define OMFS_DIR_START 0x1b8 | ||
#define OMFS_EXTENT_START 0x1d0 | ||
#define OMFS_EXTENT_CONT 0x40 | ||
#define OMFS_XOR_COUNT 19 | ||
#define OMFS_MAX_BLOCK_SIZE 8192 | ||
|
||
struct omfs_super_block { | ||
char s_fill1[256]; | ||
__be64 s_root_block; /* block number of omfs_root_block */ | ||
__be64 s_num_blocks; /* total number of FS blocks */ | ||
__be32 s_magic; /* OMFS_MAGIC */ | ||
__be32 s_blocksize; /* size of a block */ | ||
__be32 s_mirrors; /* # of mirrors of system blocks */ | ||
__be32 s_sys_blocksize; /* size of non-data blocks */ | ||
}; | ||
|
||
struct omfs_header { | ||
__be64 h_self; /* FS block where this is located */ | ||
__be32 h_body_size; /* size of useful data after header */ | ||
__be16 h_crc; /* crc-ccitt of body_size bytes */ | ||
char h_fill1[2]; | ||
u8 h_version; /* version, always 1 */ | ||
char h_type; /* OMFS_INODE_X */ | ||
u8 h_magic; /* OMFS_IMAGIC */ | ||
u8 h_check_xor; /* XOR of header bytes before this */ | ||
__be32 h_fill2; | ||
}; | ||
|
||
struct omfs_root_block { | ||
struct omfs_header r_head; /* header */ | ||
__be64 r_fill1; | ||
__be64 r_num_blocks; /* total number of FS blocks */ | ||
__be64 r_root_dir; /* block # of root directory */ | ||
__be64 r_bitmap; /* block # of free space bitmap */ | ||
__be32 r_blocksize; /* size of a block */ | ||
__be32 r_clustersize; /* size allocated for data blocks */ | ||
__be64 r_mirrors; /* # of mirrors of system blocks */ | ||
char r_name[OMFS_NAMELEN]; /* partition label */ | ||
}; | ||
|
||
struct omfs_inode { | ||
struct omfs_header i_head; /* header */ | ||
__be64 i_parent; /* parent containing this inode */ | ||
__be64 i_sibling; /* next inode in hash bucket */ | ||
__be64 i_ctime; /* ctime, in milliseconds */ | ||
char i_fill1[35]; | ||
char i_type; /* OMFS_[DIR,FILE] */ | ||
__be32 i_fill2; | ||
char i_fill3[64]; | ||
char i_name[OMFS_NAMELEN]; /* filename */ | ||
__be64 i_size; /* size of file, in bytes */ | ||
}; | ||
|
||
struct omfs_extent_entry { | ||
__be64 e_cluster; /* start location of a set of blocks */ | ||
__be64 e_blocks; /* number of blocks after e_cluster */ | ||
}; | ||
|
||
struct omfs_extent { | ||
__be64 e_next; /* next extent table location */ | ||
__be32 e_extent_count; /* total # extents in this table */ | ||
__be32 e_fill; | ||
struct omfs_extent_entry e_entry; /* start of extent entries */ | ||
}; | ||
|
||
#endif |