support EXT4 so we can boot f12
authorS.Çağlar Onur <caglar@cs.princeton.edu>
Mon, 15 Feb 2010 20:53:28 +0000 (20:53 +0000)
committerS.Çağlar Onur <caglar@cs.princeton.edu>
Mon, 15 Feb 2010 20:53:28 +0000 (20:53 +0000)
kernel-2.6.spec
linux-2.6-800-rename-ext4dev-to-ext4.patch [new file with mode: 0644]
linux-2.6-810-ext4-cap-check-delay.patch [new file with mode: 0644]
planetlab-2.6.27-i686.config
planetlab-2.6.27-x86_64.config
wextoolbox-2.6.27-i686.config
wextoolbox-2.6.27-x86_64.config

index 07fb92f..80590e9 100644 (file)
@@ -176,6 +176,10 @@ Patch680: linux-2.6-680-htb-hysteresis-tso.patch
 Patch700: linux-2.6-700-egre.patch
 Patch710: linux-2.6-710-avoid-64bits-addr-pcmcia.patch
 
+# Ext4
+Patch800: linux-2.6-800-rename-ext4dev-to-ext4.patch
+Patch810: linux-2.6-810-ext4-cap-check-delay.patch
+
 BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root
 
 %description
@@ -369,6 +373,8 @@ KERNEL_PREVIOUS=vanilla
 %ApplyPatch 700
 %ApplyPatch 710
 
+%ApplyPatch 800
+%ApplyPatch 810
 
 # NetNS conflict-resolving patch for VINI. Will work with patch vini_pl_patch-1 but may
 # break with later patches.
