reactos/drivers/filesystems/ext2/inc/linux/fs.h
Pierre Schweitzer a1d7e9936d
[EXT2] Upgrade to 0.69
CORE-13980
2017-11-12 10:48:17 +01:00

161 lines
4 KiB
C

#ifndef _LINUX_FS_INCLUDE_
#define _LINUX_FS_INCLUDE_
#include <linux/types.h>
#include <linux/atomic.h>
#include <linux/rbtree.h>
//
// kdev
//
#define NODEV 0
typedef struct block_device * kdev_t;
#define MINORBITS 8
#define MINORMASK ((1U << MINORBITS) - 1)
#define MAJOR(dev) ((unsigned int)((int)(dev) >> MINORBITS))
#define MINOR(dev) ((unsigned int)((int)(dev) & MINORMASK))
static inline unsigned int kdev_t_to_nr(kdev_t dev) {
/*return (unsigned int)(MAJOR(dev)<<8) | MINOR(dev);*/
return 0;
}
#define NODEV 0
#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
static inline kdev_t to_kdev_t(int dev)
{
#if 0
int major, minor;
#if 0
major = (dev >> 16);
if (!major) {
major = (dev >> 8);
minor = (dev & 0xff);
} else
minor = (dev & 0xffff);
#else
major = (dev >> 8);
minor = (dev & 0xff);
#endif
return (kdev_t) MKDEV(major, minor);
#endif
return 0;
}
//
// file system specific structures
//
/*
* Kernel pointers have redundant information, so we can use a
* scheme where we can return either an error code or a dentry
* pointer with the same return value.
*
* This should be a per-architecture thing, to allow different
* error and pointer decisions.
*/
struct super_block {
unsigned long s_magic;
unsigned long s_flags;
unsigned long s_blocksize; /* blocksize */
unsigned long long s_maxbytes;
unsigned char s_blocksize_bits; /* bits of blocksize */
unsigned char s_dirt; /* any thing */
char s_id[30]; /* id string */
kdev_t s_bdev; /* block_device */
void * s_priv; /* EXT2_VCB */
struct dentry *s_root;
void *s_fs_info;
};
struct inode {
__u32 i_ino; /* inode number */
loff_t i_size; /* size */
__u32 i_atime; /* Access time */
__u32 i_ctime; /* Creation time */
__u32 i_mtime; /* Modification time */
__u32 i_dtime; /* Deletion Time */
__u64 i_blocks;
__u32 i_block[15];
umode_t i_mode; /* mode */
uid_t i_uid;
gid_t i_gid;
atomic_t i_count; /* ref count */
__u16 i_nlink;
__u32 i_generation;
__u32 i_version;
__u32 i_flags;
struct super_block *i_sb; /* super_block */
void *i_priv; /* EXT2_MCB */
__u16 i_extra_isize; /* extra fields' size */
__u64 i_file_acl;
};
//
// Inode state bits
//
#define I_DIRTY_SYNC 1 /* Not dirty enough for O_DATASYNC */
#define I_DIRTY_DATASYNC 2 /* Data-related inode changes pending */
#define I_DIRTY_PAGES 4 /* Data-related inode changes pending */
#define I_LOCK 8
#define I_FREEING 16
#define I_CLEAR 32
#define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
struct dentry {
atomic_t d_count;
struct {
int len;
char *name;
} d_name;
struct inode *d_inode;
struct dentry *d_parent;
void *d_fsdata;
struct super_block *d_sb;
};
struct file {
unsigned int f_flags;
umode_t f_mode;
__u32 f_version;
__int64 f_size;
loff_t f_pos;
struct dentry *f_dentry;
void *private_data;
};
/*
* File types
*
* NOTE! These match bits 12..15 of stat.st_mode
* (ie "(i_mode >> 12) & 15").
*/
#define DT_UNKNOWN 0
#define DT_FIFO 1
#define DT_CHR 2
#define DT_DIR 4
#define DT_BLK 6
#define DT_REG 8
#define DT_LNK 10
#define DT_SOCK 12
#define DT_WHT 14
void iget(struct inode *inode);
void iput(struct inode *inode);
ULONGLONG bmap(struct inode *i, ULONGLONG b);
#endif /*_LINUX_FS_INCLUDE_*/