提交 4bcf7091 编写于 作者: S Steven Whitehouse

[GFS2] Remove inherited flags from exported flags.

We don't need the inherited flags since this action can be
implied by setting the flags on directories where they
wouldn't otherwise make sense. It reduces the number of extra
flags by two. Also updated the list of flags to take account of
one extra ext2/3 flag.

Cc: Andreas Dilger <adilger@clusterfs.com>
Signed-off-by: NSteven Whitehouse <swhiteho@redhat.com>
上级 b5ea3e1e
...@@ -545,8 +545,6 @@ static const u32 iflags_to_gfs2[32] = { ...@@ -545,8 +545,6 @@ static const u32 iflags_to_gfs2[32] = {
[iflag_Index] = GFS2_DIF_EXHASH, [iflag_Index] = GFS2_DIF_EXHASH,
[iflag_JournalData] = GFS2_DIF_JDATA, [iflag_JournalData] = GFS2_DIF_JDATA,
[iflag_DirectIO] = GFS2_DIF_DIRECTIO, [iflag_DirectIO] = GFS2_DIF_DIRECTIO,
[iflag_InheritDirectIO] = GFS2_DIF_INHERIT_DIRECTIO,
[iflag_InheritJdata] = GFS2_DIF_INHERIT_JDATA,
}; };
static const u32 gfs2_to_iflags[32] = { static const u32 gfs2_to_iflags[32] = {
...@@ -557,8 +555,8 @@ static const u32 gfs2_to_iflags[32] = { ...@@ -557,8 +555,8 @@ static const u32 gfs2_to_iflags[32] = {
[gfs2fl_ExHash] = IFLAG_INDEX, [gfs2fl_ExHash] = IFLAG_INDEX,
[gfs2fl_Jdata] = IFLAG_JOURNAL_DATA, [gfs2fl_Jdata] = IFLAG_JOURNAL_DATA,
[gfs2fl_Directio] = IFLAG_DIRECTIO, [gfs2fl_Directio] = IFLAG_DIRECTIO,
[gfs2fl_InheritDirectio] = IFLAG_INHERITDIRECTIO, [gfs2fl_InheritDirectio] = IFLAG_DIRECTIO,
[gfs2fl_InheritJdata] = IFLAG_INHERITJDATA, [gfs2fl_InheritJdata] = IFLAG_JOURNAL_DATA,
}; };
static int gfs2_get_flags(struct file *filp, u32 __user *ptr) static int gfs2_get_flags(struct file *filp, u32 __user *ptr)
...@@ -621,20 +619,17 @@ static int do_gfs2_set_flags(struct file *filp, u32 reqflags, u32 mask) ...@@ -621,20 +619,17 @@ static int do_gfs2_set_flags(struct file *filp, u32 reqflags, u32 mask)
if ((new_flags ^ flags) == 0) if ((new_flags ^ flags) == 0)
goto out; goto out;
if (S_ISDIR(inode->i_mode)) {
if ((new_flags ^ flags) & GFS2_DIF_JDATA)
new_flags ^= (GFS2_DIF_JDATA|GFS2_DIF_INHERIT_JDATA);
if ((new_flags ^ flags) & GFS2_DIF_DIRECTIO)
new_flags ^= (GFS2_DIF_DIRECTIO|GFS2_DIF_INHERIT_DIRECTIO);
}
error = -EINVAL; error = -EINVAL;
if ((new_flags ^ flags) & ~GFS2_FLAGS_USER_SET) if ((new_flags ^ flags) & ~GFS2_FLAGS_USER_SET)
goto out; goto out;
if (S_ISDIR(inode->i_mode)) {
if ((new_flags ^ flags) & (GFS2_DIF_JDATA | GFS2_DIF_DIRECTIO))
goto out;
} else if (S_ISREG(inode->i_mode)) {
if ((new_flags ^ flags) & (GFS2_DIF_INHERIT_DIRECTIO|
GFS2_DIF_INHERIT_JDATA))
goto out;
} else
goto out;
error = -EPERM; error = -EPERM;
if (IS_IMMUTABLE(inode) && (new_flags & GFS2_DIF_IMMUTABLE)) if (IS_IMMUTABLE(inode) && (new_flags & GFS2_DIF_IMMUTABLE))
goto out; goto out;
......
...@@ -46,9 +46,8 @@ enum { ...@@ -46,9 +46,8 @@ enum {
iflag_NoTail = 15, /* file tail should not be merged */ iflag_NoTail = 15, /* file tail should not be merged */
iflag_DirSync = 16, /* dirsync behaviour */ iflag_DirSync = 16, /* dirsync behaviour */
iflag_TopDir = 17, /* Top of directory hierarchies */ iflag_TopDir = 17, /* Top of directory hierarchies */
iflag_DirectIO = 18, /* Always use direct I/O on this file */ iflag_Extent = 19, /* Extents */
iflag_InheritDirectIO = 19, /* Set DirectIO on new files in dir */ iflag_DirectIO = 20, /* Always use direct I/O on this file */
iflag_InheritJdata = 20, /* Set JournalData on create in dir */
iflag_Reserved = 31 /* reserved for ext2/3 lib */ iflag_Reserved = 31 /* reserved for ext2/3 lib */
}; };
...@@ -72,9 +71,8 @@ enum { ...@@ -72,9 +71,8 @@ enum {
#define IFLAG_NOTAIL __IFL(NoTail) /* 0x00008000 */ #define IFLAG_NOTAIL __IFL(NoTail) /* 0x00008000 */
#define IFLAG_DIRSYNC __IFL(DirSync) /* 0x00010000 */ #define IFLAG_DIRSYNC __IFL(DirSync) /* 0x00010000 */
#define IFLAG_TOPDIR __IFL(TopDir) /* 0x00020000 */ #define IFLAG_TOPDIR __IFL(TopDir) /* 0x00020000 */
#define IFLAG_DIRECTIO __IFL(DirectIO) /* 0x00040000 */ #define IFLAG_EXTENT __IFL(Extent) /* 0x00080000 */
#define IFLAG_INHERITDIRECTIO __IFL(InheritDirectIO) /* 0x00080000 */ #define IFLAG_DIRECTIO __IFL(DirectIO) /* 0x00100000 */
#define IFLAG_INHERITJDATA __IFL(InheritJdata) /* 0x00100000 */
#define IFLAG_RESERVED __IFL(Reserved) /* 0x80000000 */ #define IFLAG_RESERVED __IFL(Reserved) /* 0x80000000 */
#ifdef __KERNEL__ #ifdef __KERNEL__
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册