home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / iflags.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.3 KB  |  103 lines

  1. #ifndef _LINUX_IFLAGS_H
  2. #define _LINUX_IFLAGS_H
  3.  
  4. /*
  5.  * A universal set of inode flags.
  6.  *
  7.  * Originally taken from ext2/3 with additions for other filesystems.
  8.  * Filesystems supporting this interface should interoperate with
  9.  * the lsattr and chattr command line tools.
  10.  *
  11.  * This interface is supported in whole or in part by:
  12.  * ext2
  13.  * ext3
  14.  * xfs
  15.  * jfs
  16.  * gfs2
  17.  *
  18.  */
  19.  
  20. #define IFLAGS_GET_IOC        _IOR('f', 1, long)
  21. #define IFLAGS_SET_IOC        _IOW('f', 2, long)
  22.  
  23. /*
  24.  * These values are provided for use as indices of an array
  25.  * for use with the iflags_cvt function below
  26.  */
  27. enum {
  28.     iflag_SecureRm        = 0,    /* Secure deletion */
  29.     iflag_Unrm        = 1,    /* Undelete */
  30.     iflag_Compress        = 2,    /* Compress file */
  31.     iflag_Sync        = 3,    /* Synchronous updates */
  32.     iflag_Immutable    = 4,    /* Immutable */
  33.     iflag_Append        = 5,    /* Append */
  34.     iflag_NoDump        = 6,    /* Don't dump file */
  35.     iflag_NoAtime        = 7,    /* No atime updates */
  36.     /* Reserved for compression usage */
  37.     iflag_Dirty        = 8,
  38.     iflag_ComprBlk        = 9,    /* One or more compressed clusters */
  39.     iflag_NoComp        = 10,    /* Don't compress */
  40.     iflag_Ecompr        = 11,    /* Compression error */
  41.     /* End of compression flags */
  42.     iflag_Btree        = 12,    /* btree format dir */
  43.     iflag_Index        = 12,    /* hash-indexed directory */
  44.     iflag_Imagic        = 13,    /* AFS directory */
  45.     iflag_JournalData    = 14,    /* file data should be journaled */
  46.     iflag_NoTail        = 15,    /* file tail should not be merged */
  47.     iflag_DirSync        = 16,    /* dirsync behaviour */
  48.     iflag_TopDir        = 17,    /* Top of directory hierarchies */
  49.     iflag_Extent        = 19,    /* Extents */
  50.     iflag_DirectIO        = 20,    /* Always use direct I/O on this file */
  51.     iflag_Reserved        = 31    /* reserved for ext2/3 lib */
  52. };
  53.  
  54. #define __IFL(x) (1<<(iflag_##x))
  55. #define IFLAG_SECRM        __IFL(SecureRm)        /* 0x00000001 */
  56. #define IFLAG_UNRM        __IFL(Unrm)        /* 0x00000002 */
  57. #define IFLAG_COMPR        __IFL(Compr)        /* 0x00000004 */
  58. #define IFLAG_SYNC        __IFL(Sync)        /* 0x00000008 */
  59. #define IFLAG_IMMUTABLE        __IFL(Immutable)    /* 0x00000010 */
  60. #define IFLAG_APPEND        __IFL(Append)        /* 0x00000020 */
  61. #define IFLAG_NODUMP        __IFL(NoDump)        /* 0x00000040 */
  62. #define IFLAG_NOATIME        __IFL(NoAtime)        /* 0x00000080 */
  63. #define IFLAG_DIRTY        __IFL(Dirty)        /* 0x00000100 */
  64. #define IFLAG_COMPRBLK        __IFL(ComprBlk)        /* 0x00000200 */
  65. #define IFLAG_NOCOMP        __IFL(NoComp)        /* 0x00000400 */
  66. #define IFLAG_ECOMPR        __IFL(Ecompr)        /* 0x00000800 */
  67. #define IFLAG_BTREE        __IFL(Btree)        /* 0x00001000 */
  68. #define IFLAG_INDEX        __IFL(Index)        /* 0x00001000 */
  69. #define IFLAG_IMAGIC        __IFL(Imagic)        /* 0x00002000 */
  70. #define IFLAG_JOURNAL_DATA    __IFL(JournalData)    /* 0x00004000 */
  71. #define IFLAG_NOTAIL        __IFL(NoTail)        /* 0x00008000 */
  72. #define IFLAG_DIRSYNC        __IFL(DirSync)        /* 0x00010000 */
  73. #define IFLAG_TOPDIR        __IFL(TopDir)        /* 0x00020000 */
  74. #define IFLAG_EXTENT        __IFL(Extent)        /* 0x00080000 */
  75. #define IFLAG_DIRECTIO        __IFL(DirectIO)        /* 0x00100000 */
  76. #define IFLAG_RESERVED        __IFL(Reserved)        /* 0x80000000 */
  77.  
  78. #ifdef __KERNEL__
  79. /**
  80.  * iflags_cvt
  81.  * @table: A table of 32 u32 flags
  82.  * @val: a 32 bit value to convert
  83.  *
  84.  * This function can be used to convert between IFLAGS values and
  85.  * the filesystem's own flags values.
  86.  *
  87.  * Returns: the converted flags
  88.  */
  89. static inline u32 iflags_cvt(const u32 *table, u32 val)
  90. {
  91.     u32 res = 0;
  92.     while(val) {
  93.         if (val & 1)
  94.             res |= *table;
  95.         table++;
  96.         val >>= 1;
  97.     }
  98.     return res;
  99. }
  100. #endif /* __KERNEL__ */
  101.  
  102. #endif /* _LINUX_IFLAGS_H */
  103.