]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
ext4: don't inherit inappropriate inode flags from parent
authorDuane Griffin <duaneg@dghda.com>
Sun, 15 Feb 2009 23:57:26 +0000 (18:57 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 15 Feb 2009 23:57:26 +0000 (18:57 -0500)
At present INDEX and EXTENTS are the only flags that new ext4 inodes do
NOT inherit from their parent.  In addition prevent the flags DIRTY,
ECOMPR, IMAGIC, TOPDIR, HUGE_FILE and EXT_MIGRATE from being inherited.
List inheritable flags explicitly to prevent future flags from
accidentally being inherited.

This fixes the TOPDIR flag inheritance bug reported at
http://bugzilla.kernel.org/show_bug.cgi?id=9866.

Signed-off-by: Duane Griffin <duaneg@dghda.com>
Acked-by: Andreas Dilger <adilger@sun.com>
Cc: <linux-ext4@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/ext4.h
fs/ext4/ialloc.c

index d5193b55ca94d081b2487552ca41ea4bdb12602a..d4700d101ea7b9a5352542662f612413e572ca2c 100644 (file)
@@ -239,6 +239,13 @@ struct flex_groups {
 #define EXT4_FL_USER_VISIBLE           0x000BDFFF /* User visible flags */
 #define EXT4_FL_USER_MODIFIABLE                0x000B80FF /* User modifiable flags */
 
+/* Flags that should be inherited by new inodes from their parent. */
+#define EXT4_FL_INHERITED (EXT4_SECRM_FL | EXT4_UNRM_FL | EXT4_COMPR_FL |\
+                          EXT4_SYNC_FL | EXT4_IMMUTABLE_FL | EXT4_APPEND_FL |\
+                          EXT4_NODUMP_FL | EXT4_NOATIME_FL |\
+                          EXT4_NOCOMPR_FL | EXT4_JOURNAL_DATA_FL |\
+                          EXT4_NOTAIL_FL | EXT4_DIRSYNC_FL)
+
 /*
  * Inode dynamic state flags
  */
index fb51b40e3e8f5a60960d8584815f390d71ae1124..1ff3df086e58b2b9416c38e5dd37e2a55723ea9d 100644 (file)
@@ -889,7 +889,7 @@ got:
         * newly created directory and file only if -o extent mount option is
         * specified
         */
-       ei->i_flags = EXT4_I(dir)->i_flags & ~(EXT4_INDEX_FL|EXT4_EXTENTS_FL);
+       ei->i_flags = EXT4_I(dir)->i_flags & EXT4_FL_INHERITED;
        if (S_ISLNK(mode))
                ei->i_flags &= ~(EXT4_IMMUTABLE_FL|EXT4_APPEND_FL);
        /* dirsync only applies to directories */