Merge branch 'master'
[pandora-kernel.git] / include / linux / iflags.h
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 */