diff options
Diffstat (limited to 'include/linux/fs.h')
| -rw-r--r-- | include/linux/fs.h | 126 | 
1 files changed, 126 insertions, 0 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 001c7cff2d4..b33cfc97b9c 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -64,6 +64,73 @@ typedef void (dio_iodone_t)(struct kiocb *iocb, loff_t offset,  			ssize_t bytes, void *private, int ret,  			bool is_async); +#define MAY_EXEC		0x00000001 +#define MAY_WRITE		0x00000002 +#define MAY_READ		0x00000004 +#define MAY_APPEND		0x00000008 +#define MAY_ACCESS		0x00000010 +#define MAY_OPEN		0x00000020 +#define MAY_CHDIR		0x00000040 +/* called from RCU mode, don't block */ +#define MAY_NOT_BLOCK		0x00000080 + +/* + * flags in file.f_mode.  Note that FMODE_READ and FMODE_WRITE must correspond + * to O_WRONLY and O_RDWR via the strange trick in __dentry_open() + */ + +/* file is open for reading */ +#define FMODE_READ		((__force fmode_t)0x1) +/* file is open for writing */ +#define FMODE_WRITE		((__force fmode_t)0x2) +/* file is seekable */ +#define FMODE_LSEEK		((__force fmode_t)0x4) +/* file can be accessed using pread */ +#define FMODE_PREAD		((__force fmode_t)0x8) +/* file can be accessed using pwrite */ +#define FMODE_PWRITE		((__force fmode_t)0x10) +/* File is opened for execution with sys_execve / sys_uselib */ +#define FMODE_EXEC		((__force fmode_t)0x20) +/* File is opened with O_NDELAY (only set for block devices) */ +#define FMODE_NDELAY		((__force fmode_t)0x40) +/* File is opened with O_EXCL (only set for block devices) */ +#define FMODE_EXCL		((__force fmode_t)0x80) +/* File is opened using open(.., 3, ..) and is writeable only for ioctls +   (specialy hack for floppy.c) */ +#define FMODE_WRITE_IOCTL	((__force fmode_t)0x100) +/* 32bit hashes as llseek() offset (for directories) */ +#define FMODE_32BITHASH         ((__force fmode_t)0x200) +/* 64bit hashes as llseek() offset (for directories) */ +#define FMODE_64BITHASH         ((__force fmode_t)0x400) + +/* + * Don't update ctime and mtime. + * + * Currently a special hack for the XFS open_by_handle ioctl, but we'll + * hopefully graduate it to a proper O_CMTIME flag supported by open(2) soon. + */ +#define FMODE_NOCMTIME		((__force fmode_t)0x800) + +/* Expect random access pattern */ +#define FMODE_RANDOM		((__force fmode_t)0x1000) + +/* File is huge (eg. /dev/kmem): treat loff_t as unsigned */ +#define FMODE_UNSIGNED_OFFSET	((__force fmode_t)0x2000) + +/* File is opened with O_PATH; almost nothing can be done with it */ +#define FMODE_PATH		((__force fmode_t)0x4000) + +/* File was opened by fanotify and shouldn't generate fanotify events */ +#define FMODE_NONOTIFY		((__force fmode_t)0x1000000) + +/* + * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector + * that indicates that they should check the contents of the iovec are + * valid, but not check the memory that the iovec elements + * points too. + */ +#define CHECK_IOVEC_ONLY -1 +  /*   * The below are the various read and write types that we support. Some of   * them include behavioral modifiers that send information down to the @@ -1557,6 +1624,60 @@ struct super_operations {  };  /* + * Inode flags - they have no relation to superblock flags now + */ +#define S_SYNC		1	/* Writes are synced at once */ +#define S_NOATIME	2	/* Do not update access times */ +#define S_APPEND	4	/* Append-only file */ +#define S_IMMUTABLE	8	/* Immutable file */ +#define S_DEAD		16	/* removed, but still open directory */ +#define S_NOQUOTA	32	/* Inode is not counted to quota */ +#define S_DIRSYNC	64	/* Directory modifications are synchronous */ +#define S_NOCMTIME	128	/* Do not update file c/mtime */ +#define S_SWAPFILE	256	/* Do not truncate: swapon got its bmaps */ +#define S_PRIVATE	512	/* Inode is fs-internal */ +#define S_IMA		1024	/* Inode has an associated IMA struct */ +#define S_AUTOMOUNT	2048	/* Automount/referral quasi-directory */ +#define S_NOSEC		4096	/* no suid or xattr security attributes */ + +/* + * Note that nosuid etc flags are inode-specific: setting some file-system + * flags just means all the inodes inherit those flags by default. It might be + * possible to override it selectively if you really wanted to with some + * ioctl() that is not currently implemented. + * + * Exception: MS_RDONLY is always applied to the entire file system. + * + * Unfortunately, it is possible to change a filesystems flags with it mounted + * with files in use.  This means that all of the inodes will not have their + * i_flags updated.  Hence, i_flags no longer inherit the superblock mount + * flags, so these have to be checked separately. -- rmk@arm.uk.linux.org + */ +#define __IS_FLG(inode, flg)	((inode)->i_sb->s_flags & (flg)) + +#define IS_RDONLY(inode)	((inode)->i_sb->s_flags & MS_RDONLY) +#define IS_SYNC(inode)		(__IS_FLG(inode, MS_SYNCHRONOUS) || \ +					((inode)->i_flags & S_SYNC)) +#define IS_DIRSYNC(inode)	(__IS_FLG(inode, MS_SYNCHRONOUS|MS_DIRSYNC) || \ +					((inode)->i_flags & (S_SYNC|S_DIRSYNC))) +#define IS_MANDLOCK(inode)	__IS_FLG(inode, MS_MANDLOCK) +#define IS_NOATIME(inode)	__IS_FLG(inode, MS_RDONLY|MS_NOATIME) +#define IS_I_VERSION(inode)	__IS_FLG(inode, MS_I_VERSION) + +#define IS_NOQUOTA(inode)	((inode)->i_flags & S_NOQUOTA) +#define IS_APPEND(inode)	((inode)->i_flags & S_APPEND) +#define IS_IMMUTABLE(inode)	((inode)->i_flags & S_IMMUTABLE) +#define IS_POSIXACL(inode)	__IS_FLG(inode, MS_POSIXACL) + +#define IS_DEADDIR(inode)	((inode)->i_flags & S_DEAD) +#define IS_NOCMTIME(inode)	((inode)->i_flags & S_NOCMTIME) +#define IS_SWAPFILE(inode)	((inode)->i_flags & S_SWAPFILE) +#define IS_PRIVATE(inode)	((inode)->i_flags & S_PRIVATE) +#define IS_IMA(inode)		((inode)->i_flags & S_IMA) +#define IS_AUTOMOUNT(inode)	((inode)->i_flags & S_AUTOMOUNT) +#define IS_NOSEC(inode)		((inode)->i_flags & S_NOSEC) + +/*   * Inode state bits.  Protected by inode->i_lock   *   * Three bits determine the dirty state of the inode, I_DIRTY_SYNC, @@ -1688,6 +1809,11 @@ int sync_inode_metadata(struct inode *inode, int wait);  struct file_system_type {  	const char *name;  	int fs_flags; +#define FS_REQUIRES_DEV		1  +#define FS_BINARY_MOUNTDATA	2 +#define FS_HAS_SUBTYPE		4 +#define FS_REVAL_DOT		16384	/* Check the paths ".", ".." for staleness */ +#define FS_RENAME_DOES_D_MOVE	32768	/* FS will handle d_move() during rename() internally. */  	struct dentry *(*mount) (struct file_system_type *, int,  		       const char *, void *);  	void (*kill_sb) (struct super_block *);  |