home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / linux / fs.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-11-13  |  10.6 KB  |  276 lines

  1. #ifndef _LINUX_FS_H
  2. #define _LINUX_FS_H
  3.  
  4. /*
  5.  * This file has definitions for some important file table
  6.  * structures etc.
  7.  */
  8.  
  9. #include <linux/limits.h>
  10. #include <linux/ioctl.h>
  11.  
  12. /*
  13.  * It's silly to have NR_OPEN bigger than NR_FILE, but you can change
  14.  * the file limit at runtime and only root can increase the per-process
  15.  * nr_file rlimit, so it's safe to set up a ridiculously high absolute
  16.  * upper limit on files-per-process.
  17.  *
  18.  * Some programs (notably those using select()) may have to be 
  19.  * recompiled to take full advantage of the new limits..  
  20.  */
  21.  
  22. /* Fixed constants first: */
  23. #undef NR_OPEN
  24. extern int sysctl_nr_open;
  25. #define INR_OPEN 1024        /* Initial setting for nfile rlimits */
  26.  
  27. #define BLOCK_SIZE_BITS 10
  28. #define BLOCK_SIZE (1<<BLOCK_SIZE_BITS)
  29.  
  30. #define SEEK_SET    0    /* seek relative to beginning of file */
  31. #define SEEK_CUR    1    /* seek relative to current file position */
  32. #define SEEK_END    2    /* seek relative to end of file */
  33. #define SEEK_MAX    SEEK_END
  34.  
  35. /* And dynamically-tunable limits and defaults: */
  36. struct files_stat_struct {
  37.     int nr_files;        /* read only */
  38.     int nr_free_files;    /* read only */
  39.     int max_files;        /* tunable */
  40. };
  41. extern struct files_stat_struct files_stat;
  42. extern int get_max_files(void);
  43.  
  44. struct inodes_stat_t {
  45.     int nr_inodes;
  46.     int nr_unused;
  47.     int dummy[5];        /* padding for sysctl ABI compatibility */
  48. };
  49. extern struct inodes_stat_t inodes_stat;
  50.  
  51. extern int leases_enable, lease_break_time;
  52.  
  53. #ifdef CONFIG_DNOTIFY
  54. extern int dir_notify_enable;
  55. #endif
  56.  
  57. #define NR_FILE  8192    /* this can well be larger on a larger system */
  58.  
  59. #define MAY_EXEC 1
  60. #define MAY_WRITE 2
  61. #define MAY_READ 4
  62. #define MAY_APPEND 8
  63. #define MAY_ACCESS 16
  64. #define MAY_OPEN 32
  65.  
  66. #define FMODE_READ 1
  67. #define FMODE_WRITE 2
  68.  
  69. /* Internal kernel extensions */
  70. #define FMODE_LSEEK    4
  71. #define FMODE_PREAD    8
  72. #define FMODE_PWRITE    FMODE_PREAD    /* These go hand in hand */
  73.  
  74. /* File is being opened for execution. Primary users of this flag are
  75.    distributed filesystems that can use it to achieve correct ETXTBUSY
  76.    behavior for cross-node execution/opening_for_writing of files */
  77. #define FMODE_EXEC    16
  78.  
  79. #define RW_MASK        1
  80. #define RWA_MASK    2
  81. #define READ 0
  82. #define WRITE 1
  83. #define READA 2        /* read-ahead  - don't block if no resources */
  84. #define SWRITE 3    /* for ll_rw_block() - wait for buffer lock */
  85. #define READ_SYNC    (READ | (1 << BIO_RW_SYNC))
  86. #define READ_META    (READ | (1 << BIO_RW_META))
  87. #define WRITE_SYNC    (WRITE | (1 << BIO_RW_SYNC))
  88. #define SWRITE_SYNC    (SWRITE | (1 << BIO_RW_SYNC))
  89. #define WRITE_BARRIER    ((1 << BIO_RW) | (1 << BIO_RW_BARRIER))
  90.  
  91. #define SEL_IN        1
  92. #define SEL_OUT        2
  93. #define SEL_EX        4
  94.  
  95. /* public flags for file_system_type */
  96. #define FS_REQUIRES_DEV 1 
  97. #define FS_BINARY_MOUNTDATA 2
  98. #define FS_HAS_SUBTYPE 4
  99. #define FS_REVAL_DOT    16384    /* Check the paths ".", ".." for staleness */
  100. #define FS_RENAME_DOES_D_MOVE    32768    /* FS will handle d_move()
  101.                      * during rename() internally.
  102.                      */
  103.  
  104. /*
  105.  * These are the fs-independent mount-flags: up to 32 flags are supported
  106.  */
  107. #define MS_RDONLY     1    /* Mount read-only */
  108. #define MS_NOSUID     2    /* Ignore suid and sgid bits */
  109. #define MS_NODEV     4    /* Disallow access to device special files */
  110. #define MS_NOEXEC     8    /* Disallow program execution */
  111. #define MS_SYNCHRONOUS    16    /* Writes are synced at once */
  112. #define MS_REMOUNT    32    /* Alter flags of a mounted FS */
  113. #define MS_MANDLOCK    64    /* Allow mandatory locks on an FS */
  114. #define MS_DIRSYNC    128    /* Directory modifications are synchronous */
  115. #define MS_NOATIME    1024    /* Do not update access times. */
  116. #define MS_NODIRATIME    2048    /* Do not update directory access times */
  117. #define MS_BIND        4096
  118. #define MS_MOVE        8192
  119. #define MS_REC        16384
  120. #define MS_VERBOSE    32768    /* War is peace. Verbosity is silence.
  121.                    MS_VERBOSE is deprecated. */
  122. #define MS_SILENT    32768
  123. #define MS_POSIXACL    (1<<16)    /* VFS does not apply the umask */
  124. #define MS_UNBINDABLE    (1<<17)    /* change to unbindable */
  125. #define MS_PRIVATE    (1<<18)    /* change to private */
  126. #define MS_SLAVE    (1<<19)    /* change to slave */
  127. #define MS_SHARED    (1<<20)    /* change to shared */
  128. #define MS_RELATIME    (1<<21)    /* Update atime relative to mtime/ctime. */
  129. #define MS_KERNMOUNT    (1<<22) /* this is a kern_mount call */
  130. #define MS_I_VERSION    (1<<23) /* Update inode I_version field */
  131. #define MS_ACTIVE    (1<<30)
  132. #define MS_NOUSER    (1<<31)
  133.  
  134. /*
  135.  * Superblock flags that can be altered by MS_REMOUNT
  136.  */
  137. #define MS_RMT_MASK    (MS_RDONLY|MS_SYNCHRONOUS|MS_MANDLOCK)
  138.  
  139. /*
  140.  * Old magic mount flag and mask
  141.  */
  142. #define MS_MGC_VAL 0xC0ED0000
  143. #define MS_MGC_MSK 0xffff0000
  144.  
  145. /* Inode flags - they have nothing to superblock flags now */
  146.  
  147. #define S_SYNC        1    /* Writes are synced at once */
  148. #define S_NOATIME    2    /* Do not update access times */
  149. #define S_APPEND    4    /* Append-only file */
  150. #define S_IMMUTABLE    8    /* Immutable file */
  151. #define S_DEAD        16    /* removed, but still open directory */
  152. #define S_NOQUOTA    32    /* Inode is not counted to quota */
  153. #define S_DIRSYNC    64    /* Directory modifications are synchronous */
  154. #define S_NOCMTIME    128    /* Do not update file c/mtime */
  155. #define S_SWAPFILE    256    /* Do not truncate: swapon got its bmaps */
  156. #define S_PRIVATE    512    /* Inode is fs-internal */
  157.  
  158. /*
  159.  * Note that nosuid etc flags are inode-specific: setting some file-system
  160.  * flags just means all the inodes inherit those flags by default. It might be
  161.  * possible to override it selectively if you really wanted to with some
  162.  * ioctl() that is not currently implemented.
  163.  *
  164.  * Exception: MS_RDONLY is always applied to the entire file system.
  165.  *
  166.  * Unfortunately, it is possible to change a filesystems flags with it mounted
  167.  * with files in use.  This means that all of the inodes will not have their
  168.  * i_flags updated.  Hence, i_flags no longer inherit the superblock mount
  169.  * flags, so these have to be checked separately. -- rmk@arm.uk.linux.org
  170.  */
  171. #define __IS_FLG(inode,flg) ((inode)->i_sb->s_flags & (flg))
  172.  
  173. #define IS_RDONLY(inode) ((inode)->i_sb->s_flags & MS_RDONLY)
  174. #define IS_SYNC(inode)        (__IS_FLG(inode, MS_SYNCHRONOUS) || \
  175.                     ((inode)->i_flags & S_SYNC))
  176. #define IS_DIRSYNC(inode)    (__IS_FLG(inode, MS_SYNCHRONOUS|MS_DIRSYNC) || \
  177.                     ((inode)->i_flags & (S_SYNC|S_DIRSYNC)))
  178. #define IS_MANDLOCK(inode)    __IS_FLG(inode, MS_MANDLOCK)
  179. #define IS_NOATIME(inode)   __IS_FLG(inode, MS_RDONLY|MS_NOATIME)
  180. #define IS_I_VERSION(inode)   __IS_FLG(inode, MS_I_VERSION)
  181.  
  182. #define IS_NOQUOTA(inode)    ((inode)->i_flags & S_NOQUOTA)
  183. #define IS_APPEND(inode)    ((inode)->i_flags & S_APPEND)
  184. #define IS_IMMUTABLE(inode)    ((inode)->i_flags & S_IMMUTABLE)
  185. #define IS_POSIXACL(inode)    __IS_FLG(inode, MS_POSIXACL)
  186.  
  187. #define IS_DEADDIR(inode)    ((inode)->i_flags & S_DEAD)
  188. #define IS_NOCMTIME(inode)    ((inode)->i_flags & S_NOCMTIME)
  189. #define IS_SWAPFILE(inode)    ((inode)->i_flags & S_SWAPFILE)
  190. #define IS_PRIVATE(inode)    ((inode)->i_flags & S_PRIVATE)
  191.  
  192. /* the read-only stuff doesn't really belong here, but any other place is
  193.    probably as bad and I don't want to create yet another include file. */
  194.  
  195. #define BLKROSET   _IO(0x12,93)    /* set device read-only (0 = read-write) */
  196. #define BLKROGET   _IO(0x12,94)    /* get read-only status (0 = read_write) */
  197. #define BLKRRPART  _IO(0x12,95)    /* re-read partition table */
  198. #define BLKGETSIZE _IO(0x12,96)    /* return device size /512 (long *arg) */
  199. #define BLKFLSBUF  _IO(0x12,97)    /* flush buffer cache */
  200. #define BLKRASET   _IO(0x12,98)    /* set read ahead for block device */
  201. #define BLKRAGET   _IO(0x12,99)    /* get current read ahead setting */
  202. #define BLKFRASET  _IO(0x12,100)/* set filesystem (mm/filemap.c) read-ahead */
  203. #define BLKFRAGET  _IO(0x12,101)/* get filesystem (mm/filemap.c) read-ahead */
  204. #define BLKSECTSET _IO(0x12,102)/* set max sectors per request (ll_rw_blk.c) */
  205. #define BLKSECTGET _IO(0x12,103)/* get max sectors per request (ll_rw_blk.c) */
  206. #define BLKSSZGET  _IO(0x12,104)/* get block device sector size */
  207. #if 0
  208. #define BLKPG      _IO(0x12,105)/* See blkpg.h */
  209.  
  210. /* Some people are morons.  Do not use sizeof! */
  211.  
  212. #define BLKELVGET  _IOR(0x12,106,size_t)/* elevator get */
  213. #define BLKELVSET  _IOW(0x12,107,size_t)/* elevator set */
  214. /* This was here just to show that the number is taken -
  215.    probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */
  216. #endif
  217. /* A jump here: 108-111 have been used for various private purposes. */
  218. #define BLKBSZGET  _IOR(0x12,112,size_t)
  219. #define BLKBSZSET  _IOW(0x12,113,size_t)
  220. #define BLKGETSIZE64 _IOR(0x12,114,size_t)    /* return device size in bytes (u64 *arg) */
  221. #define BLKTRACESETUP _IOWR(0x12,115,struct blk_user_trace_setup)
  222. #define BLKTRACESTART _IO(0x12,116)
  223. #define BLKTRACESTOP _IO(0x12,117)
  224. #define BLKTRACETEARDOWN _IO(0x12,118)
  225.  
  226. #define BMAP_IOCTL 1        /* obsolete - kept for compatibility */
  227. #define FIBMAP       _IO(0x00,1)    /* bmap access */
  228. #define FIGETBSZ   _IO(0x00,2)    /* get the block size used for bmap */
  229.  
  230. #define    FS_IOC_GETFLAGS            _IOR('f', 1, long)
  231. #define    FS_IOC_SETFLAGS            _IOW('f', 2, long)
  232. #define    FS_IOC_GETVERSION        _IOR('v', 1, long)
  233. #define    FS_IOC_SETVERSION        _IOW('v', 2, long)
  234. #define FS_IOC32_GETFLAGS        _IOR('f', 1, int)
  235. #define FS_IOC32_SETFLAGS        _IOW('f', 2, int)
  236. #define FS_IOC32_GETVERSION        _IOR('v', 1, int)
  237. #define FS_IOC32_SETVERSION        _IOW('v', 2, int)
  238.  
  239. /*
  240.  * Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS)
  241.  */
  242. #define    FS_SECRM_FL            0x00000001 /* Secure deletion */
  243. #define    FS_UNRM_FL            0x00000002 /* Undelete */
  244. #define    FS_COMPR_FL            0x00000004 /* Compress file */
  245. #define FS_SYNC_FL            0x00000008 /* Synchronous updates */
  246. #define FS_IMMUTABLE_FL            0x00000010 /* Immutable file */
  247. #define FS_APPEND_FL            0x00000020 /* writes to file may only append */
  248. #define FS_NODUMP_FL            0x00000040 /* do not dump file */
  249. #define FS_NOATIME_FL            0x00000080 /* do not update atime */
  250. /* Reserved for compression usage... */
  251. #define FS_DIRTY_FL            0x00000100
  252. #define FS_COMPRBLK_FL            0x00000200 /* One or more compressed clusters */
  253. #define FS_NOCOMP_FL            0x00000400 /* Don't compress */
  254. #define FS_ECOMPR_FL            0x00000800 /* Compression error */
  255. /* End compression flags --- maybe not all used */
  256. #define FS_BTREE_FL            0x00001000 /* btree format dir */
  257. #define FS_INDEX_FL            0x00001000 /* hash-indexed directory */
  258. #define FS_IMAGIC_FL            0x00002000 /* AFS directory */
  259. #define FS_JOURNAL_DATA_FL        0x00004000 /* Reserved for ext3 */
  260. #define FS_NOTAIL_FL            0x00008000 /* file tail should not be merged */
  261. #define FS_DIRSYNC_FL            0x00010000 /* dirsync behaviour (directories only) */
  262. #define FS_TOPDIR_FL            0x00020000 /* Top of directory hierarchies*/
  263. #define FS_EXTENT_FL            0x00080000 /* Extents */
  264. #define FS_DIRECTIO_FL            0x00100000 /* Use direct i/o */
  265. #define FS_RESERVED_FL            0x80000000 /* reserved for ext2 lib */
  266.  
  267. #define FS_FL_USER_VISIBLE        0x0003DFFF /* User visible flags */
  268. #define FS_FL_USER_MODIFIABLE        0x000380FF /* User modifiable flags */
  269.  
  270.  
  271. #define SYNC_FILE_RANGE_WAIT_BEFORE    1
  272. #define SYNC_FILE_RANGE_WRITE        2
  273. #define SYNC_FILE_RANGE_WAIT_AFTER    4
  274.  
  275. #endif /* _LINUX_FS_H */
  276.