2005-04-17 02:20:36 +04:00
# include <linux/fs.h>
# include <linux/pagemap.h>
# include <linux/minix_fs.h>
# define INODE_VERSION(inode) minix_sb(inode->i_sb)->s_version
# define MINIX_V1 0x0001 /* original minix fs */
# define MINIX_V2 0x0002 /* minix V2 fs */
2007-02-12 11:52:49 +03:00
# define MINIX_V3 0x0003 /* minix V3 fs */
2005-04-17 02:20:36 +04:00
/*
* minix fs inode data in memory
*/
struct minix_inode_info {
union {
__u16 i1_data [ 16 ] ;
__u32 i2_data [ 16 ] ;
} u ;
struct inode vfs_inode ;
} ;
/*
* minix super - block data in memory
*/
struct minix_sb_info {
unsigned long s_ninodes ;
unsigned long s_nzones ;
unsigned long s_imap_blocks ;
unsigned long s_zmap_blocks ;
unsigned long s_firstdatazone ;
unsigned long s_log_zone_size ;
unsigned long s_max_size ;
int s_dirsize ;
int s_namelen ;
int s_link_max ;
struct buffer_head * * s_imap ;
struct buffer_head * * s_zmap ;
struct buffer_head * s_sbh ;
struct minix_super_block * s_ms ;
unsigned short s_mount_state ;
unsigned short s_version ;
} ;
2008-02-07 11:15:44 +03:00
extern struct inode * minix_iget ( struct super_block * , unsigned long ) ;
2005-04-17 02:20:36 +04:00
extern struct minix_inode * minix_V1_raw_inode ( struct super_block * , ino_t , struct buffer_head * * ) ;
extern struct minix2_inode * minix_V2_raw_inode ( struct super_block * , ino_t , struct buffer_head * * ) ;
extern struct inode * minix_new_inode ( const struct inode * dir , int * error ) ;
extern void minix_free_inode ( struct inode * inode ) ;
extern unsigned long minix_count_free_inodes ( struct minix_sb_info * sbi ) ;
extern int minix_new_block ( struct inode * inode ) ;
2007-02-12 11:52:49 +03:00
extern void minix_free_block ( struct inode * inode , unsigned long block ) ;
2005-04-17 02:20:36 +04:00
extern unsigned long minix_count_free_blocks ( struct minix_sb_info * sbi ) ;
extern int minix_getattr ( struct vfsmount * , struct dentry * , struct kstat * ) ;
2007-10-16 12:25:21 +04:00
extern int __minix_write_begin ( struct file * file , struct address_space * mapping ,
loff_t pos , unsigned len , unsigned flags ,
struct page * * pagep , void * * fsdata ) ;
2005-04-17 02:20:36 +04:00
extern void V1_minix_truncate ( struct inode * ) ;
extern void V2_minix_truncate ( struct inode * ) ;
extern void minix_truncate ( struct inode * ) ;
extern int minix_sync_inode ( struct inode * ) ;
extern void minix_set_inode ( struct inode * , dev_t ) ;
extern int V1_minix_get_block ( struct inode * , long , struct buffer_head * , int ) ;
extern int V2_minix_get_block ( struct inode * , long , struct buffer_head * , int ) ;
2007-02-12 11:52:49 +03:00
extern unsigned V1_minix_blocks ( loff_t , struct super_block * ) ;
extern unsigned V2_minix_blocks ( loff_t , struct super_block * ) ;
2005-04-17 02:20:36 +04:00
extern struct minix_dir_entry * minix_find_entry ( struct dentry * , struct page * * ) ;
extern int minix_add_link ( struct dentry * , struct inode * ) ;
extern int minix_delete_entry ( struct minix_dir_entry * , struct page * ) ;
extern int minix_make_empty ( struct inode * , struct inode * ) ;
extern int minix_empty_dir ( struct inode * ) ;
extern void minix_set_link ( struct minix_dir_entry * , struct page * , struct inode * ) ;
extern struct minix_dir_entry * minix_dotdot ( struct inode * , struct page * * ) ;
extern ino_t minix_inode_by_name ( struct dentry * ) ;
extern int minix_sync_file ( struct file * , struct dentry * , int ) ;
2007-02-12 11:55:39 +03:00
extern const struct inode_operations minix_file_inode_operations ;
extern const struct inode_operations minix_dir_inode_operations ;
2006-03-28 13:56:42 +04:00
extern const struct file_operations minix_file_operations ;
extern const struct file_operations minix_dir_operations ;
2005-04-17 02:20:36 +04:00
static inline struct minix_sb_info * minix_sb ( struct super_block * sb )
{
return sb - > s_fs_info ;
}
static inline struct minix_inode_info * minix_i ( struct inode * inode )
{
return list_entry ( inode , struct minix_inode_info , vfs_inode ) ;
}