diff --git a/linux-2.6-800-rename-ext4dev-to-ext4.patch b/linux-2.6-800-rename-ext4dev-to-ext4.patch
new file mode 100644 (file)
index 0000000..68bbfd9
--- /dev/null
@@ -0,0 +1,595 @@
+From: Theodore Ts'o <tytso@mit.edu>
+Date: Sat, 11 Oct 2008 00:02:48 +0000 (-0400)
+Subject: ext4: Rename ext4dev to ext4
+X-Git-Tag: v2.6.28-rc1~709^2
+X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=03010a3350301baac2154fa66de925ae2981b7e3
+
+ext4: Rename ext4dev to ext4
+
+The ext4 filesystem is getting stable enough that it's time to drop
+the "dev" prefix.  Also remove the requirement for the TEST_FILESYS
+flag.
+
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+---
+
+Index: linux-2.6.27.y/Documentation/filesystems/ext4.txt
+===================================================================
+--- linux-2.6.27.y.orig/Documentation/filesystems/ext4.txt
++++ linux-2.6.27.y/Documentation/filesystems/ext4.txt
+@@ -32,9 +32,9 @@ Mailing list: linux-ext4@vger.kernel.org
+     you will need to merge your changes with the version from e2fsprogs
+     1.41.x.
+-  - Create a new filesystem using the ext4dev filesystem type:
++  - Create a new filesystem using the ext4 filesystem type:
+-      # mke2fs -t ext4dev /dev/hda1
++      # mke2fs -t ext4 /dev/hda1
+     Or configure an existing ext3 filesystem to support extents and set
+     the test_fs flag to indicate that it's ok for an in-development
+@@ -47,13 +47,13 @@ Mailing list: linux-ext4@vger.kernel.org
+         # tune2fs -I 256 /dev/hda1
+-    (Note: we currently do not have tools to convert an ext4dev
++    (Note: we currently do not have tools to convert an ext4
+     filesystem back to ext3; so please do not do try this on production
+     filesystems.)
+   - Mounting:
+-      # mount -t ext4dev /dev/hda1 /wherever
++      # mount -t ext4 /dev/hda1 /wherever
+   - When comparing performance with other filesystems, remember that
+     ext3/4 by default offers higher data integrity guarantees than most.
+Index: linux-2.6.27.y/fs/Kconfig
+===================================================================
+--- linux-2.6.27.y.orig/fs/Kconfig
++++ linux-2.6.27.y/fs/Kconfig
+@@ -136,37 +136,51 @@ config EXT3_FS_SECURITY
+         If you are not using a security module that requires using
+         extended attributes for file security labels, say N.
+-config EXT4DEV_FS
+-      tristate "Ext4dev/ext4 extended fs support development (EXPERIMENTAL)"
+-      depends on EXPERIMENTAL
++config EXT4_FS
++      tristate "The Extended 4 (ext4) filesystem"
+       select JBD2
+       select CRC16
+       help
+-        Ext4dev is a predecessor filesystem of the next generation
+-        extended fs ext4, based on ext3 filesystem code. It will be
+-        renamed ext4 fs later, once ext4dev is mature and stabilized.
++        This is the next generation of the ext3 filesystem.
+         Unlike the change from ext2 filesystem to ext3 filesystem,
+-        the on-disk format of ext4dev is not the same as ext3 any more:
+-        it is based on extent maps and it supports 48-bit physical block
+-        numbers. These combined on-disk format changes will allow
+-        ext4dev/ext4 to handle more than 16 TB filesystem volumes --
+-        a hard limit that ext3 cannot overcome without changing the
+-        on-disk format.
+-
+-        Other than extent maps and 48-bit block numbers, ext4dev also is
+-        likely to have other new features such as persistent preallocation,
+-        high resolution time stamps, and larger file support etc.  These
+-        features will be added to ext4dev gradually.
++        the on-disk format of ext4 is not forwards compatible with
++        ext3; it is based on extent maps and it supports 48-bit
++        physical block numbers.  The ext4 filesystem also supports delayed
++        allocation, persistent preallocation, high resolution time stamps,
++        and a number of other features to improve performance and speed
++        up fsck time.  For more information, please see the web pages at
++        http://ext4.wiki.kernel.org.
++
++        The ext4 filesystem will support mounting an ext3
++        filesystem; while there will be some performance gains from
++        the delayed allocation and inode table readahead, the best
++        performance gains will require enabling ext4 features in the
++        filesystem, or formating a new filesystem as an ext4
++        filesystem initially.
+         To compile this file system support as a module, choose M here. The
+         module will be called ext4dev.
+         If unsure, say N.
+-config EXT4DEV_FS_XATTR
+-      bool "Ext4dev extended attributes"
+-      depends on EXT4DEV_FS
++config EXT4DEV_COMPAT
++      bool "Enable ext4dev compatibility"
++      depends on EXT4_FS
++      help
++        Starting with 2.6.28, the name of the ext4 filesystem was
++        renamed from ext4dev to ext4.  Unfortunately there are some
++        lagecy userspace programs (such as klibc's fstype) have
++        "ext4dev" hardcoded.  
++
++        To enable backwards compatibility so that systems that are
++        still expecting to mount ext4 filesystems using ext4dev,
++        chose Y here.   This feature will go away by 2.6.31, so
++        please arrange to get your userspace programs fixed!
++
++config EXT4_FS_XATTR
++      bool "Ext4 extended attributes"
++      depends on EXT4_FS
+       default y
+       help
+         Extended attributes are name:value pairs associated with inodes by
+@@ -175,11 +189,11 @@ config EXT4DEV_FS_XATTR
+         If unsure, say N.
+-        You need this for POSIX ACL support on ext4dev/ext4.
++        You need this for POSIX ACL support on ext4.
+-config EXT4DEV_FS_POSIX_ACL
+-      bool "Ext4dev POSIX Access Control Lists"
+-      depends on EXT4DEV_FS_XATTR
++config EXT4_FS_POSIX_ACL
++      bool "Ext4 POSIX Access Control Lists"
++      depends on EXT4_FS_XATTR
+       select FS_POSIX_ACL
+       help
+         POSIX Access Control Lists (ACLs) support permissions for users and
+@@ -190,14 +204,14 @@ config EXT4DEV_FS_POSIX_ACL
+         If you don't know what Access Control Lists are, say N
+-config EXT4DEV_FS_SECURITY
+-      bool "Ext4dev Security Labels"
+-      depends on EXT4DEV_FS_XATTR
++config EXT4_FS_SECURITY
++      bool "Ext4 Security Labels"
++      depends on EXT4_FS_XATTR
+       help
+         Security labels support alternative access control models
+         implemented by security modules like SELinux.  This option
+         enables an extended attribute handler for file security
+-        labels in the ext4dev/ext4 filesystem.
++        labels in the ext4 filesystem.
+         If you are not using a security module that requires using
+         extended attributes for file security labels, say N.
+@@ -240,22 +254,22 @@ config JBD2
+       help
+         This is a generic journaling layer for block devices that support
+         both 32-bit and 64-bit block numbers.  It is currently used by
+-        the ext4dev/ext4 filesystem, but it could also be used to add
++        the ext4 filesystem, but it could also be used to add
+         journal support to other file systems or block devices such
+         as RAID or LVM.
+-        If you are using ext4dev/ext4, you need to say Y here. If you are not
+-        using ext4dev/ext4 then you will probably want to say N.
++        If you are using ext4, you need to say Y here. If you are not
++        using ext4 then you will probably want to say N.
+         To compile this device as a module, choose M here. The module will be
+-        called jbd2.  If you are compiling ext4dev/ext4 into the kernel,
++        called jbd2.  If you are compiling ext4 into the kernel,
+         you cannot compile this code as a module.
+ config JBD2_DEBUG
+-      bool "JBD2 (ext4dev/ext4) debugging support"
++      bool "JBD2 (ext4) debugging support"
+       depends on JBD2 && DEBUG_FS
+       help
+-        If you are using the ext4dev/ext4 journaled file system (or
++        If you are using the ext4 journaled file system (or
+         potentially any other filesystem/device using JBD2), this option
+         allows you to enable debugging output while the system is running,
+         in order to help track down any problems you are having.
+@@ -270,9 +284,9 @@ config JBD2_DEBUG
+ config FS_MBCACHE
+ # Meta block cache for Extended Attributes (ext2/ext3/ext4)
+       tristate
+-      depends on EXT2_FS_XATTR || EXT3_FS_XATTR || EXT4DEV_FS_XATTR
+-      default y if EXT2_FS=y || EXT3_FS=y || EXT4DEV_FS=y
+-      default m if EXT2_FS=m || EXT3_FS=m || EXT4DEV_FS=m
++      depends on EXT2_FS_XATTR || EXT3_FS_XATTR || EXT4_FS_XATTR
++      default y if EXT2_FS=y || EXT3_FS=y || EXT4_FS=y
++      default m if EXT2_FS=m || EXT3_FS=m || EXT4_FS=m
+ config REISERFS_FS
+       tristate "Reiserfs support"
+Index: linux-2.6.27.y/fs/Makefile
+===================================================================
+--- linux-2.6.27.y.orig/fs/Makefile
++++ linux-2.6.27.y/fs/Makefile
+@@ -69,7 +69,7 @@ obj-$(CONFIG_DLM)            += dlm/
+ # Do not add any filesystems before this line
+ obj-$(CONFIG_REISERFS_FS)     += reiserfs/
+ obj-$(CONFIG_EXT3_FS)         += ext3/ # Before ext2 so root fs can be ext3
+-obj-$(CONFIG_EXT4DEV_FS)      += ext4/ # Before ext2 so root fs can be ext4dev
++obj-$(CONFIG_EXT4_FS)         += ext4/ # Before ext2 so root fs can be ext4dev
+ obj-$(CONFIG_JBD)             += jbd/
+ obj-$(CONFIG_JBD2)            += jbd2/
+ obj-$(CONFIG_EXT2_FS)         += ext2/
+Index: linux-2.6.27.y/fs/ext4/Makefile
+===================================================================
+--- linux-2.6.27.y.orig/fs/ext4/Makefile
++++ linux-2.6.27.y/fs/ext4/Makefile
+@@ -2,12 +2,12 @@
+ # Makefile for the linux ext4-filesystem routines.
+ #
+-obj-$(CONFIG_EXT4DEV_FS) += ext4dev.o
++obj-$(CONFIG_EXT4_FS) += ext4.o
+-ext4dev-y     := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
++ext4-y        := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
+                  ioctl.o namei.o super.o symlink.o hash.o resize.o extents.o \
+                  ext4_jbd2.o migrate.o mballoc.o
+-ext4dev-$(CONFIG_EXT4DEV_FS_XATTR)    += xattr.o xattr_user.o xattr_trusted.o
+-ext4dev-$(CONFIG_EXT4DEV_FS_POSIX_ACL)        += acl.o
+-ext4dev-$(CONFIG_EXT4DEV_FS_SECURITY) += xattr_security.o
++ext4-$(CONFIG_EXT4_FS_XATTR)          += xattr.o xattr_user.o xattr_trusted.o
++ext4-$(CONFIG_EXT4_FS_POSIX_ACL)      += acl.o
++ext4-$(CONFIG_EXT4_FS_SECURITY)               += xattr_security.o
+Index: linux-2.6.27.y/fs/ext4/acl.h
+===================================================================
+--- linux-2.6.27.y.orig/fs/ext4/acl.h
++++ linux-2.6.27.y/fs/ext4/acl.h
+@@ -51,7 +51,7 @@ static inline int ext4_acl_count(size_t 
+       }
+ }
+-#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL
++#ifdef CONFIG_EXT4_FS_POSIX_ACL
+ /* Value for inode->u.ext4_i.i_acl and inode->u.ext4_i.i_default_acl
+    if the ACL has not been cached */
+@@ -62,7 +62,7 @@ extern int ext4_permission (struct inode
+ extern int ext4_acl_chmod (struct inode *);
+ extern int ext4_init_acl (handle_t *, struct inode *, struct inode *);
+-#else  /* CONFIG_EXT4DEV_FS_POSIX_ACL */
++#else  /* CONFIG_EXT4_FS_POSIX_ACL */
+ #include <linux/sched.h>
+ #define ext4_permission NULL
+@@ -77,5 +77,5 @@ ext4_init_acl(handle_t *handle, struct i
+ {
+       return 0;
+ }
+-#endif  /* CONFIG_EXT4DEV_FS_POSIX_ACL */
++#endif  /* CONFIG_EXT4_FS_POSIX_ACL */
+Index: linux-2.6.27.y/fs/ext4/ext4_i.h
+===================================================================
+--- linux-2.6.27.y.orig/fs/ext4/ext4_i.h
++++ linux-2.6.27.y/fs/ext4/ext4_i.h
+@@ -101,7 +101,7 @@ struct ext4_inode_info {
+       struct ext4_block_alloc_info *i_block_alloc_info;
+       ext4_lblk_t             i_dir_start_lookup;
+-#ifdef CONFIG_EXT4DEV_FS_XATTR
++#ifdef CONFIG_EXT4_FS_XATTR
+       /*
+        * Extended attributes can be read independently of the main file
+        * data. Taking i_mutex even when reading would cause contention
+@@ -111,7 +111,7 @@ struct ext4_inode_info {
+        */
+       struct rw_semaphore xattr_sem;
+ #endif
+-#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL
++#ifdef CONFIG_EXT4_FS_POSIX_ACL
+       struct posix_acl        *i_acl;
+       struct posix_acl        *i_default_acl;
+ #endif
+Index: linux-2.6.27.y/fs/ext4/file.c
+===================================================================
+--- linux-2.6.27.y.orig/fs/ext4/file.c
++++ linux-2.6.27.y/fs/ext4/file.c
+@@ -167,7 +167,7 @@ const struct inode_operations ext4_file_
+       .truncate       = ext4_truncate,
+       .setattr        = ext4_setattr,
+       .getattr        = ext4_getattr,
+-#ifdef CONFIG_EXT4DEV_FS_XATTR
++#ifdef CONFIG_EXT4_FS_XATTR
+       .setxattr       = generic_setxattr,
+       .getxattr       = generic_getxattr,
+       .listxattr      = ext4_listxattr,
+Index: linux-2.6.27.y/fs/ext4/inode.c
+===================================================================
+--- linux-2.6.27.y.orig/fs/ext4/inode.c
++++ linux-2.6.27.y/fs/ext4/inode.c
+@@ -4096,7 +4096,7 @@ struct inode *ext4_iget(struct super_blo
+               return inode;
+       ei = EXT4_I(inode);
+-#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL
++#ifdef CONFIG_EXT4_FS_POSIX_ACL
+       ei->i_acl = EXT4_ACL_NOT_CACHED;
+       ei->i_default_acl = EXT4_ACL_NOT_CACHED;
+ #endif
+Index: linux-2.6.27.y/fs/ext4/namei.c
+===================================================================
+--- linux-2.6.27.y.orig/fs/ext4/namei.c
++++ linux-2.6.27.y/fs/ext4/namei.c
+@@ -1797,7 +1797,7 @@ retry:
+       err = PTR_ERR(inode);
+       if (!IS_ERR(inode)) {
+               init_special_inode(inode, inode->i_mode, rdev);
+-#ifdef CONFIG_EXT4DEV_FS_XATTR
++#ifdef CONFIG_EXT4_FS_XATTR
+               inode->i_op = &ext4_special_inode_operations;
+ #endif
+               err = ext4_add_nondir(handle, dentry, inode);
+@@ -2482,7 +2482,7 @@ const struct inode_operations ext4_dir_i
+       .mknod          = ext4_mknod,
+       .rename         = ext4_rename,
+       .setattr        = ext4_setattr,
+-#ifdef CONFIG_EXT4DEV_FS_XATTR
++#ifdef CONFIG_EXT4_FS_XATTR
+       .setxattr       = generic_setxattr,
+       .getxattr       = generic_getxattr,
+       .listxattr      = ext4_listxattr,
+@@ -2494,7 +2494,7 @@ const struct inode_operations ext4_dir_i
+ const struct inode_operations ext4_special_inode_operations = {
+       .setattr        = ext4_setattr,
+-#ifdef CONFIG_EXT4DEV_FS_XATTR
++#ifdef CONFIG_EXT4_FS_XATTR
+       .setxattr       = generic_setxattr,
+       .getxattr       = generic_getxattr,
+       .listxattr      = ext4_listxattr,
+Index: linux-2.6.27.y/fs/ext4/super.c
+===================================================================
+--- linux-2.6.27.y.orig/fs/ext4/super.c
++++ linux-2.6.27.y/fs/ext4/super.c
+@@ -562,7 +562,7 @@ static struct inode *ext4_alloc_inode(st
+       ei = kmem_cache_alloc(ext4_inode_cachep, GFP_NOFS);
+       if (!ei)
+               return NULL;
+-#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL
++#ifdef CONFIG_EXT4_FS_POSIX_ACL
+       ei->i_acl = EXT4_ACL_NOT_CACHED;
+       ei->i_default_acl = EXT4_ACL_NOT_CACHED;
+ #endif
+@@ -599,7 +599,7 @@ static void init_once(void *foo)
+       struct ext4_inode_info *ei = (struct ext4_inode_info *) foo;
+       INIT_LIST_HEAD(&ei->i_orphan);
+-#ifdef CONFIG_EXT4DEV_FS_XATTR
++#ifdef CONFIG_EXT4_FS_XATTR
+       init_rwsem(&ei->xattr_sem);
+ #endif
+       init_rwsem(&ei->i_data_sem);
+@@ -626,7 +626,7 @@ static void destroy_inodecache(void)
+ static void ext4_clear_inode(struct inode *inode)
+ {
+       struct ext4_block_alloc_info *rsv = EXT4_I(inode)->i_block_alloc_info;
+-#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL
++#ifdef CONFIG_EXT4_FS_POSIX_ACL
+       if (EXT4_I(inode)->i_acl &&
+                       EXT4_I(inode)->i_acl != EXT4_ACL_NOT_CACHED) {
+               posix_acl_release(EXT4_I(inode)->i_acl);
+@@ -718,7 +718,7 @@ static int ext4_show_options(struct seq_
+               seq_puts(seq, ",debug");
+       if (test_opt(sb, OLDALLOC))
+               seq_puts(seq, ",oldalloc");
+-#ifdef CONFIG_EXT4DEV_FS_XATTR
++#ifdef CONFIG_EXT4_FS_XATTR
+       if (test_opt(sb, XATTR_USER) &&
+               !(def_mount_opts & EXT4_DEFM_XATTR_USER))
+               seq_puts(seq, ",user_xattr");
+@@ -727,7 +727,7 @@ static int ext4_show_options(struct seq_
+               seq_puts(seq, ",nouser_xattr");
+       }
+ #endif
+-#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL
++#ifdef CONFIG_EXT4_FS_POSIX_ACL
+       if (test_opt(sb, POSIX_ACL) && !(def_mount_opts & EXT4_DEFM_ACL))
+               seq_puts(seq, ",acl");
+       if (!test_opt(sb, POSIX_ACL) && (def_mount_opts & EXT4_DEFM_ACL))
+@@ -1091,7 +1091,7 @@ static int parse_options(char *options, 
+               case Opt_orlov:
+                       clear_opt(sbi->s_mount_opt, OLDALLOC);
+                       break;
+-#ifdef CONFIG_EXT4DEV_FS_XATTR
++#ifdef CONFIG_EXT4_FS_XATTR
+               case Opt_user_xattr:
+                       set_opt(sbi->s_mount_opt, XATTR_USER);
+                       break;
+@@ -1104,7 +1104,7 @@ static int parse_options(char *options, 
+                       printk("EXT4 (no)user_xattr options not supported\n");
+                       break;
+ #endif
+-#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL
++#ifdef CONFIG_EXT4_FS_POSIX_ACL
+               case Opt_acl:
+                       set_opt(sbi->s_mount_opt, POSIX_ACL);
+                       break;
+@@ -1992,11 +1992,11 @@ static int ext4_fill_super(struct super_
+               set_opt(sbi->s_mount_opt, GRPID);
+       if (def_mount_opts & EXT4_DEFM_UID16)
+               set_opt(sbi->s_mount_opt, NO_UID32);
+-#ifdef CONFIG_EXT4DEV_FS_XATTR
++#ifdef CONFIG_EXT4_FS_XATTR
+       if (def_mount_opts & EXT4_DEFM_XATTR_USER)
+               set_opt(sbi->s_mount_opt, XATTR_USER);
+ #endif
+-#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL
++#ifdef CONFIG_EXT4_FS_POSIX_ACL
+       if (def_mount_opts & EXT4_DEFM_ACL)
+               set_opt(sbi->s_mount_opt, POSIX_ACL);
+ #endif
+@@ -2063,16 +2063,6 @@ static int ext4_fill_super(struct super_
+                      "running e2fsck is recommended\n");
+       /*
+-       * Since ext4 is still considered development code, we require
+-       * that the TEST_FILESYS flag in s->flags be set.
+-       */
+-      if (!(le32_to_cpu(es->s_flags) & EXT2_FLAGS_TEST_FILESYS)) {
+-              printk(KERN_WARNING "EXT4-fs: %s: not marked "
+-                     "OK to use with test code.\n", sb->s_id);
+-              goto failed_mount;
+-      }
+-
+-      /*
+        * Check feature flags regardless of the revision level, since we
+        * previously didn't change the revision level when setting the flags,
+        * so there is a chance incompat flags are set on a rev 0 filesystem.
+@@ -3567,13 +3557,34 @@ static int ext4_get_sb(struct file_syste
+       return get_sb_bdev(fs_type, flags, dev_name, data, ext4_fill_super, mnt);
+ }
++static struct file_system_type ext4_fs_type = {
++      .owner          = THIS_MODULE,
++      .name           = "ext4",
++      .get_sb         = ext4_get_sb,
++      .kill_sb        = kill_block_super,
++      .fs_flags       = FS_REQUIRES_DEV,
++};
++
++#ifdef CONFIG_EXT4DEV_COMPAT
++static int ext4dev_get_sb(struct file_system_type *fs_type,
++      int flags, const char *dev_name, void *data, struct vfsmount *mnt)
++{
++      printk(KERN_WARNING "EXT4-fs: Update your userspace programs "
++             "to mount using ext4\n");
++      printk(KERN_WARNING "EXT4-fs: ext4dev backwards compatibility "
++             "will go away by 2.6.31\n");
++      return get_sb_bdev(fs_type, flags, dev_name, data, ext4_fill_super, mnt);
++}
++
+ static struct file_system_type ext4dev_fs_type = {
+       .owner          = THIS_MODULE,
+       .name           = "ext4dev",
+-      .get_sb         = ext4_get_sb,
++      .get_sb         = ext4dev_get_sb,
+       .kill_sb        = kill_block_super,
+       .fs_flags       = FS_REQUIRES_DEV,
+ };
++MODULE_ALIAS("ext4dev");
++#endif
+ static int __init init_ext4_fs(void)
+ {
+@@ -3589,9 +3600,16 @@ static int __init init_ext4_fs(void)
+       err = init_inodecache();
+       if (err)
+               goto out1;
+-      err = register_filesystem(&ext4dev_fs_type);
++      err = register_filesystem(&ext4_fs_type);
+       if (err)
+               goto out;
++#ifdef CONFIG_EXT4DEV_COMPAT
++      err = register_filesystem(&ext4dev_fs_type);
++      if (err) {
++              unregister_filesystem(&ext4_fs_type);
++              goto out;
++      }
++#endif
+       return 0;
+ out:
+       destroy_inodecache();
+@@ -3604,7 +3622,10 @@ out2:
+ static void __exit exit_ext4_fs(void)
+ {
++      unregister_filesystem(&ext4_fs_type);
++#ifdef CONFIG_EXT4DEV_COMPAT
+       unregister_filesystem(&ext4dev_fs_type);
++#endif
+       destroy_inodecache();
+       exit_ext4_xattr();
+       exit_ext4_mballoc();
+Index: linux-2.6.27.y/fs/ext4/symlink.c
+===================================================================
+--- linux-2.6.27.y.orig/fs/ext4/symlink.c
++++ linux-2.6.27.y/fs/ext4/symlink.c
+@@ -34,7 +34,7 @@ const struct inode_operations ext4_symli
+       .readlink       = generic_readlink,
+       .follow_link    = page_follow_link_light,
+       .put_link       = page_put_link,
+-#ifdef CONFIG_EXT4DEV_FS_XATTR
++#ifdef CONFIG_EXT4_FS_XATTR
+       .setxattr       = generic_setxattr,
+       .getxattr       = generic_getxattr,
+       .listxattr      = ext4_listxattr,
+@@ -46,7 +46,7 @@ const struct inode_operations ext4_symli
+ const struct inode_operations ext4_fast_symlink_inode_operations = {
+       .readlink       = generic_readlink,
+       .follow_link    = ext4_follow_link,
+-#ifdef CONFIG_EXT4DEV_FS_XATTR
++#ifdef CONFIG_EXT4_FS_XATTR
+       .setxattr       = generic_setxattr,
+       .getxattr       = generic_getxattr,
+       .listxattr      = ext4_listxattr,
+Index: linux-2.6.27.y/fs/ext4/xattr.c
+===================================================================
+--- linux-2.6.27.y.orig/fs/ext4/xattr.c
++++ linux-2.6.27.y/fs/ext4/xattr.c
+@@ -100,12 +100,12 @@ static struct mb_cache *ext4_xattr_cache
+ static struct xattr_handler *ext4_xattr_handler_map[] = {
+       [EXT4_XATTR_INDEX_USER]              = &ext4_xattr_user_handler,
+-#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL
++#ifdef CONFIG_EXT4_FS_POSIX_ACL
+       [EXT4_XATTR_INDEX_POSIX_ACL_ACCESS]  = &ext4_xattr_acl_access_handler,
+       [EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT] = &ext4_xattr_acl_default_handler,
+ #endif
+       [EXT4_XATTR_INDEX_TRUSTED]           = &ext4_xattr_trusted_handler,
+-#ifdef CONFIG_EXT4DEV_FS_SECURITY
++#ifdef CONFIG_EXT4_FS_SECURITY
+       [EXT4_XATTR_INDEX_SECURITY]          = &ext4_xattr_security_handler,
+ #endif
+ };
+@@ -113,11 +113,11 @@ static struct xattr_handler *ext4_xattr_
+ struct xattr_handler *ext4_xattr_handlers[] = {
+       &ext4_xattr_user_handler,
+       &ext4_xattr_trusted_handler,
+-#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL
++#ifdef CONFIG_EXT4_FS_POSIX_ACL
+       &ext4_xattr_acl_access_handler,
+       &ext4_xattr_acl_default_handler,
+ #endif
+-#ifdef CONFIG_EXT4DEV_FS_SECURITY
++#ifdef CONFIG_EXT4_FS_SECURITY
+       &ext4_xattr_security_handler,
+ #endif
+       NULL
+Index: linux-2.6.27.y/fs/ext4/xattr.h
+===================================================================
+--- linux-2.6.27.y.orig/fs/ext4/xattr.h
++++ linux-2.6.27.y/fs/ext4/xattr.h
+@@ -63,7 +63,7 @@ struct ext4_xattr_entry {
+               EXT4_I(inode)->i_extra_isize))
+ #define IFIRST(hdr) ((struct ext4_xattr_entry *)((hdr)+1))
+-# ifdef CONFIG_EXT4DEV_FS_XATTR
++# ifdef CONFIG_EXT4_FS_XATTR
+ extern struct xattr_handler ext4_xattr_user_handler;
+ extern struct xattr_handler ext4_xattr_trusted_handler;
+@@ -88,7 +88,7 @@ extern void exit_ext4_xattr(void);
+ extern struct xattr_handler *ext4_xattr_handlers[];
+-# else  /* CONFIG_EXT4DEV_FS_XATTR */
++# else  /* CONFIG_EXT4_FS_XATTR */
+ static inline int
+ ext4_xattr_get(struct inode *inode, int name_index, const char *name,
+@@ -141,9 +141,9 @@ ext4_expand_extra_isize_ea(struct inode 
+ #define ext4_xattr_handlers   NULL
+-# endif  /* CONFIG_EXT4DEV_FS_XATTR */
++# endif  /* CONFIG_EXT4_FS_XATTR */
+-#ifdef CONFIG_EXT4DEV_FS_SECURITY
++#ifdef CONFIG_EXT4_FS_SECURITY
+ extern int ext4_init_security(handle_t *handle, struct inode *inode,
+                               struct inode *dir);
+ #else
diff --git a/linux-2.6-810-ext4-cap-check-delay.patch b/linux-2.6-810-ext4-cap-check-delay.patch
new file mode 100644 (file)
index 0000000..9785685
--- /dev/null
@@ -0,0 +1,34 @@
+Safer version of upstream commit a996031c87e093017c0763326a08896a3a4817f4
+
+Delay capable() checks to avoid (most) AVC denials when checking free blocks
+(Bug 478299 -  AVC denials on kernel 2.6.27.9-159.fc10.x86_64)
+
+Signed-off-by: Eric Sandeen <sandeen@redhat.com>
+---
+
+Index: linux-2.6.27.y/fs/ext4/balloc.c
+===================================================================
+--- linux-2.6.27.y.orig/fs/ext4/balloc.c
++++ linux-2.6.27.y/fs/ext4/balloc.c
+@@ -1770,15 +1770,15 @@ out:
+ ext4_fsblk_t ext4_has_free_blocks(struct ext4_sb_info *sbi,
+                                               ext4_fsblk_t nblocks)
+ {
+-      ext4_fsblk_t free_blocks;
+-      ext4_fsblk_t root_blocks = 0;
++      ext4_fsblk_t free_blocks, root_blocks;
+       free_blocks = percpu_counter_read_positive(&sbi->s_freeblocks_counter);
++      root_blocks = ext4_r_blocks_count(sbi->s_es);
+-      if (!capable(CAP_SYS_RESOURCE) &&
+-              sbi->s_resuid != current->fsuid &&
+-              (sbi->s_resgid == 0 || !in_group_p(sbi->s_resgid)))
+-              root_blocks = ext4_r_blocks_count(sbi->s_es);
++      if (sbi->s_resuid == current->fsuid ||
++          ((sbi->s_resgid != 0) && in_group_p(sbi->s_resgid)) ||
++          capable(CAP_SYS_RESOURCE))
++              root_blocks = 0;
+ #ifdef CONFIG_SMP
+       if (free_blocks - root_blocks < FBC_BATCH)
+               free_blocks =
index 8285e2f..2efc4ef 100644 (file)
@@ -1991,7 +1991,12 @@ CONFIG_EXT3_FS=m
 CONFIG_EXT3_FS_XATTR=y
 CONFIG_EXT3_FS_POSIX_ACL=y
 CONFIG_EXT3_FS_SECURITY=y
-# CONFIG_EXT4DEV_FS is not set
+CONFIG_EXT4_FS=m
+CONFIG_EXT4DEV_COMPAT=y
+CONFIG_EXT4_FS_XATTR=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_JBD2=m
 CONFIG_JBD=m
 # CONFIG_JBD_DEBUG is not set
 CONFIG_FS_MBCACHE=m
index 2e3c750..6de534d 100644 (file)
@@ -1880,7 +1880,12 @@ CONFIG_EXT3_FS=m
 CONFIG_EXT3_FS_XATTR=y
 CONFIG_EXT3_FS_POSIX_ACL=y
 CONFIG_EXT3_FS_SECURITY=y
-# CONFIG_EXT4DEV_FS is not set
+CONFIG_EXT4_FS=m
+CONFIG_EXT4DEV_COMPAT=y
+CONFIG_EXT4_FS_XATTR=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_JBD2=m
 CONFIG_JBD=m
 # CONFIG_JBD_DEBUG is not set
 CONFIG_FS_MBCACHE=m
index 342c712..7682bf4 100644 (file)
@@ -2013,7 +2013,12 @@ CONFIG_EXT3_FS=m
 CONFIG_EXT3_FS_XATTR=y
 CONFIG_EXT3_FS_POSIX_ACL=y
 CONFIG_EXT3_FS_SECURITY=y
-# CONFIG_EXT4DEV_FS is not set
+CONFIG_EXT4_FS=m
+CONFIG_EXT4DEV_COMPAT=y
+CONFIG_EXT4_FS_XATTR=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_JBD2=m
 CONFIG_JBD=m
 # CONFIG_JBD_DEBUG is not set
 CONFIG_FS_MBCACHE=m
index 0be5ca9..5b5de25 100644 (file)
@@ -1902,7 +1902,12 @@ CONFIG_EXT3_FS=m
 CONFIG_EXT3_FS_XATTR=y
 CONFIG_EXT3_FS_POSIX_ACL=y
 CONFIG_EXT3_FS_SECURITY=y
-# CONFIG_EXT4DEV_FS is not set
+CONFIG_EXT4_FS=m
+CONFIG_EXT4DEV_COMPAT=y
+CONFIG_EXT4_FS_XATTR=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_JBD2=m
 CONFIG_JBD=m
 # CONFIG_JBD_DEBUG is not set
 CONFIG_FS_MBCACHE=m