[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: Steven Whitehouse <swhiteho@redhat.com>
diff --git a/fs/gfs2/ops_file.c b/fs/gfs2/ops_file.c
index 3fb1a29..c2dbc30 100644
--- a/fs/gfs2/ops_file.c
+++ b/fs/gfs2/ops_file.c
@@ -545,8 +545,6 @@
 	[iflag_Index] = GFS2_DIF_EXHASH,
 	[iflag_JournalData] = GFS2_DIF_JDATA,
 	[iflag_DirectIO] = GFS2_DIF_DIRECTIO,
-	[iflag_InheritDirectIO] = GFS2_DIF_INHERIT_DIRECTIO,
-	[iflag_InheritJdata] = GFS2_DIF_INHERIT_JDATA,
 };
 
 static const u32 gfs2_to_iflags[32] = {
@@ -557,8 +555,8 @@
 	[gfs2fl_ExHash] = IFLAG_INDEX,
 	[gfs2fl_Jdata] = IFLAG_JOURNAL_DATA,
 	[gfs2fl_Directio] = IFLAG_DIRECTIO,
-	[gfs2fl_InheritDirectio] = IFLAG_INHERITDIRECTIO,
-	[gfs2fl_InheritJdata] = IFLAG_INHERITJDATA,
+	[gfs2fl_InheritDirectio] = IFLAG_DIRECTIO,
+	[gfs2fl_InheritJdata] = IFLAG_JOURNAL_DATA,
 };
 
 static int gfs2_get_flags(struct file *filp, u32 __user *ptr)
@@ -621,20 +619,17 @@
 	if ((new_flags ^ flags) == 0)
 		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;
 	if ((new_flags ^ flags) & ~GFS2_FLAGS_USER_SET)
 		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;
 	if (IS_IMMUTABLE(inode) && (new_flags & GFS2_DIF_IMMUTABLE))
 		goto out;
diff --git a/include/linux/iflags.h b/include/linux/iflags.h
index 1b4d9ef..5b27102 100644
--- a/include/linux/iflags.h
+++ b/include/linux/iflags.h
@@ -46,9 +46,8 @@
 	iflag_NoTail		= 15,	/* file tail should not be merged */
 	iflag_DirSync		= 16,	/* dirsync behaviour */
 	iflag_TopDir		= 17,	/* Top of directory hierarchies */
-	iflag_DirectIO		= 18,	/* Always use direct I/O on this file */
-	iflag_InheritDirectIO	= 19,	/* Set DirectIO on new files in dir */
-	iflag_InheritJdata	= 20,	/* Set JournalData on create in dir */
+	iflag_Extent		= 19,	/* Extents */
+	iflag_DirectIO		= 20,	/* Always use direct I/O on this file */
 	iflag_Reserved		= 31	/* reserved for ext2/3 lib */
 };
 
@@ -72,9 +71,8 @@
 #define IFLAG_NOTAIL		__IFL(NoTail)		/* 0x00008000 */
 #define IFLAG_DIRSYNC		__IFL(DirSync)		/* 0x00010000 */
 #define IFLAG_TOPDIR		__IFL(TopDir)		/* 0x00020000 */
-#define IFLAG_DIRECTIO		__IFL(DirectIO)		/* 0x00040000 */
-#define IFLAG_INHERITDIRECTIO	__IFL(InheritDirectIO)	/* 0x00080000 */
-#define IFLAG_INHERITJDATA	__IFL(InheritJdata)	/* 0x00100000 */
+#define IFLAG_EXTENT		__IFL(Extent)		/* 0x00080000 */
+#define IFLAG_DIRECTIO		__IFL(DirectIO)		/* 0x00100000 */
 #define IFLAG_RESERVED		__IFL(Reserved)		/* 0x80000000 */
 
 #ifdef __KERNEL__