[Pkg-lustre-svn-commit] updated: [b8d78a6] LDISKFS kernel patchset adapted
Marco Nelles
marco.nelles at credativ.de
Wed Jul 4 07:33:38 UTC 2012
The following commit has been merged in the master branch:
commit b8d78a6707facb498c1aa96a7b301242fa1430bd
Author: Marco Nelles <marco.nelles at credativ.de>
Date: Wed Jul 4 11:32:59 2012 +0200
LDISKFS kernel patchset adapted
diff --git a/debian/patches/ldiskfs-kernel-patchset.patch b/debian/patches/ldiskfs-kernel-patchset.patch
index 6104e62..76cf126 100644
--- a/debian/patches/ldiskfs-kernel-patchset.patch
+++ b/debian/patches/ldiskfs-kernel-patchset.patch
@@ -87,14 +87,14 @@ index 0000000..79a0e7f
+ struct ext4_group_desc *desc,
diff --git a/ldiskfs/kernel_patches/patches/ext4-alloc-policy-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-alloc-policy-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..9f72327
+index 0000000..9586365
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-alloc-policy-2.6.32-vanilla.patch
@@ -0,0 +1,87 @@
+Index: linux-source-2.6.32/fs/ext4/ialloc.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ialloc.c 2012-06-28 12:10:06.381677398 +0200
-++++ linux-source-2.6.32/fs/ext4/ialloc.c 2012-06-28 12:10:30.005662279 +0200
++--- linux-source-2.6.32.orig/fs/ext4/ialloc.c 2012-07-03 16:27:47.221373830 +0200
+++++ linux-source-2.6.32/fs/ext4/ialloc.c 2012-07-04 11:11:28.289382838 +0200
+@@ -1086,6 +1086,36 @@
+ return ERR_PTR(err);
+ }
@@ -134,8 +134,8 @@ index 0000000..9f72327
+ {
+Index: linux-source-2.6.32/fs/ext4/namei.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/namei.c 2012-06-28 12:10:09.617666134 +0200
-++++ linux-source-2.6.32/fs/ext4/namei.c 2012-06-28 12:10:30.005662279 +0200
++--- linux-source-2.6.32.orig/fs/ext4/namei.c 2012-07-03 16:27:57.129375408 +0200
+++++ linux-source-2.6.32/fs/ext4/namei.c 2012-07-04 11:11:28.289382838 +0200
+@@ -155,6 +155,12 @@
+ u32 ldp_magic;
+ };
@@ -168,9 +168,9 @@ index 0000000..9f72327
+ }
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:10:23.325664479 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:10:30.009672059 +0200
-+@@ -1581,6 +1581,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-04 11:11:15.541407883 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-04 11:11:28.293385850 +0200
++@@ -1602,6 +1602,7 @@
+ extern struct inode *ext4_new_inode(handle_t *, struct inode *, int,
+ const struct qstr *qstr, __u32 goal);
+ extern void ext4_free_inode(handle_t *, struct inode *);
@@ -180,15 +180,15 @@ index 0000000..9f72327
+ extern unsigned long ext4_count_dirs(struct super_block *);
diff --git a/ldiskfs/kernel_patches/patches/ext4-back-dquot-to-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-back-dquot-to-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..0025564
+index 0000000..160f26d
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-back-dquot-to-2.6.32-vanilla.patch
@@ -0,0 +1,54 @@
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:11:24.113671273 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:11:27.705663349 +0200
-+@@ -1017,9 +1017,47 @@
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-04 11:15:14.133374111 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-04 11:15:17.645376714 +0200
++@@ -1055,9 +1055,47 @@
+ static ssize_t ext4_quota_write(struct super_block *sb, int type,
+ const char *data, size_t len, loff_t off);
+
@@ -240,15 +240,15 @@ index 0000000..0025564
+ .claim_space = dquot_claim_space,
diff --git a/ldiskfs/kernel_patches/patches/ext4-big-endian-check-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-big-endian-check-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..2ca65a5
+index 0000000..697594e
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-big-endian-check-2.6.32-vanilla.patch
@@ -0,0 +1,57 @@
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:10:23.337667624 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:10:26.929665337 +0200
-+@@ -72,6 +72,8 @@
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-04 11:11:15.553381198 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-04 11:11:22.225361770 +0200
++@@ -74,6 +74,8 @@
+ static int ext4_freeze(struct super_block *sb);
+
+
@@ -257,16 +257,16 @@ index 0000000..2ca65a5
+ ext4_fsblk_t ext4_block_bitmap(struct super_block *sb,
+ struct ext4_group_desc *bg)
+ {
-+@@ -1107,7 +1109,7 @@
++@@ -1145,7 +1147,7 @@
+ Opt_stripe, Opt_delalloc, Opt_nodelalloc,
+ Opt_block_validity, Opt_noblock_validity,
+ Opt_inode_readahead_blks, Opt_journal_ioprio,
+- Opt_mballoc,
++ Opt_mballoc, Opt_bigendian_extents,
+ Opt_discard, Opt_nodiscard,
++ Opt_init_inode_table, Opt_noinit_inode_table,
+ };
-+
-+@@ -1177,6 +1179,7 @@
++@@ -1216,6 +1218,7 @@
+ {Opt_auto_da_alloc, "auto_da_alloc=%u"},
+ {Opt_auto_da_alloc, "auto_da_alloc"},
+ {Opt_noauto_da_alloc, "noauto_da_alloc"},
@@ -274,7 +274,7 @@ index 0000000..2ca65a5
+ {Opt_mballoc, "mballoc"},
+ {Opt_discard, "discard"},
+ {Opt_nodiscard, "nodiscard"},
-+@@ -1612,6 +1615,9 @@
++@@ -1651,6 +1654,9 @@
+ else
+ set_opt(sbi->s_mount_opt,NO_AUTO_DA_ALLOC);
+ break;
@@ -284,7 +284,7 @@ index 0000000..2ca65a5
+ case Opt_discard:
+ set_opt(sbi->s_mount_opt, DISCARD);
+ break;
-+@@ -2693,6 +2699,16 @@
++@@ -2732,6 +2738,16 @@
+ goto failed_mount;
+ }
+
@@ -303,15 +303,15 @@ index 0000000..2ca65a5
+ sbi->s_proc = proc_mkdir(sb->s_id, ext4_proc_root);
diff --git a/ldiskfs/kernel_patches/patches/ext4-disable-mb-cache-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-disable-mb-cache-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..77fb42d
+index 0000000..325498f
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-disable-mb-cache-2.6.32-vanilla.patch
@@ -0,0 +1,154 @@
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:11:20.317665268 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:11:24.109662558 +0200
-+@@ -827,7 +827,8 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-04 11:15:10.525377110 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-04 11:15:14.129376720 +0200
++@@ -828,7 +828,8 @@
+ /*
+ * Mount flags
+ */
@@ -323,17 +323,17 @@ index 0000000..77fb42d
+ #define EXT4_MOUNT_ERRORS_CONT 0x00010 /* Continue on errors */
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:10:54.885674648 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:11:24.113671273 +0200
-+@@ -1118,6 +1118,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-04 11:14:55.401380946 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-04 11:15:14.133374111 +0200
++@@ -1156,6 +1156,7 @@
+ Opt_inode_readahead_blks, Opt_journal_ioprio,
+ Opt_mballoc, Opt_bigendian_extents, Opt_force_over_128tb,
+ Opt_extents, Opt_noextents,
++ Opt_no_mbcache,
+ Opt_discard, Opt_nodiscard,
++ Opt_init_inode_table, Opt_noinit_inode_table,
+ };
-+
-+@@ -1190,6 +1191,7 @@
++@@ -1229,6 +1230,7 @@
+ {Opt_bigendian_extents, "bigendian_extents"},
+ {Opt_force_over_128tb, "force_over_128tb"},
+ {Opt_mballoc, "mballoc"},
@@ -341,7 +341,7 @@ index 0000000..77fb42d
+ {Opt_extents, "extents"},
+ {Opt_noextents, "noextents"},
+ {Opt_discard, "discard"},
-+@@ -1667,6 +1669,9 @@
++@@ -1706,6 +1708,9 @@
+ }
+ clear_opt(sbi->s_mount_opt, EXTENTS);
+ break;
@@ -353,8 +353,8 @@ index 0000000..77fb42d
+ "Unrecognized mount option \"%s\" "
+Index: linux-source-2.6.32/fs/ext4/xattr.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/xattr.c 2012-06-28 12:11:20.321664768 +0200
-++++ linux-source-2.6.32/fs/ext4/xattr.c 2012-06-28 12:11:24.117664822 +0200
++--- linux-source-2.6.32.orig/fs/ext4/xattr.c 2012-07-04 11:15:10.529368662 +0200
+++++ linux-source-2.6.32/fs/ext4/xattr.c 2012-07-04 11:15:14.133374111 +0200
+@@ -86,7 +86,8 @@
+ # define ea_bdebug(f...)
+ #endif
@@ -463,14 +463,14 @@ index 0000000..77fb42d
+ ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
diff --git a/ldiskfs/kernel_patches/patches/ext4-dynlocks-common-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-dynlocks-common-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..07fad0b
+index 0000000..4a5f900
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-dynlocks-common-2.6.32-vanilla.patch
-@@ -0,0 +1,350 @@
+@@ -0,0 +1,332 @@
+Index: linux-source-2.6.32/fs/ext4/dynlocks.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-++++ linux-source-2.6.32/fs/ext4/dynlocks.c 2012-06-28 12:10:45.425668386 +0200
+++++ linux-source-2.6.32/fs/ext4/dynlocks.c 2012-07-04 11:14:45.633371140 +0200
+@@ -0,0 +1,236 @@
++/*
++ * Dynamic Locks
@@ -711,7 +711,7 @@ index 0000000..07fad0b
+Index: linux-source-2.6.32/include/linux/dynlocks.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-++++ linux-source-2.6.32/include/linux/dynlocks.h 2012-06-28 12:10:45.425668386 +0200
+++++ linux-source-2.6.32/include/linux/dynlocks.h 2012-07-04 11:14:45.637376168 +0200
+@@ -0,0 +1,34 @@
++#ifndef _LINUX_DYNLOCKS_H
++#define _LINUX_DYNLOCKS_H
@@ -749,8 +749,8 @@ index 0000000..07fad0b
++
+Index: linux-source-2.6.32/fs/ext4/Makefile
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/Makefile 2012-06-28 12:09:59.685666701 +0200
-++++ linux-source-2.6.32/fs/ext4/Makefile 2012-06-28 12:10:45.425668386 +0200
++--- linux-source-2.6.32.orig/fs/ext4/Makefile 2012-07-03 16:27:38.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/Makefile 2012-07-04 11:14:45.637376168 +0200
+@@ -7,7 +7,7 @@
+ 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 \
@@ -762,15 +762,18 @@ index 0000000..07fad0b
+ ext4-$(CONFIG_EXT4_FS_POSIX_ACL) += acl.o
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:10:42.285668861 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:10:45.429666724 +0200
-+@@ -4082,32 +4082,37 @@
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-04 11:11:46.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-04 11:14:45.637376168 +0200
++@@ -4131,20 +4131,23 @@
+ return err;
+ ext4_kset = kset_create_and_add("ext4", NULL, fs_kobj);
+ if (!ext4_kset)
+- goto out4;
++ goto out5;
+ ext4_proc_root = proc_mkdir("fs/ext4", NULL);
++
++ err = ext4_init_feat_adverts();
++
+ err = init_ext4_mballoc();
+ if (err)
+- goto out3;
@@ -788,28 +791,7 @@ index 0000000..07fad0b
+ goto out1;
+ err = register_filesystem(&ext4_fs_type);
+ if (err)
-+ goto out;
-+ return 0;
-+ out:
-+- destroy_inodecache();
-++ dynlock_cache_exit();
-+ out1:
-+- exit_ext4_xattr();
-++ destroy_inodecache();
-+ out2:
-+- exit_ext4_mballoc();
-++ exit_ext4_xattr();
-+ out3:
-++ exit_ext4_mballoc();
-++out4:
-+ remove_proc_entry("fs/ext4", NULL);
-+ kset_unregister(ext4_kset);
-+-out4:
-++out5:
-+ exit_ext4_system_zone();
-+ return err;
-+ }
-+@@ -4115,6 +4120,7 @@
++@@ -4171,6 +4174,7 @@
+ static void __exit exit_ext4_fs(void)
+ {
+ unregister_filesystem(&ext4_fs_type);
@@ -819,14 +801,14 @@ index 0000000..07fad0b
+ exit_ext4_mballoc();
diff --git a/ldiskfs/kernel_patches/patches/ext4-export-64bit-name-hash-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-export-64bit-name-hash-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..6745d2f
+index 0000000..8683dab
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-export-64bit-name-hash-2.6.32-vanilla.patch
@@ -0,0 +1,134 @@
+Index: linux-source-2.6.32/fs/ext4/dir.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/dir.c 2012-06-28 12:11:16.361665139 +0200
-++++ linux-source-2.6.32/fs/ext4/dir.c 2012-06-28 12:11:34.597665360 +0200
++--- linux-source-2.6.32.orig/fs/ext4/dir.c 2012-07-04 11:15:07.123039573 +0200
+++++ linux-source-2.6.32/fs/ext4/dir.c 2012-07-04 11:15:23.709373618 +0200
+@@ -246,22 +246,50 @@
+ return ret;
+ }
@@ -940,9 +922,9 @@ index 0000000..6745d2f
+ /*
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:11:24.109662558 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:11:34.597665360 +0200
-+@@ -808,6 +808,14 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-04 11:15:14.129376720 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-04 11:15:23.709373618 +0200
++@@ -809,6 +809,14 @@
+ __u64 i_fs_version;
+ };
+
@@ -1013,15 +995,15 @@ index 0000000..fc65734
+ if (err == -EAGAIN)
diff --git a/ldiskfs/kernel_patches/patches/ext4-extents-mount-option-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-extents-mount-option-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..c7f1de8
+index 0000000..dd5b614
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-extents-mount-option-2.6.32-vanilla.patch
@@ -0,0 +1,168 @@
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:10:42.265665313 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:10:54.877664607 +0200
-+@@ -849,6 +849,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-04 11:11:46.085374005 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-04 11:14:55.265377612 +0200
++@@ -850,6 +850,7 @@
+ #define EXT4_MOUNT_QUOTA 0x80000 /* Some quota option set */
+ #define EXT4_MOUNT_USRQUOTA 0x100000 /* "old" user quota */
+ #define EXT4_MOUNT_GRPQUOTA 0x200000 /* "old" group quota */
@@ -1031,8 +1013,8 @@ index 0000000..c7f1de8
+ #define EXT4_MOUNT_I_VERSION 0x2000000 /* i_version support */
+Index: linux-source-2.6.32/fs/ext4/ext4_jbd2.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4_jbd2.h 2012-06-28 12:10:23.325664479 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4_jbd2.h 2012-06-28 12:10:54.877664607 +0200
++--- linux-source-2.6.32.orig/fs/ext4/ext4_jbd2.h 2012-07-04 11:11:15.541407883 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4_jbd2.h 2012-07-04 11:14:55.265377612 +0200
+@@ -33,7 +33,7 @@
+
+ #define EXT4_SINGLEDATA_TRANS_BLOCKS(sb) \
@@ -1044,8 +1026,8 @@ index 0000000..c7f1de8
+ ext4_handle_dirty_metadata(handle, NULL, bh)
+Index: linux-source-2.6.32/fs/ext4/extents.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/extents.c 2012-06-28 12:10:23.329669991 +0200
-++++ linux-source-2.6.32/fs/ext4/extents.c 2012-06-28 12:10:54.881664295 +0200
++--- linux-source-2.6.32.orig/fs/ext4/extents.c 2012-07-04 11:11:15.545375533 +0200
+++++ linux-source-2.6.32/fs/ext4/extents.c 2012-07-04 11:14:55.269377836 +0200
+@@ -2449,7 +2449,7 @@
+ * possible initialization would be here
+ */
@@ -1066,8 +1048,8 @@ index 0000000..c7f1de8
+ #ifdef EXTENTS_STATS
+Index: linux-source-2.6.32/fs/ext4/ialloc.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ialloc.c 2012-06-28 12:10:30.005662279 +0200
-++++ linux-source-2.6.32/fs/ext4/ialloc.c 2012-06-28 12:10:54.881664295 +0200
++--- linux-source-2.6.32.orig/fs/ext4/ialloc.c 2012-07-04 11:11:28.289382838 +0200
+++++ linux-source-2.6.32/fs/ext4/ialloc.c 2012-07-04 11:14:55.269377836 +0200
+@@ -1047,7 +1047,7 @@
+ if (err)
+ goto fail_free_drop;
@@ -1079,8 +1061,8 @@ index 0000000..c7f1de8
+ ext4_set_inode_flag(inode, EXT4_INODE_EXTENTS);
+Index: linux-source-2.6.32/fs/ext4/migrate.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/migrate.c 2012-06-28 12:08:18.565662551 +0200
-++++ linux-source-2.6.32/fs/ext4/migrate.c 2012-06-28 12:10:54.881664295 +0200
++--- linux-source-2.6.32.orig/fs/ext4/migrate.c 2012-07-03 16:01:41.049370380 +0200
+++++ linux-source-2.6.32/fs/ext4/migrate.c 2012-07-04 11:14:55.397684644 +0200
+@@ -459,13 +459,10 @@
+ unsigned long max_entries;
+ __u32 goal;
@@ -1101,9 +1083,9 @@ index 0000000..c7f1de8
+ if (S_ISLNK(inode->i_mode) && inode->i_blocks == 0)
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:10:45.429666724 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:10:54.885674648 +0200
-+@@ -895,6 +895,8 @@
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-04 11:14:45.637376168 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-04 11:14:55.401380946 +0200
++@@ -933,6 +933,8 @@
+ seq_puts(seq, ",journal_checksum");
+ if (test_opt(sb, NOBH))
+ seq_puts(seq, ",nobh");
@@ -1112,15 +1094,15 @@ index 0000000..c7f1de8
+ if (test_opt(sb, I_VERSION))
+ seq_puts(seq, ",i_version");
+ if (!test_opt(sb, DELALLOC))
-+@@ -1115,6 +1117,7 @@
++@@ -1153,6 +1155,7 @@
+ Opt_block_validity, Opt_noblock_validity,
+ Opt_inode_readahead_blks, Opt_journal_ioprio,
+ Opt_mballoc, Opt_bigendian_extents, Opt_force_over_128tb,
++ Opt_extents, Opt_noextents,
+ Opt_discard, Opt_nodiscard,
++ Opt_init_inode_table, Opt_noinit_inode_table,
+ };
-+
-+@@ -1187,6 +1190,8 @@
++@@ -1226,6 +1229,8 @@
+ {Opt_bigendian_extents, "bigendian_extents"},
+ {Opt_force_over_128tb, "force_over_128tb"},
+ {Opt_mballoc, "mballoc"},
@@ -1129,7 +1111,7 @@ index 0000000..c7f1de8
+ {Opt_discard, "discard"},
+ {Opt_nodiscard, "nodiscard"},
+ {Opt_err, NULL},
-+@@ -1231,6 +1236,7 @@
++@@ -1270,6 +1275,7 @@
+ int qtype, qfmt;
+ char *qname;
+ #endif
@@ -1137,7 +1119,7 @@ index 0000000..c7f1de8
+
+ if (!options)
+ return 1;
-+@@ -1635,6 +1641,32 @@
++@@ -1674,6 +1680,32 @@
+ case Opt_force_over_128tb:
+ force_over_128tb = 1;
+ break;
@@ -1170,7 +1152,7 @@ index 0000000..c7f1de8
+ default:
+ ext4_msg(sb, KERN_ERR,
+ "Unrecognized mount option \"%s\" "
-+@@ -2499,6 +2531,14 @@
++@@ -2538,6 +2570,14 @@
+ set_opt(sbi->s_mount_opt, BARRIER);
+
+ /*
@@ -1187,7 +1169,7 @@ index 0000000..c7f1de8
+ */
diff --git a/ldiskfs/kernel_patches/patches/ext4-fiemap-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-fiemap-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..c462357
+index 0000000..f56ee16
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-fiemap-2.6.32-vanilla.patch
@@ -0,0 +1,111 @@
@@ -1198,9 +1180,9 @@ index 0000000..c462357
+
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:10:54.877664607 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:10:58.337671542 +0200
-+@@ -473,7 +473,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-04 11:14:55.265377612 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-04 11:14:59.581367627 +0200
++@@ -474,7 +474,7 @@
+ #define EXT4_IOC_GROUP_ADD _IOW('f', 8, struct ext4_new_group_input)
+ #define EXT4_IOC_MIGRATE _IO('f', 9)
+ /* note ioctl 10 reserved for an early version of the FIEMAP ioctl */
@@ -1211,8 +1193,8 @@ index 0000000..c462357
+
+Index: linux-source-2.6.32/fs/ext4/ioctl.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ioctl.c 2012-06-28 12:08:17.325666867 +0200
-++++ linux-source-2.6.32/fs/ext4/ioctl.c 2012-06-28 12:10:58.337671542 +0200
++--- linux-source-2.6.32.orig/fs/ext4/ioctl.c 2012-07-03 16:01:41.049370380 +0200
+++++ linux-source-2.6.32/fs/ext4/ioctl.c 2012-07-04 11:14:59.585422968 +0200
+@@ -18,6 +18,71 @@
+ #include "ext4_jbd2.h"
+ #include "ext4.h"
@@ -1298,39 +1280,39 @@ index 0000000..c462357
+Index: linux-source-2.6.32/fs/ext4/fiemap.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-++++ linux-source-2.6.32/fs/ext4/fiemap.h 2012-06-28 12:10:58.337671542 +0200
+++++ linux-source-2.6.32/fs/ext4/fiemap.h 2012-07-04 11:14:59.585422968 +0200
+@@ -0,0 +1,2 @@
++
++#include_next <fiemap.h>
diff --git a/ldiskfs/kernel_patches/patches/ext4-force_over_128tb-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-force_over_128tb-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..6bc65dc
+index 0000000..1251150
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-force_over_128tb-2.6.32-vanilla.patch
@@ -0,0 +1,57 @@
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:10:26.929665337 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:10:32.945663837 +0200
-+@@ -55,6 +55,8 @@
-+ struct proc_dir_entry *ext4_proc_root;
-+ static struct kset *ext4_kset;
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-04 11:11:22.225361770 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-04 11:11:32.573374989 +0200
++@@ -57,6 +57,8 @@
++ static struct ext4_lazy_init *ext4_li_info;
++ static struct mutex ext4_li_mtx;
+
++static int force_over_128tb;
++
+ static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
+ unsigned long journal_devnum);
+ static int ext4_commit_super(struct super_block *sb, int sync);
-+@@ -1109,7 +1111,7 @@
++@@ -1147,7 +1149,7 @@
+ Opt_stripe, Opt_delalloc, Opt_nodelalloc,
+ Opt_block_validity, Opt_noblock_validity,
+ Opt_inode_readahead_blks, Opt_journal_ioprio,
+- Opt_mballoc, Opt_bigendian_extents,
++ Opt_mballoc, Opt_bigendian_extents, Opt_force_over_128tb,
+ Opt_discard, Opt_nodiscard,
++ Opt_init_inode_table, Opt_noinit_inode_table,
+ };
-+
-+@@ -1180,6 +1182,7 @@
++@@ -1219,6 +1221,7 @@
+ {Opt_auto_da_alloc, "auto_da_alloc"},
+ {Opt_noauto_da_alloc, "noauto_da_alloc"},
+ {Opt_bigendian_extents, "bigendian_extents"},
@@ -1338,7 +1320,7 @@ index 0000000..6bc65dc
+ {Opt_mballoc, "mballoc"},
+ {Opt_discard, "discard"},
+ {Opt_nodiscard, "nodiscard"},
-+@@ -1626,6 +1629,9 @@
++@@ -1665,6 +1668,9 @@
+ break;
+ case Opt_mballoc:
+ break;
@@ -1348,7 +1330,7 @@ index 0000000..6bc65dc
+ default:
+ ext4_msg(sb, KERN_ERR,
+ "Unrecognized mount option \"%s\" "
-+@@ -2651,6 +2657,16 @@
++@@ -2690,6 +2696,16 @@
+ goto failed_mount;
+ }
+
@@ -1529,14 +1511,14 @@ index 0000000..3d13724
+ */
diff --git a/ldiskfs/kernel_patches/patches/ext4-journal-callback-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-journal-callback-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..ee6ff80
+index 0000000..5afa3f1
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-journal-callback-2.6.32-vanilla.patch
-@@ -0,0 +1,470 @@
+@@ -0,0 +1,464 @@
+Index: linux-source-2.6.32/fs/ext4/ext4_jbd2.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4_jbd2.h 2012-06-28 12:10:54.877664607 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4_jbd2.h 2012-06-28 12:11:44.185852824 +0200
++--- linux-source-2.6.32.orig/fs/ext4/ext4_jbd2.h 2012-07-04 11:14:55.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4_jbd2.h 2012-07-04 11:28:07.509366730 +0200
+@@ -106,6 +106,80 @@
+ #define EXT4_MAXQUOTAS_INIT_BLOCKS(sb) (MAXQUOTAS*EXT4_QUOTA_INIT_BLOCKS(sb))
+ #define EXT4_MAXQUOTAS_DEL_BLOCKS(sb) (MAXQUOTAS*EXT4_QUOTA_DEL_BLOCKS(sb))
@@ -1620,8 +1602,8 @@ index 0000000..ee6ff80
+ struct inode *inode,
+Index: linux-source-2.6.32/fs/ext4/mballoc.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/mballoc.h 2012-06-28 12:11:12.525665254 +0200
-++++ linux-source-2.6.32/fs/ext4/mballoc.h 2012-06-28 12:11:44.185852824 +0200
++--- linux-source-2.6.32.orig/fs/ext4/mballoc.h 2012-07-04 11:15:03.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/mballoc.h 2012-07-04 11:28:07.509366730 +0200
+@@ -96,23 +96,24 @@
+ */
+ #define MB_DEFAULT_GROUP_PREALLOC 512
@@ -1658,8 +1640,8 @@ index 0000000..ee6ff80
+ struct ext4_prealloc_space {
+Index: linux-source-2.6.32/fs/ext4/mballoc.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-06-28 12:11:38.101746741 +0200
-++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-06-28 12:11:44.193730804 +0200
++--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-07-04 11:15:26.913377451 +0200
+++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-07-04 11:28:07.513381629 +0200
+@@ -21,6 +21,7 @@
+ * mballoc.c contains the multiblocks allocation routines
+ */
@@ -1683,7 +1665,7 @@ index 0000000..ee6ff80
+
+ static inline void *mb_correct_addr_and_bit(int *bit, void *addr)
+ {
-+@@ -2652,8 +2653,6 @@
++@@ -2656,8 +2657,6 @@
+ }
+ }
+
@@ -1692,14 +1674,14 @@ index 0000000..ee6ff80
+ return 0;
+ }
+
-+@@ -2745,62 +2744,52 @@
++@@ -2760,56 +2759,52 @@
+ * This function is called by the jbd2 layer once the commit has finished,
+ * so we know we can free the blocks that were released with that commit.
+ */
+-static void release_blocks_on_commit(journal_t *journal, transaction_t *txn)
++static void ext4_free_data_callback(struct super_block *sb,
-++ struct ext4_journal_cb_entry *jce,
-++ int rc)
+++ struct ext4_journal_cb_entry *jce,
+++ int rc)
+ {
+- struct super_block *sb = journal->j_private;
++ struct ext4_free_data *entry = (struct ext4_free_data *)jce;
@@ -1715,18 +1697,12 @@ index 0000000..ee6ff80
+- mb_debug(1, "gonna free %u blocks in group %u (0x%p):",
+- entry->count, entry->group, entry);
++ mb_debug(1, "gonna free %u blocks in group %u (0x%p):",
-++ entry->efd_count, entry->efd_group, entry);
+++ entry->efd_count, entry->efd_group, entry);
+
+- if (test_opt(sb, DISCARD)) {
+- int ret;
-+- ext4_fsblk_t discard_block;
-+-
-+- discard_block = entry->start_blk +
-+- ext4_group_first_block_no(sb, entry->group);
-+- trace_ext4_discard_blocks(sb,
-+- (unsigned long long)discard_block,
-+- entry->count);
-+- ret = sb_issue_discard(sb, discard_block, entry->count);
++- ret = ext4_issue_discard(sb, entry->group,
++- entry->start_blk, entry->count);
+- if (ret == EOPNOTSUPP) {
+- ext4_warning(sb, __func__,
+- "discard not supported, disabling");
@@ -1735,10 +1711,10 @@ index 0000000..ee6ff80
++ if (test_opt(sb, DISCARD)) {
++ int ret;
++ ret = ext4_issue_discard(sb, entry->efd_group,
-++ entry->efd_start_blk, entry->efd_count);
+++ entry->efd_start_blk, entry->efd_count);
++ if (unlikely(ret == -EOPNOTSUPP)) {
++ ext4_warning(sb, "discard not supported, "
-++ "disabling");
+++ "disabling");
++ clear_opt(EXT4_SB(sb)->s_mount_opt, DISCARD);
+ }
++ }
@@ -1765,18 +1741,18 @@ index 0000000..ee6ff80
+- }
+- ext4_unlock_group(sb, entry->group);
+- kmem_cache_free(ext4_free_ext_cachep, entry);
-+- ext4_mb_unload_buddy(&e4b);
++- ext4_mb_release_desc(&e4b);
++ err = ext4_mb_load_buddy(sb, entry->efd_group, &e4b);
++ /* we expect to find existing buddy because it's pinned */
++ BUG_ON(err != 0);
++
++ db = e4b.bd_info;
++ /* there are blocks to put in buddy to make them really free */
-++ count += entry->efd_count;
+++ count += entry->efd_count;
++ count2++;
++ ext4_lock_group(sb, entry->efd_group);
++ /* Take it out of per group rb tree */
-++ rb_erase(&entry->efd_node, &(db->bb_free_root));
+++ rb_erase(&entry->efd_node, &(db->bb_free_root));
++ mb_free_blocks(NULL, &e4b, entry->efd_start_blk, entry->efd_count);
++
++ if (!db->bb_free_root.rb_node) {
@@ -1792,7 +1768,7 @@ index 0000000..ee6ff80
+
+ mb_debug(1, "freed %u blocks in %u structures\n", count, count2);
+ }
-+@@ -2852,22 +2841,22 @@
++@@ -2861,22 +2856,22 @@
+ kmem_cache_create("ext4_alloc_context",
+ sizeof(struct ext4_allocation_context),
+ 0, SLAB_RECLAIM_ACCOUNT, NULL);
@@ -1828,7 +1804,7 @@ index 0000000..ee6ff80
+ }
+
+ void exit_ext4_mballoc(void)
-+@@ -2879,7 +2868,7 @@
++@@ -2888,7 +2883,7 @@
+ rcu_barrier();
+ kmem_cache_destroy(ext4_pspace_cachep);
+ kmem_cache_destroy(ext4_ac_cachep);
@@ -1837,7 +1813,7 @@ index 0000000..ee6ff80
+ ext4_remove_debugfs_entry();
+ }
+
-+@@ -3421,8 +3410,8 @@
++@@ -3430,8 +3425,8 @@
+ n = rb_first(&(grp->bb_free_root));
+
+ while (n) {
@@ -1848,7 +1824,7 @@ index 0000000..ee6ff80
+ n = rb_next(n);
+ }
+ return;
-+@@ -4666,11 +4655,11 @@
++@@ -4675,11 +4670,11 @@
+ * AND the blocks are associated with the same group.
+ */
+ static int can_merge(struct ext4_free_data *entry1,
@@ -1864,7 +1840,7 @@ index 0000000..ee6ff80
+ return 1;
+ return 0;
+ }
-+@@ -4683,7 +4672,6 @@
++@@ -4692,7 +4687,6 @@
+ struct ext4_free_data *entry;
+ struct ext4_group_info *db = e4b->bd_info;
+ struct super_block *sb = e4b->bd_sb;
@@ -1872,7 +1848,7 @@ index 0000000..ee6ff80
+ struct rb_node **n = &db->bb_free_root.rb_node, *node;
+ struct rb_node *parent = NULL, *new_node;
+
-+@@ -4691,8 +4679,8 @@
++@@ -4700,8 +4694,8 @@
+ BUG_ON(e4b->bd_bitmap_page == NULL);
+ BUG_ON(e4b->bd_buddy_page == NULL);
+
@@ -1883,7 +1859,7 @@ index 0000000..ee6ff80
+
+ if (!*n) {
+ /* first free block exent. We need to
-+@@ -4705,15 +4693,15 @@
++@@ -4714,15 +4708,15 @@
+ }
+ while (*n) {
+ parent = *n;
@@ -1903,7 +1879,7 @@ index 0000000..ee6ff80
+ return 0;
+ }
+ }
-+@@ -4724,34 +4712,29 @@
++@@ -4733,34 +4727,29 @@
+ /* Now try to see the extent can be merged to left and right */
+ node = rb_prev(new_node);
+ if (node) {
@@ -1949,7 +1925,7 @@ index 0000000..ee6ff80
+ return 0;
+ }
+
-+@@ -4872,11 +4855,11 @@
++@@ -4881,11 +4870,11 @@
+ * blocks being freed are metadata. these blocks shouldn't
+ * be used until this transaction is committed
+ */
@@ -1968,9 +1944,9 @@ index 0000000..ee6ff80
+ mb_clear_bits(bitmap_bh->b_data, bit, count);
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:11:38.097666318 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:11:44.197733192 +0200
-+@@ -301,6 +301,23 @@
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-04 11:15:26.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-04 11:28:07.517374742 +0200
++@@ -303,6 +303,23 @@
+
+ EXPORT_SYMBOL(ext4_journal_abort_handle);
+
@@ -1994,15 +1970,15 @@ index 0000000..ee6ff80
+ /* Deal with the reporting of failure conditions on a filesystem such as
+ * inconsistencies detected or read IO failures.
+ *
-+@@ -2979,6 +2996,8 @@
++@@ -3033,6 +3050,8 @@
+ }
+ set_task_ioprio(sbi->s_journal->j_task, journal_ioprio);
+
++ sbi->s_journal->j_commit_callback = ext4_journal_commit_callback;
++
+ no_journal:
-+ err = percpu_counter_init(&sbi->s_freeblocks_counter,
-+ ext4_count_free_blocks(sb));
++ if (test_opt(sb, NOBH)) {
++ if (!(test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA)) {
diff --git a/ldiskfs/kernel_patches/patches/ext4-kill-dx_root-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-kill-dx_root-2.6.32-vanilla.patch
new file mode 100644
index 0000000..fa4aa0d
@@ -2248,15 +2224,15 @@ index 0000000..fa4aa0d
+ frame = frames + 1;
diff --git a/ldiskfs/kernel_patches/patches/ext4-large-eas-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-large-eas-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..443a153
+index 0000000..3f2bfc8
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-large-eas-2.6.32-vanilla.patch
@@ -0,0 +1,736 @@
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:11:16.361665139 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:11:20.317665268 +0200
-+@@ -1258,6 +1258,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-04 11:15:07.125372180 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-04 11:15:10.525377110 +0200
++@@ -1262,6 +1262,7 @@
+ #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
+ #define EXT4_FEATURE_INCOMPAT_MMP 0x0100
+ #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
@@ -2264,7 +2240,7 @@ index 0000000..443a153
+ #define EXT4_FEATURE_INCOMPAT_DIRDATA 0x1000
+
+ #define EXT4_FEATURE_COMPAT_SUPP EXT2_FEATURE_COMPAT_EXT_ATTR
-+@@ -1267,6 +1268,7 @@
++@@ -1271,6 +1272,7 @@
+ EXT4_FEATURE_INCOMPAT_EXTENTS| \
+ EXT4_FEATURE_INCOMPAT_64BIT| \
+ EXT4_FEATURE_INCOMPAT_FLEX_BG| \
@@ -2272,7 +2248,7 @@ index 0000000..443a153
+ EXT4_FEATURE_INCOMPAT_MMP| \
+ EXT4_FEATURE_INCOMPAT_DIRDATA)
+
-+@@ -1565,6 +1567,12 @@
++@@ -1586,6 +1588,12 @@
+ #endif
+
+ /*
@@ -2287,8 +2263,8 @@ index 0000000..443a153
+
+Index: linux-source-2.6.32/fs/ext4/xattr.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/xattr.c 2012-06-28 12:10:12.481658638 +0200
-++++ linux-source-2.6.32/fs/ext4/xattr.c 2012-06-28 12:11:20.321664768 +0200
++--- linux-source-2.6.32.orig/fs/ext4/xattr.c 2012-07-03 16:27:58.681371270 +0200
+++++ linux-source-2.6.32/fs/ext4/xattr.c 2012-07-04 11:15:10.529368662 +0200
+@@ -168,19 +168,26 @@
+ }
+
@@ -2961,8 +2937,8 @@ index 0000000..443a153
+ for (n = (le32_to_cpu(entry->e_value_size) +
+Index: linux-source-2.6.32/fs/ext4/xattr.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/xattr.h 2012-06-28 12:08:14.717669056 +0200
-++++ linux-source-2.6.32/fs/ext4/xattr.h 2012-06-28 12:11:20.321664768 +0200
++--- linux-source-2.6.32.orig/fs/ext4/xattr.h 2012-07-03 16:01:41.053394089 +0200
+++++ linux-source-2.6.32/fs/ext4/xattr.h 2012-07-04 11:15:10.529368662 +0200
+@@ -38,7 +38,7 @@
+ __u8 e_name_len; /* length of name */
+ __u8 e_name_index; /* attribute name index */
@@ -3132,14 +3108,14 @@ index 0000000..f260449
+ MODULE_LICENSE("GPL");
diff --git a/ldiskfs/kernel_patches/patches/ext4-max-dir-size-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-max-dir-size-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..2a0d595
+index 0000000..8116519
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-max-dir-size-2.6.32-vanilla.patch
@@ -0,0 +1,67 @@
+Index: linux-source-2.6.32/fs/ext4/ialloc.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ialloc.c 2012-06-28 12:09:34.581668116 +0200
-++++ linux-source-2.6.32/fs/ext4/ialloc.c 2012-06-28 12:10:06.381677398 +0200
++--- linux-source-2.6.32.orig/fs/ext4/ialloc.c 2012-07-03 16:19:56.977373332 +0200
+++++ linux-source-2.6.32/fs/ext4/ialloc.c 2012-07-03 16:27:47.221373830 +0200
+@@ -818,11 +818,15 @@
+ sb = dir->i_sb;
+ ngroups = ext4_get_groups_count(sb);
@@ -3159,9 +3135,9 @@ index 0000000..2a0d595
+ goal = sbi->s_inode_goal;
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:09:59.693721980 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:10:06.381677398 +0200
-+@@ -2239,6 +2239,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-03 16:27:38.781380104 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-03 16:27:47.225375337 +0200
++@@ -2278,6 +2278,7 @@
+ EXT4_ATTR_OFFSET(inode_readahead_blks, 0644, sbi_ui_show,
+ inode_readahead_blks_store, s_inode_readahead_blks);
+ EXT4_RW_ATTR_SBI_UI(inode_goal, s_inode_goal);
@@ -3169,7 +3145,7 @@ index 0000000..2a0d595
+ EXT4_RW_ATTR_SBI_UI(mb_stats, s_mb_stats);
+ EXT4_RW_ATTR_SBI_UI(mb_max_to_scan, s_mb_max_to_scan);
+ EXT4_RW_ATTR_SBI_UI(mb_min_to_scan, s_mb_min_to_scan);
-+@@ -2253,6 +2254,7 @@
++@@ -2292,6 +2293,7 @@
+ ATTR_LIST(lifetime_write_kbytes),
+ ATTR_LIST(inode_readahead_blks),
+ ATTR_LIST(inode_goal),
@@ -3179,9 +3155,9 @@ index 0000000..2a0d595
+ ATTR_LIST(mb_min_to_scan),
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:09:59.689673296 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:10:06.385666114 +0200
-+@@ -1107,6 +1107,8 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-03 16:27:38.781380104 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-03 16:27:47.225375337 +0200
++@@ -1108,6 +1108,8 @@
+ unsigned int s_log_groups_per_flex;
+ struct flex_groups *s_flex_groups;
+
@@ -3190,7 +3166,7 @@ index 0000000..2a0d595
+ /* workqueue for dio unwritten */
+ struct workqueue_struct *dio_unwritten_wq;
+
-+@@ -1495,6 +1497,12 @@
++@@ -1516,6 +1518,12 @@
+ #define EXT4_MMP_MAX_CHECK_INTERVAL 300UL
+
+ /*
@@ -3205,15 +3181,15 @@ index 0000000..2a0d595
+
diff --git a/ldiskfs/kernel_patches/patches/ext4-mballoc-extra-checks-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-mballoc-extra-checks-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..19f6b57
+index 0000000..58aee64
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-mballoc-extra-checks-2.6.32-vanilla.patch
@@ -0,0 +1,317 @@
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:10:15.325667336 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:10:19.989662510 +0200
-+@@ -1850,6 +1850,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-03 16:28:06.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-03 17:40:00.541375369 +0200
++@@ -1873,6 +1873,7 @@
+ ext4_grpblk_t bb_fragments; /* nr of freespace fragments */
+ ext4_grpblk_t bb_largest_free_order;/* order of largest frag in BG */
+ struct list_head bb_prealloc_list;
@@ -3223,8 +3199,8 @@ index 0000000..19f6b57
+ #endif
+Index: linux-source-2.6.32/fs/ext4/mballoc.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-06-28 12:10:15.333660398 +0200
-++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-06-28 12:10:19.997669436 +0200
++--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-07-03 16:28:06.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-07-03 17:40:00.545378273 +0200
+@@ -337,7 +337,7 @@
+ static struct kmem_cache *ext4_pspace_cachep;
+ static struct kmem_cache *ext4_ac_cachep;
@@ -3274,19 +3250,19 @@ index 0000000..19f6b57
+ }
+
+ /* The buddy information is attached the buddy cache inode
-+@@ -864,7 +865,7 @@
++@@ -862,7 +863,7 @@
++
++ err = 0;
+ first_block = page->index * blocks_per_page;
-+ /* init the page */
-+ memset(page_address(page), 0xff, PAGE_CACHE_SIZE);
+- for (i = 0; i < blocks_per_page; i++) {
++ for (i = 0; i < blocks_per_page && err == 0; i++) {
+ int group;
+ struct ext4_group_info *grinfo;
+
+@@ -899,7 +900,7 @@
-+ * incore got set to the group block bitmap below
-+ */
+ ext4_lock_group(sb, group);
++ /* init the page */
++ memset(data, 0xff, blocksize);
+- ext4_mb_generate_buddy(sb, data, incore, group);
++ err = ext4_mb_generate_buddy(sb, data, incore, group);
+ ext4_unlock_group(sb, group);
@@ -3311,7 +3287,7 @@ index 0000000..19f6b57
+
+ out:
+ if (bh) {
-+@@ -2184,9 +2186,11 @@
++@@ -2188,9 +2190,11 @@
+ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)
+ {
+ struct super_block *sb = seq->private;
@@ -3323,7 +3299,7 @@ index 0000000..19f6b57
+ struct ext4_buddy e4b;
+ struct sg {
+ struct ext4_group_info info;
-+@@ -2195,10 +2199,10 @@
++@@ -2199,10 +2203,10 @@
+
+ group--;
+ if (group == 0)
@@ -3336,7 +3312,7 @@ index 0000000..19f6b57
+ "2^0", "2^1", "2^2", "2^3", "2^4", "2^5", "2^6",
+ "2^7", "2^8", "2^9", "2^10", "2^11", "2^12", "2^13");
+
-+@@ -2209,13 +2213,20 @@
++@@ -2213,13 +2217,20 @@
+ seq_printf(seq, "#%-5u: I/O error\n", group);
+ return 0;
+ }
@@ -3348,7 +3324,7 @@ index 0000000..19f6b57
+ ext4_lock_group(sb, group);
+ memcpy(&sg, ext4_get_group_info(sb, group), i);
+ ext4_unlock_group(sb, group);
-+ ext4_mb_unload_buddy(&e4b);
++ ext4_mb_release_desc(&e4b);
+
+- seq_printf(seq, "#%-5u: %-5u %-5u %-5u [", group, sg.info.bb_free,
+- sg.info.bb_fragments, sg.info.bb_first_free);
@@ -3359,7 +3335,7 @@ index 0000000..19f6b57
+ for (i = 0; i <= 13; i++)
+ seq_printf(seq, " %-5u", i <= sb->s_blocksize_bits + 1 ?
+ sg.info.bb_counters[i] : 0);
-+@@ -3398,23 +3409,68 @@
++@@ -3407,23 +3418,68 @@
+ }
+
+ /*
@@ -3429,7 +3405,7 @@ index 0000000..19f6b57
+ /* all form of preallocation discards first load group,
+ * so the only competing code is preallocation use.
+ * we don't need any locking here
-+@@ -3430,14 +3486,23 @@
++@@ -3439,14 +3495,23 @@
+ &groupnr, &start);
+ len = pa->pa_len;
+ spin_unlock(&pa->pa_lock);
@@ -3454,7 +3430,7 @@ index 0000000..19f6b57
+ }
+
+ static void ext4_mb_pa_callback(struct rcu_head *head)
-+@@ -3496,6 +3561,7 @@
++@@ -3505,6 +3570,7 @@
+ */
+ ext4_lock_group(sb, grp);
+ list_del(&pa->pa_group_list);
@@ -3462,7 +3438,7 @@ index 0000000..19f6b57
+ ext4_unlock_group(sb, grp);
+
+ spin_lock(pa->pa_obj_lock);
-+@@ -3587,6 +3653,7 @@
++@@ -3596,6 +3662,7 @@
+
+ ext4_lock_group(sb, ac->ac_b_ex.fe_group);
+ list_add(&pa->pa_group_list, &grp->bb_prealloc_list);
@@ -3470,7 +3446,7 @@ index 0000000..19f6b57
+ ext4_unlock_group(sb, ac->ac_b_ex.fe_group);
+
+ spin_lock(pa->pa_obj_lock);
-+@@ -3648,6 +3715,7 @@
++@@ -3657,6 +3724,7 @@
+
+ ext4_lock_group(sb, ac->ac_b_ex.fe_group);
+ list_add(&pa->pa_group_list, &grp->bb_prealloc_list);
@@ -3478,7 +3454,7 @@ index 0000000..19f6b57
+ ext4_unlock_group(sb, ac->ac_b_ex.fe_group);
+
+ /*
-+@@ -3848,6 +3916,8 @@
++@@ -3857,6 +3925,8 @@
+
+ spin_unlock(&pa->pa_lock);
+
@@ -3487,7 +3463,7 @@ index 0000000..19f6b57
+ list_del(&pa->pa_group_list);
+ list_add(&pa->u.pa_tmp_list, &list);
+ }
-+@@ -3988,7 +4058,7 @@
++@@ -3997,7 +4067,7 @@
+ if (err) {
+ ext4_error(sb, __func__, "Error in loading buddy "
+ "information for %u", group);
@@ -3496,7 +3472,7 @@ index 0000000..19f6b57
+ }
+
+ bitmap_bh = ext4_read_block_bitmap(sb, group);
-+@@ -4000,6 +4070,8 @@
++@@ -4009,6 +4079,8 @@
+ }
+
+ ext4_lock_group(sb, group);
@@ -3505,7 +3481,7 @@ index 0000000..19f6b57
+ list_del(&pa->pa_group_list);
+ ext4_mb_release_inode_pa(&e4b, bitmap_bh, pa, ac);
+ ext4_unlock_group(sb, group);
-+@@ -4273,6 +4345,7 @@
++@@ -4282,6 +4354,7 @@
+ }
+ ext4_lock_group(sb, group);
+ list_del(&pa->pa_group_list);
@@ -3515,8 +3491,8 @@ index 0000000..19f6b57
+
+Index: linux-source-2.6.32/fs/ext4/mballoc.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/mballoc.h 2012-06-28 12:08:28.261665077 +0200
-++++ linux-source-2.6.32/fs/ext4/mballoc.h 2012-06-28 12:10:19.997669436 +0200
++--- linux-source-2.6.32.orig/fs/ext4/mballoc.h 2012-07-03 16:01:41.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/mballoc.h 2012-07-03 17:40:00.545378273 +0200
+@@ -88,7 +88,7 @@
+ /*
+ * for which requests use 2^N search using buddies
@@ -3528,15 +3504,15 @@ index 0000000..19f6b57
+ * default group prealloc size 512 blocks
diff --git a/ldiskfs/kernel_patches/patches/ext4-mballoc-pa_free-mismatch-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-mballoc-pa_free-mismatch-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..0349db6
+index 0000000..b922a9b
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-mballoc-pa_free-mismatch-2.6.32-vanilla.patch
@@ -0,0 +1,111 @@
+Index: linux-source-2.6.32/fs/ext4/mballoc.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-06-28 12:11:06.761669638 +0200
-++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-06-28 12:11:12.521665249 +0200
-+@@ -3637,6 +3637,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-07-04 11:11:15.549376801 +0200
+++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-07-04 11:15:03.525371414 +0200
++@@ -3646,6 +3646,7 @@
+ INIT_LIST_HEAD(&pa->pa_group_list);
+ pa->pa_deleted = 0;
+ pa->pa_type = MB_INODE_PA;
@@ -3544,7 +3520,7 @@ index 0000000..0349db6
+
+ mb_debug(1, "new inode pa %p: %llu/%u for %u\n", pa,
+ pa->pa_pstart, pa->pa_len, pa->pa_lstart);
-+@@ -3698,6 +3699,7 @@
++@@ -3707,6 +3708,7 @@
+ INIT_LIST_HEAD(&pa->pa_group_list);
+ pa->pa_deleted = 0;
+ pa->pa_type = MB_GROUP_PA;
@@ -3552,7 +3528,7 @@ index 0000000..0349db6
+
+ mb_debug(1, "new group pa %p: %llu/%u for %u\n", pa,
+ pa->pa_pstart, pa->pa_len, pa->pa_lstart);
-+@@ -3760,7 +3762,9 @@
++@@ -3769,7 +3771,9 @@
+ int err = 0;
+ int free = 0;
+
@@ -3562,7 +3538,7 @@ index 0000000..0349db6
+ ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, &bit);
+ grp_blk_start = pa->pa_pstart - bit;
+ BUG_ON(group != e4b->bd_group && pa->pa_len != 0);
-+@@ -3796,19 +3800,27 @@
++@@ -3805,19 +3809,27 @@
+ mb_free_blocks(pa->pa_inode, e4b, bit, next - bit);
+ bit = next + 1;
+ }
@@ -3597,7 +3573,7 @@ index 0000000..0349db6
+ atomic_add(free, &sbi->s_mb_discarded);
+
+ return err;
-+@@ -4575,6 +4587,25 @@
++@@ -4584,6 +4596,25 @@
+ ac->ac_b_ex.fe_len = 0;
+ ar->len = 0;
+ ext4_mb_show_ac(ac);
@@ -3625,8 +3601,8 @@ index 0000000..0349db6
+ ar->len = ac->ac_b_ex.fe_len;
+Index: linux-source-2.6.32/fs/ext4/mballoc.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/mballoc.h 2012-06-28 12:11:06.641723341 +0200
-++++ linux-source-2.6.32/fs/ext4/mballoc.h 2012-06-28 12:11:12.525665254 +0200
++--- linux-source-2.6.32.orig/fs/ext4/mballoc.h 2012-07-03 17:40:00.545378273 +0200
+++++ linux-source-2.6.32/fs/ext4/mballoc.h 2012-07-04 11:15:03.529378041 +0200
+@@ -20,6 +20,7 @@
+ #include <linux/version.h>
+ #include <linux/blkdev.h>
@@ -3645,15 +3621,15 @@ index 0000000..0349db6
+
diff --git a/ldiskfs/kernel_patches/patches/ext4-misc-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-misc-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..50f452e
+index 0000000..37bd4e8
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-misc-2.6.32-vanilla.patch
-@@ -0,0 +1,257 @@
+@@ -0,0 +1,255 @@
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:10:19.989662510 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:10:23.325664479 +0200
-+@@ -1182,6 +1182,9 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-03 17:40:00.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-04 11:11:15.541407883 +0200
++@@ -1186,6 +1186,9 @@
+
+ #define NEXT_ORPHAN(inode) EXT4_I(inode)->i_dtime
+
@@ -3663,20 +3639,18 @@ index 0000000..50f452e
+ /*
+ * Codes for operating systems
+ */
-+@@ -1608,6 +1611,9 @@
-+ extern int ext4_mb_get_buddy_cache_lock(struct super_block *, ext4_group_t);
++@@ -1631,6 +1634,7 @@
+ extern void ext4_mb_put_buddy_cache_lock(struct super_block *,
+ ext4_group_t, int);
++ extern int ext4_trim_fs(struct super_block *, struct fstrim_range *);
++extern void ext4_mb_discard_inode_preallocations(struct inode *);
-++
-++
+ /* inode.c */
+ int ext4_forget(handle_t *handle, int is_metadata, struct inode *inode,
+ struct buffer_head *bh, ext4_fsblk_t blocknr);
+Index: linux-source-2.6.32/fs/ext4/ext4_extents.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4_extents.h 2012-06-28 12:09:30.485668675 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4_extents.h 2012-06-28 12:10:23.325664479 +0200
++--- linux-source-2.6.32.orig/fs/ext4/ext4_extents.h 2012-07-03 16:19:58.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4_extents.h 2012-07-04 11:11:15.541407883 +0200
+@@ -58,6 +58,12 @@
+ */
+ #define EXT_STATS_
@@ -3709,8 +3683,8 @@ index 0000000..50f452e
+ struct ext4_extent *ex2);
+Index: linux-source-2.6.32/fs/ext4/ext4_jbd2.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4_jbd2.c 2012-06-28 12:08:27.121667674 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4_jbd2.c 2012-06-28 12:10:23.325664479 +0200
++--- linux-source-2.6.32.orig/fs/ext4/ext4_jbd2.c 2012-07-03 16:01:41.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4_jbd2.c 2012-07-04 11:11:15.541407883 +0200
+@@ -31,6 +31,7 @@
+ }
+ return err;
@@ -3726,8 +3700,8 @@ index 0000000..50f452e
++EXPORT_SYMBOL(__ext4_handle_dirty_metadata);
+Index: linux-source-2.6.32/fs/ext4/ext4_jbd2.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4_jbd2.h 2012-06-28 12:08:26.825663990 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4_jbd2.h 2012-06-28 12:10:23.325664479 +0200
++--- linux-source-2.6.32.orig/fs/ext4/ext4_jbd2.h 2012-07-03 16:01:41.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4_jbd2.h 2012-07-04 11:11:15.541407883 +0200
+@@ -35,6 +35,8 @@
+ (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS) \
+ ? 27U : 8U)
@@ -3739,8 +3713,8 @@ index 0000000..50f452e
+ * and the superblock, which are already accounted for. */
+Index: linux-source-2.6.32/fs/ext4/extents.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/extents.c 2012-06-28 12:09:30.489673456 +0200
-++++ linux-source-2.6.32/fs/ext4/extents.c 2012-06-28 12:10:23.329669991 +0200
++--- linux-source-2.6.32.orig/fs/ext4/extents.c 2012-07-03 16:19:58.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/extents.c 2012-07-04 11:11:15.545375533 +0200
+@@ -2030,6 +2030,55 @@
+ }
+
@@ -3814,8 +3788,8 @@ index 0000000..50f452e
++EXPORT_SYMBOL(ext4_ext_drop_refs);
+Index: linux-source-2.6.32/fs/ext4/inode.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/inode.c 2012-06-28 12:10:15.329671358 +0200
-++++ linux-source-2.6.32/fs/ext4/inode.c 2012-06-28 12:10:23.333666208 +0200
++--- linux-source-2.6.32.orig/fs/ext4/inode.c 2012-07-03 16:28:06.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/inode.c 2012-07-04 11:11:15.545375533 +0200
+@@ -5062,6 +5062,7 @@
+ iget_failed(inode);
+ return ERR_PTR(ret);
@@ -3826,9 +3800,9 @@ index 0000000..50f452e
+ struct ext4_inode *raw_inode,
+Index: linux-source-2.6.32/fs/ext4/mballoc.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-06-28 12:10:19.997669436 +0200
-++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-06-28 12:10:23.333666208 +0200
-+@@ -4085,6 +4085,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-07-03 17:40:00.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-07-04 11:11:15.549376801 +0200
++@@ -4094,6 +4094,7 @@
+ if (ac)
+ kmem_cache_free(ext4_ac_cachep, ac);
+ }
@@ -3836,7 +3810,7 @@ index 0000000..50f452e
+
+ /*
+ * finds all preallocated spaces and return blocks being freed to them
-+@@ -4879,3 +4880,6 @@
++@@ -4888,3 +4889,6 @@
+ kmem_cache_free(ext4_ac_cachep, ac);
+ return;
+ }
@@ -3845,9 +3819,9 @@ index 0000000..50f452e
++
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:10:15.337667957 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:10:23.337667624 +0200
-+@@ -127,6 +127,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-03 16:28:06.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-04 11:11:15.553381198 +0200
++@@ -129,6 +129,7 @@
+ (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
+ (__u32)le16_to_cpu(bg->bg_itable_unused_hi) << 16 : 0);
+ }
@@ -3855,20 +3829,20 @@ index 0000000..50f452e
+
+ void ext4_block_bitmap_set(struct super_block *sb,
+ struct ext4_group_desc *bg, ext4_fsblk_t blk)
-+@@ -1101,10 +1102,12 @@
++@@ -1139,10 +1140,12 @@
+ Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
-+ Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota,
-+ Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err, Opt_resize,
++ Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
++ Opt_noquota, Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err,
++ Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
-+ Opt_usrquota, Opt_grpquota, Opt_i_version,
++ Opt_resize, Opt_usrquota, Opt_grpquota, Opt_i_version,
+ Opt_stripe, Opt_delalloc, Opt_nodelalloc,
+ Opt_block_validity, Opt_noblock_validity,
+ Opt_inode_readahead_blks, Opt_journal_ioprio,
++ Opt_mballoc,
+ Opt_discard, Opt_nodiscard,
++ Opt_init_inode_table, Opt_noinit_inode_table,
+ };
-+
-+@@ -1156,6 +1159,9 @@
++@@ -1195,6 +1198,9 @@
+ {Opt_noquota, "noquota"},
+ {Opt_quota, "quota"},
+ {Opt_usrquota, "usrquota"},
@@ -3878,7 +3852,7 @@ index 0000000..50f452e
+ {Opt_barrier, "barrier=%u"},
+ {Opt_barrier, "barrier"},
+ {Opt_nobarrier, "nobarrier"},
-+@@ -1171,6 +1177,7 @@
++@@ -1210,6 +1216,7 @@
+ {Opt_auto_da_alloc, "auto_da_alloc=%u"},
+ {Opt_auto_da_alloc, "auto_da_alloc"},
+ {Opt_noauto_da_alloc, "noauto_da_alloc"},
@@ -3886,7 +3860,7 @@ index 0000000..50f452e
+ {Opt_discard, "discard"},
+ {Opt_nodiscard, "nodiscard"},
+ {Opt_err, NULL},
-+@@ -1524,6 +1531,10 @@
++@@ -1563,6 +1570,10 @@
+ else
+ clear_opt(sbi->s_mount_opt, BARRIER);
+ break;
@@ -3897,7 +3871,7 @@ index 0000000..50f452e
+ case Opt_ignore:
+ break;
+ case Opt_resize:
-+@@ -1607,6 +1618,8 @@
++@@ -1646,6 +1657,8 @@
+ case Opt_nodiscard:
+ clear_opt(sbi->s_mount_opt, DISCARD);
+ break;
@@ -3908,7 +3882,7 @@ index 0000000..50f452e
+ "Unrecognized mount option \"%s\" "
diff --git a/ldiskfs/kernel_patches/patches/ext4-mmp-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-mmp-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..a7fca5f
+index 0000000..ca1903d
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-mmp-2.6.32-vanilla.patch
@@ -0,0 +1,575 @@
@@ -3933,8 +3907,8 @@ index 0000000..a7fca5f
+
+Index: linux-source-2.6.32/fs/ext4/Makefile
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/Makefile 2012-06-28 12:08:33.661737979 +0200
-++++ linux-source-2.6.32/fs/ext4/Makefile 2012-06-28 12:09:59.685666701 +0200
++--- linux-source-2.6.32.orig/fs/ext4/Makefile 2012-07-03 16:01:41.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/Makefile 2012-07-03 16:27:38.777375531 +0200
+@@ -6,7 +6,8 @@
+
+ ext4-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
@@ -3947,9 +3921,9 @@ index 0000000..a7fca5f
+ ext4-$(CONFIG_EXT4_FS_POSIX_ACL) += acl.o
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:09:34.581668116 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:09:59.689673296 +0200
-+@@ -962,7 +962,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-03 16:19:58.000000000 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-03 16:27:38.781380104 +0200
++@@ -963,7 +963,7 @@
+ __le16 s_want_extra_isize; /* New inodes should reserve # bytes */
+ __le32 s_flags; /* Miscellaneous flags */
+ __le16 s_raid_stride; /* RAID stride */
@@ -3958,17 +3932,17 @@ index 0000000..a7fca5f
+ __le64 s_mmp_block; /* Block for multi-mount protection */
+ __le32 s_raid_stripe_width; /* blocks on all data disks (N*stride)*/
+ __u8 s_log_groups_per_flex; /* FLEX_BG group size */
-+@@ -1109,6 +1109,9 @@
-+
++@@ -1111,6 +1111,9 @@
+ /* workqueue for dio unwritten */
+ struct workqueue_struct *dio_unwritten_wq;
-++
++
++ /* Kernel thread for multiple mount protection */
-++ struct task_struct *s_mmp_tsk;
+++ struct task_struct *s_mmp_tsk;
+++
++ /* Lazy inode table initialization info */
++ struct ext4_li_request *s_li_request;
+ };
-+
-+ static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb)
-+@@ -1248,7 +1251,8 @@
++@@ -1252,7 +1255,8 @@
+ EXT4_FEATURE_INCOMPAT_META_BG| \
+ EXT4_FEATURE_INCOMPAT_EXTENTS| \
+ EXT4_FEATURE_INCOMPAT_64BIT| \
@@ -3978,9 +3952,9 @@ index 0000000..a7fca5f
+ #define EXT4_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+ EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
+ EXT4_FEATURE_RO_COMPAT_GDT_CSUM| \
-+@@ -1430,6 +1434,67 @@
-+ extern struct proc_dir_entry *ext4_proc_root;
-+
++@@ -1451,6 +1455,67 @@
++ };
++
+ /*
++ * This structure will be used for multiple mount protection. It will be
++ * written into the block number saved in the s_mmp_block field in the
@@ -4046,7 +4020,7 @@ index 0000000..a7fca5f
+ * Function prototypes
+ */
+
-+@@ -1594,6 +1659,10 @@
++@@ -1617,6 +1682,10 @@
+ __attribute__ ((format (printf, 3, 4)));
+ extern void ext4_msg(struct super_block *, const char *, const char *, ...)
+ __attribute__ ((format (printf, 3, 4)));
@@ -4057,7 +4031,7 @@ index 0000000..a7fca5f
+ extern void ext4_grp_locked_error(struct super_block *, ext4_group_t,
+ const char *, const char *, ...)
+ __attribute__ ((format (printf, 4, 5)));
-+@@ -1876,6 +1945,8 @@
++@@ -1899,6 +1968,8 @@
+ __u64 start_orig, __u64 start_donor,
+ __u64 len, __u64 *moved_len);
+
@@ -4069,7 +4043,7 @@ index 0000000..a7fca5f
+Index: linux-source-2.6.32/fs/ext4/mmp.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-++++ linux-source-2.6.32/fs/ext4/mmp.c 2012-06-28 12:09:59.689673296 +0200
+++++ linux-source-2.6.32/fs/ext4/mmp.c 2012-07-03 16:27:38.781380104 +0200
+@@ -0,0 +1,351 @@
++#include <linux/fs.h>
++#include <linux/random.h>
@@ -4424,8 +4398,8 @@ index 0000000..a7fca5f
++
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:09:23.393677834 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:09:59.693721980 +0200
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-03 16:27:30.801547554 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-03 16:27:38.781380104 +0200
+@@ -40,6 +40,8 @@
+ #include <linux/log2.h>
+ #include <linux/crc16.h>
@@ -4435,7 +4409,7 @@ index 0000000..a7fca5f
+
+ #include "ext4.h"
+ #include "ext4_jbd2.h"
-+@@ -665,6 +667,8 @@
++@@ -703,6 +705,8 @@
+ invalidate_bdev(sbi->journal_bdev);
+ ext4_blkdev_remove(sbi);
+ }
@@ -4444,7 +4418,7 @@ index 0000000..a7fca5f
+ sb->s_fs_info = NULL;
+ /*
+ * Now that we are completely done shutting down the
-+@@ -2731,6 +2735,10 @@
++@@ -2785,6 +2789,10 @@
+ needs_recovery = (es->s_last_orphan != 0 ||
+ EXT4_HAS_INCOMPAT_FEATURE(sb,
+ EXT4_FEATURE_INCOMPAT_RECOVER));
@@ -4455,16 +4429,16 @@ index 0000000..a7fca5f
+
+ /*
+ * The first inode we look at is the journal inode. Don't try
-+@@ -2981,6 +2989,8 @@
++@@ -3017,6 +3025,8 @@
+ else
+ kfree(sbi->s_flex_groups);
+ }
++ if (sbi->s_mmp_tsk)
++ kthread_stop(sbi->s_mmp_tsk);
-+ failed_mount2:
-+ for (i = 0; i < db_count; i++)
-+ brelse(sbi->s_group_desc[i]);
-+@@ -3489,7 +3499,7 @@
++ percpu_counter_destroy(&sbi->s_freeblocks_counter);
++ percpu_counter_destroy(&sbi->s_freeinodes_counter);
++ percpu_counter_destroy(&sbi->s_dirs_counter);
++@@ -3529,7 +3539,7 @@
+ struct ext4_mount_options old_opts;
+ ext4_group_t g;
+ unsigned int journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
@@ -4473,7 +4447,7 @@ index 0000000..a7fca5f
+ #ifdef CONFIG_QUOTA
+ int i;
+ #endif
-+@@ -3611,6 +3621,13 @@
++@@ -3651,6 +3661,13 @@
+ goto restore_opts;
+ if (!ext4_setup_super(sb, es, 0))
+ sb->s_flags &= ~MS_RDONLY;
@@ -4544,15 +4518,15 @@ index 0000000..fa66ccd
+ ext4_mark_inode_dirty(handle, dir);
diff --git a/ldiskfs/kernel_patches/patches/ext4-osd-iam-exports-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-osd-iam-exports-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..7d1461a
+index 0000000..719b7e8
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-osd-iam-exports-2.6.32-vanilla.patch
@@ -0,0 +1,68 @@
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:10:39.449662782 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:10:42.265665313 +0200
-+@@ -1684,6 +1684,9 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-04 11:11:42.901370660 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-04 11:11:46.085374005 +0200
++@@ -1705,6 +1705,9 @@
+ #define ll_ext4_find_entry(inode, dentry, res_dir) ext4_find_entry(inode, &(dentry)->d_name, res_dir)
+ extern int ext4_add_dot_dotdot(handle_t *handle, struct inode *dir,
+ struct inode *inode);
@@ -4564,8 +4538,8 @@ index 0000000..7d1461a
+ extern int ext4_group_add(struct super_block *sb,
+Index: linux-source-2.6.32/fs/ext4/hash.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/hash.c 2012-06-28 12:08:21.745667214 +0200
-++++ linux-source-2.6.32/fs/ext4/hash.c 2012-06-28 12:10:42.265665313 +0200
++--- linux-source-2.6.32.orig/fs/ext4/hash.c 2012-07-03 16:01:41.049370380 +0200
+++++ linux-source-2.6.32/fs/ext4/hash.c 2012-07-04 11:11:46.117493522 +0200
+@@ -9,6 +9,7 @@
+ * License.
+ */
@@ -4581,8 +4555,8 @@ index 0000000..7d1461a
++EXPORT_SYMBOL(ext4fs_dirhash);
+Index: linux-source-2.6.32/fs/ext4/namei.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/namei.c 2012-06-28 12:10:39.453664850 +0200
-++++ linux-source-2.6.32/fs/ext4/namei.c 2012-06-28 12:10:42.283981062 +0200
++--- linux-source-2.6.32.orig/fs/ext4/namei.c 2012-07-04 11:11:42.901370660 +0200
+++++ linux-source-2.6.32/fs/ext4/namei.c 2012-07-04 11:11:46.117493522 +0200
+@@ -49,9 +49,9 @@
+ #define NAMEI_RA_SIZE (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
+ #define NAMEI_RA_INDEX(c,b) (((c) * NAMEI_RA_BLOCKS) + (b))
@@ -4606,9 +4580,9 @@ index 0000000..7d1461a
+ #define assert(test) J_ASSERT(test)
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:10:36.377665203 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:10:42.285668861 +0200
-+@@ -412,6 +412,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-04 11:11:37.745379089 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-04 11:11:46.153527071 +0200
++@@ -450,6 +450,7 @@
+
+ ext4_handle_error(sb);
+ }
@@ -4618,15 +4592,15 @@ index 0000000..7d1461a
+ * ext4_abort is a much stronger failure handler than ext4_error. The
diff --git a/ldiskfs/kernel_patches/patches/ext4-osd-iop-common-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-osd-iop-common-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..3eabdc3
+index 0000000..7f4ea4f
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-osd-iop-common-2.6.32-vanilla.patch
@@ -0,0 +1,229 @@
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:10:36.373664428 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:10:39.449662782 +0200
-+@@ -1671,6 +1671,19 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-04 11:11:37.741370921 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-04 11:11:42.901370660 +0200
++@@ -1692,6 +1692,19 @@
+ extern int ext4_orphan_del(handle_t *, struct inode *);
+ extern int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash,
+ __u32 start_minor_hash, __u32 *next_hash);
@@ -4648,8 +4622,8 @@ index 0000000..3eabdc3
+ extern int ext4_group_add(struct super_block *sb,
+Index: linux-source-2.6.32/fs/ext4/namei.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/namei.c 2012-06-28 12:10:36.377665203 +0200
-++++ linux-source-2.6.32/fs/ext4/namei.c 2012-06-28 12:10:39.453664850 +0200
++--- linux-source-2.6.32.orig/fs/ext4/namei.c 2012-07-04 11:11:37.741370921 +0200
+++++ linux-source-2.6.32/fs/ext4/namei.c 2012-07-04 11:11:42.901370660 +0200
+@@ -24,6 +24,7 @@
+ * Theodore Ts'o, 2002
+ */
@@ -4853,14 +4827,14 @@ index 0000000..3eabdc3
+ ext4_mark_inode_dirty(handle, inode);
diff --git a/ldiskfs/kernel_patches/patches/ext4-pdir-fix-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-pdir-fix-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..f97493a
+index 0000000..aa8d3f8
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-pdir-fix-2.6.32-vanilla.patch
@@ -0,0 +1,62 @@
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:10:30.009672059 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:10:36.373664428 +0200
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-04 11:11:28.293385850 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-04 11:11:37.741370921 +0200
+@@ -16,6 +16,7 @@
+ #ifndef _EXT4_H
+ #define _EXT4_H
@@ -4869,7 +4843,7 @@ index 0000000..f97493a
+ #include <linux/types.h>
+ #include <linux/blkdev.h>
+ #include <linux/magic.h>
-+@@ -700,6 +701,10 @@
++@@ -701,6 +702,10 @@
+ __u32 i_dtime;
+ ext4_fsblk_t i_file_acl;
+
@@ -4882,8 +4856,8 @@ index 0000000..f97493a
+ * this file's inode. Constant across the lifetime of the inode,
+Index: linux-source-2.6.32/fs/ext4/namei.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/namei.c 2012-06-28 12:10:30.005662279 +0200
-++++ linux-source-2.6.32/fs/ext4/namei.c 2012-06-28 12:10:36.377665203 +0200
++--- linux-source-2.6.32.orig/fs/ext4/namei.c 2012-07-04 11:11:28.289382838 +0200
+++++ linux-source-2.6.32/fs/ext4/namei.c 2012-07-04 11:11:37.741370921 +0200
+@@ -53,6 +53,11 @@
+ ext4_lblk_t *block, int *err)
+ {
@@ -4908,9 +4882,9 @@ index 0000000..f97493a
+
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:10:32.945663837 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:10:36.377665203 +0200
-+@@ -702,6 +702,8 @@
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-04 11:11:32.573374989 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-04 11:11:37.745379089 +0200
++@@ -740,6 +740,8 @@
+
+ ei->vfs_inode.i_version = 1;
+ ei->vfs_inode.i_data.writeback_index = 0;
@@ -4921,15 +4895,15 @@ index 0000000..f97493a
+ spin_lock_init(&ei->i_prealloc_lock);
diff --git a/ldiskfs/kernel_patches/patches/ext4-prealloc-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-prealloc-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..6197d68
+index 0000000..fe851a8
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-prealloc-2.6.32-vanilla.patch
@@ -0,0 +1,381 @@
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:10:12.449674842 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:10:15.325667336 +0200
-+@@ -1069,11 +1069,14 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-03 16:27:58.677416541 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-03 16:28:06.101361396 +0200
++@@ -1070,11 +1070,14 @@
+
+ /* tunables */
+ unsigned long s_stripe;
@@ -4947,8 +4921,8 @@ index 0000000..6197d68
+ /* where last allocation was done - for stream allocation */
+Index: linux-source-2.6.32/fs/ext4/mballoc.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-06-28 12:08:29.325663898 +0200
-++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-06-28 12:10:15.333660398 +0200
++--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-07-03 16:19:58.129373141 +0200
+++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-07-03 16:28:06.105377459 +0200
+@@ -1821,6 +1821,25 @@
+ ext4_mb_check_limits(ac, e4b, 1);
+ }
@@ -4975,7 +4949,7 @@ index 0000000..6197d68
+ /*
+ * This is a special case for storages like raid5
+ * we try to find stripe-aligned chunks for stripe-size requests
-+@@ -2216,6 +2235,80 @@
++@@ -2220,6 +2239,80 @@
+ .show = ext4_mb_seq_groups_show,
+ };
+
@@ -5056,7 +5030,7 @@ index 0000000..6197d68
+ static int ext4_mb_seq_groups_open(struct inode *inode, struct file *file)
+ {
+ struct super_block *sb = PDE(inode)->data;
-+@@ -2455,12 +2548,56 @@
++@@ -2459,12 +2552,56 @@
+ sbi->s_mb_max_to_scan = MB_DEFAULT_MAX_TO_SCAN;
+ sbi->s_mb_min_to_scan = MB_DEFAULT_MIN_TO_SCAN;
+ sbi->s_mb_stats = MB_DEFAULT_STATS;
@@ -5115,7 +5089,7 @@ index 0000000..6197d68
+ kfree(sbi->s_mb_offsets);
+ kfree(sbi->s_mb_maxs);
+ return -ENOMEM;
-+@@ -2474,9 +2611,18 @@
++@@ -2478,9 +2615,18 @@
+ spin_lock_init(&lg->lg_prealloc_lock);
+ }
+
@@ -5135,7 +5109,7 @@ index 0000000..6197d68
+
+ if (sbi->s_journal)
+ sbi->s_journal->j_commit_callback = release_blocks_on_commit;
-+@@ -2556,8 +2702,10 @@
++@@ -2560,8 +2706,10 @@
+ }
+
+ free_percpu(sbi->s_locality_groups);
@@ -5147,7 +5121,7 @@ index 0000000..6197d68
+
+ return 0;
+ }
-+@@ -2852,11 +3000,12 @@
++@@ -2861,11 +3009,12 @@
+ ext4_mb_normalize_request(struct ext4_allocation_context *ac,
+ struct ext4_allocation_request *ar)
+ {
@@ -5162,7 +5136,7 @@ index 0000000..6197d68
+ struct ext4_prealloc_space *pa;
+
+ /* do normalize only data requests, metadata requests
-+@@ -2886,49 +3035,35 @@
++@@ -2895,49 +3044,35 @@
+ size = size << bsbits;
+ if (size < i_size_read(ac->ac_inode))
+ size = i_size_read(ac->ac_inode);
@@ -5237,7 +5211,7 @@ index 0000000..6197d68
+
+ /* don't cover already allocated blocks in selected range */
+ if (ar->pleft && start <= ar->lleft) {
-+@@ -3000,7 +3135,6 @@
++@@ -3009,7 +3144,6 @@
+ }
+ BUG_ON(start + size <= ac->ac_o_ex.fe_logical &&
+ start > ac->ac_o_ex.fe_logical);
@@ -5245,7 +5219,7 @@ index 0000000..6197d68
+
+ /* now prepare goal request */
+
-+@@ -3986,11 +4120,19 @@
++@@ -3995,11 +4129,19 @@
+
+ /* don't use group allocation for large files */
+ size = max(size, isize);
@@ -5268,9 +5242,9 @@ index 0000000..6197d68
+ * locality group prealloc space are per cpu. The reason for having
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:10:06.381677398 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:10:15.337667957 +0200
-+@@ -2244,7 +2244,8 @@
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-03 16:27:47.225375337 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-03 16:28:06.109374546 +0200
++@@ -2283,7 +2283,8 @@
+ EXT4_RW_ATTR_SBI_UI(mb_max_to_scan, s_mb_max_to_scan);
+ EXT4_RW_ATTR_SBI_UI(mb_min_to_scan, s_mb_min_to_scan);
+ EXT4_RW_ATTR_SBI_UI(mb_order2_req, s_mb_order2_reqs);
@@ -5280,7 +5254,7 @@ index 0000000..6197d68
+ EXT4_RW_ATTR_SBI_UI(mb_group_prealloc, s_mb_group_prealloc);
+ EXT4_RW_ATTR_SBI_UI(max_writeback_mb_bump, s_max_writeback_mb_bump);
+
-+@@ -2259,7 +2260,8 @@
++@@ -2298,7 +2299,8 @@
+ ATTR_LIST(mb_max_to_scan),
+ ATTR_LIST(mb_min_to_scan),
+ ATTR_LIST(mb_order2_req),
@@ -5292,8 +5266,8 @@ index 0000000..6197d68
+ NULL,
+Index: linux-source-2.6.32/fs/ext4/inode.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/inode.c 2012-06-28 12:09:34.579776667 +0200
-++++ linux-source-2.6.32/fs/ext4/inode.c 2012-06-28 12:10:15.329671358 +0200
++--- linux-source-2.6.32.orig/fs/ext4/inode.c 2012-07-03 16:19:56.977373332 +0200
+++++ linux-source-2.6.32/fs/ext4/inode.c 2012-07-03 16:28:06.109374546 +0200
+@@ -2884,6 +2884,11 @@
+ if (unlikely(sbi->s_mount_flags & EXT4_MF_FS_ABORTED))
+ return -EROFS;
@@ -5435,17 +5409,539 @@ index 0000000..3231e6c
+ ext4_ext_drop_refs(path);
+
+ if (err < 0)
+diff --git a/ldiskfs/kernel_patches/patches/ext4-update-vanilla-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-update-vanilla-2.6.32-vanilla.patch
+new file mode 100644
+index 0000000..d4a6ade
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/ext4-update-vanilla-2.6.32-vanilla.patch
+@@ -0,0 +1,516 @@
++Index: linux-source-2.6.32/fs/ext4/ext4.h
++===================================================================
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-03 16:19:56.981378031 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-03 16:19:58.121371916 +0200
++@@ -23,6 +23,7 @@
++ #include <linux/quota.h>
++ #include <linux/rwsem.h>
++ #include <linux/rbtree.h>
+++#include <linux/kernel.h>
++ #include <linux/seqlock.h>
++ #include <linux/mutex.h>
++ #include <linux/timer.h>
++@@ -1109,6 +1110,9 @@
++
++ /* workqueue for dio unwritten */
++ struct workqueue_struct *dio_unwritten_wq;
+++
+++ /* Lazy inode table initialization info */
+++ struct ext4_li_request *s_li_request;
++ };
++
++ static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb)
++@@ -1430,6 +1434,23 @@
++ extern struct proc_dir_entry *ext4_proc_root;
++
++ /*
+++ * Timeout and state flag for lazy initialization inode thread.
+++ */
+++#define EXT4_DEF_LI_WAIT_MULT 10
+++#define EXT4_DEF_LI_MAX_START_DELAY 5
+++#define EXT4_LAZYINIT_QUIT 0x0001
+++#define EXT4_LAZYINIT_RUNNING 0x0002
+++
+++/*
+++ * Lazy inode table initialization info
+++ */
+++struct ext4_lazy_init {
+++ unsigned long li_state;
+++ struct list_head li_request_list;
+++ struct mutex li_list_mtx;
+++};
+++
+++/*
++ * Function prototypes
++ */
++
++@@ -1508,6 +1529,7 @@
++ extern void mark_bitmap_end(int start_bit, int end_bit, char *bitmap);
++
++ /* mballoc.c */
+++struct fstrim_range;
++ extern long ext4_mb_stats;
++ extern long ext4_mb_max_to_scan;
++ extern int ext4_mb_init(struct super_block *, int);
++@@ -1525,6 +1547,7 @@
++ extern int ext4_mb_get_buddy_cache_lock(struct super_block *, ext4_group_t);
++ extern void ext4_mb_put_buddy_cache_lock(struct super_block *,
++ ext4_group_t, int);
+++extern int ext4_trim_fs(struct super_block *, struct fstrim_range *);
++ /* inode.c */
++ int ext4_forget(handle_t *handle, int is_metadata, struct inode *inode,
++ struct buffer_head *bh, ext4_fsblk_t blocknr);
++Index: linux-source-2.6.32/fs/ext4/ext4_extents.h
++===================================================================
++--- linux-source-2.6.32.orig/fs/ext4/ext4_extents.h 2012-07-03 16:19:55.725400261 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4_extents.h 2012-07-03 16:19:58.121371916 +0200
++@@ -138,7 +138,7 @@
++ #define EXT_REPEAT 2
++
++ /* Maximum logical block in a file; ext4_extent's ee_block is __le32 */
++-#define EXT_MAX_BLOCK 0xffffffff
+++#define EXT_MAX_BLOCKS 0xffffffff
++
++ /*
++ * EXT_INIT_MAX_LEN is the maximum number of blocks we can have in an
++Index: linux-source-2.6.32/fs/ext4/extents.c
++===================================================================
++--- linux-source-2.6.32.orig/fs/ext4/extents.c 2012-07-03 16:19:55.729371669 +0200
+++++ linux-source-2.6.32/fs/ext4/extents.c 2012-07-03 16:19:58.125378128 +0200
++@@ -1329,7 +1329,7 @@
++
++ /*
++ * ext4_ext_next_allocated_block:
++- * returns allocated block in subsequent extent or EXT_MAX_BLOCK.
+++ * returns allocated block in subsequent extent or EXT_MAX_BLOCKS.
++ * NOTE: it considers block number from index entry as
++ * allocated block. Thus, index entries have to be consistent
++ * with leaves.
++@@ -1343,7 +1343,7 @@
++ depth = path->p_depth;
++
++ if (depth == 0 && path->p_ext == NULL)
++- return EXT_MAX_BLOCK;
+++ return EXT_MAX_BLOCKS;
++
++ while (depth >= 0) {
++ if (depth == path->p_depth) {
++@@ -1360,12 +1360,12 @@
++ depth--;
++ }
++
++- return EXT_MAX_BLOCK;
+++ return EXT_MAX_BLOCKS;
++ }
++
++ /*
++ * ext4_ext_next_leaf_block:
++- * returns first allocated block from next leaf or EXT_MAX_BLOCK
+++ * returns first allocated block from next leaf or EXT_MAX_BLOCKS
++ */
++ static ext4_lblk_t ext4_ext_next_leaf_block(struct inode *inode,
++ struct ext4_ext_path *path)
++@@ -1377,7 +1377,7 @@
++
++ /* zero-tree has no leaf blocks at all */
++ if (depth == 0)
++- return EXT_MAX_BLOCK;
+++ return EXT_MAX_BLOCKS;
++
++ /* go to index block */
++ depth--;
++@@ -1390,7 +1390,7 @@
++ depth--;
++ }
++
++- return EXT_MAX_BLOCK;
+++ return EXT_MAX_BLOCKS;
++ }
++
++ /*
++@@ -1570,13 +1570,13 @@
++ */
++ if (b2 < b1) {
++ b2 = ext4_ext_next_allocated_block(path);
++- if (b2 == EXT_MAX_BLOCK)
+++ if (b2 == EXT_MAX_BLOCKS)
++ goto out;
++ }
++
++ /* check for wrap through zero on extent logical start block*/
++ if (b1 + len1 < b1) {
++- len1 = EXT_MAX_BLOCK - b1;
+++ len1 = EXT_MAX_BLOCKS - b1;
++ newext->ee_len = cpu_to_le16(len1);
++ ret = 1;
++ }
++@@ -1652,7 +1652,7 @@
++ fex = EXT_LAST_EXTENT(eh);
++ next = ext4_ext_next_leaf_block(inode, path);
++ if (le32_to_cpu(newext->ee_block) > le32_to_cpu(fex->ee_block)
++- && next != EXT_MAX_BLOCK) {
+++ && next != EXT_MAX_BLOCKS) {
++ ext_debug("next leaf block - %d\n", next);
++ BUG_ON(npath != NULL);
++ npath = ext4_ext_find_extent(inode, next, NULL);
++@@ -1771,7 +1771,7 @@
++ BUG_ON(func == NULL);
++ BUG_ON(inode == NULL);
++
++- while (block < last && block != EXT_MAX_BLOCK) {
+++ while (block < last && block != EXT_MAX_BLOCKS) {
++ num = last - block;
++ /* find extent for this block */
++ down_read(&EXT4_I(inode)->i_data_sem);
++@@ -1899,7 +1899,7 @@
++ if (ex == NULL) {
++ /* there is no extent yet, so gap is [0;-] */
++ lblock = 0;
++- len = EXT_MAX_BLOCK;
+++ len = EXT_MAX_BLOCKS;
++ ext_debug("cache gap(whole file):");
++ } else if (block < le32_to_cpu(ex->ee_block)) {
++ lblock = block;
++@@ -2144,8 +2144,8 @@
++ path[depth].p_ext = ex;
++
++ a = ex_ee_block > start ? ex_ee_block : start;
++- b = ex_ee_block + ex_ee_len - 1 < EXT_MAX_BLOCK ?
++- ex_ee_block + ex_ee_len - 1 : EXT_MAX_BLOCK;
+++ b = ex_ee_block + ex_ee_len - 1 < EXT_MAX_BLOCKS ?
+++ ex_ee_block + ex_ee_len - 1 : EXT_MAX_BLOCKS;
++
++ ext_debug(" border %u:%u\n", a, b);
++
++@@ -3783,15 +3783,15 @@
++ flags |= FIEMAP_EXTENT_UNWRITTEN;
++
++ /*
++- * If this extent reaches EXT_MAX_BLOCK, it must be last.
+++ * If this extent reaches EXT_MAX_BLOCKS, it must be last.
++ *
++- * Or if ext4_ext_next_allocated_block is EXT_MAX_BLOCK,
+++ * Or if ext4_ext_next_allocated_block is EXT_MAX_BLOCKS,
++ * this also indicates no more allocated blocks.
++ *
++- * XXX this might miss a single-block extent at EXT_MAX_BLOCK
+++ * XXX this might miss a single-block extent at EXT_MAX_BLOCKS
++ */
++- if (ext4_ext_next_allocated_block(path) == EXT_MAX_BLOCK ||
++- newex->ec_block + newex->ec_len - 1 == EXT_MAX_BLOCK) {
+++ if (ext4_ext_next_allocated_block(path) == EXT_MAX_BLOCKS ||
+++ newex->ec_block + newex->ec_len - 1 == EXT_MAX_BLOCKS) {
++ loff_t size = i_size_read(inode);
++ loff_t bs = EXT4_BLOCK_SIZE(inode->i_sb);
++
++@@ -3872,8 +3872,8 @@
++
++ start_blk = start >> inode->i_sb->s_blocksize_bits;
++ last_blk = (start + len - 1) >> inode->i_sb->s_blocksize_bits;
++- if (last_blk >= EXT_MAX_BLOCK)
++- last_blk = EXT_MAX_BLOCK-1;
+++ if (last_blk >= EXT_MAX_BLOCKS)
+++ last_blk = EXT_MAX_BLOCKS-1;
++ len_blks = ((ext4_lblk_t) last_blk) - start_blk + 1;
++
++ /*
++Index: linux-source-2.6.32/fs/ext4/mballoc.c
++===================================================================
++--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-07-03 16:01:41.049370380 +0200
+++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-07-03 16:19:58.129373141 +0200
++@@ -862,8 +862,6 @@
++
++ err = 0;
++ first_block = page->index * blocks_per_page;
++- /* init the page */
++- memset(page_address(page), 0xff, PAGE_CACHE_SIZE);
++ for (i = 0; i < blocks_per_page; i++) {
++ int group;
++ struct ext4_group_info *grinfo;
++@@ -899,6 +897,8 @@
++ * incore got set to the group block bitmap below
++ */
++ ext4_lock_group(sb, group);
+++ /* init the page */
+++ memset(data, 0xff, blocksize);
++ ext4_mb_generate_buddy(sb, data, incore, group);
++ ext4_unlock_group(sb, group);
++ incore = NULL;
++@@ -1862,7 +1862,6 @@
++ }
++ }
++
++-/* This is now called BEFORE we load the buddy bitmap. */
++ static int ext4_mb_good_group(struct ext4_allocation_context *ac,
++ ext4_group_t group, int cr)
++ {
++@@ -2162,6 +2161,11 @@
++ return (void *) ((unsigned long) group);
++ }
++
+++static inline void ext4_mb_release_desc(struct ext4_buddy *e4b)
+++{
+++ ext4_mb_unload_buddy(e4b);
+++}
+++
++ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)
++ {
++ struct super_block *sb = seq->private;
++@@ -2193,7 +2197,7 @@
++ ext4_lock_group(sb, group);
++ memcpy(&sg, ext4_get_group_info(sb, group), i);
++ ext4_unlock_group(sb, group);
++- ext4_mb_unload_buddy(&e4b);
+++ ext4_mb_release_desc(&e4b);
++
++ seq_printf(seq, "#%-5u: %-5u %-5u %-5u [", group, sg.info.bb_free,
++ sg.info.bb_fragments, sg.info.bb_first_free);
++@@ -2562,6 +2566,17 @@
++ return 0;
++ }
++
+++static inline int ext4_issue_discard(struct super_block *sb,
+++ ext4_group_t block_group, ext4_grpblk_t block, int count)
+++{
+++ ext4_fsblk_t discard_block;
+++
+++ discard_block = block + ext4_group_first_block_no(sb, block_group);
+++ trace_ext4_discard_blocks(sb,
+++ (unsigned long long) discard_block, count);
+++ return sb_issue_discard(sb, discard_block, count);
+++}
+++
++ /*
++ * This function is called by the jbd2 layer once the commit has finished,
++ * so we know we can free the blocks that were released with that commit.
++@@ -2583,14 +2598,8 @@
++
++ if (test_opt(sb, DISCARD)) {
++ int ret;
++- ext4_fsblk_t discard_block;
++-
++- discard_block = entry->start_blk +
++- ext4_group_first_block_no(sb, entry->group);
++- trace_ext4_discard_blocks(sb,
++- (unsigned long long)discard_block,
++- entry->count);
++- ret = sb_issue_discard(sb, discard_block, entry->count);
+++ ret = ext4_issue_discard(sb, entry->group,
+++ entry->start_blk, entry->count);
++ if (ret == EOPNOTSUPP) {
++ ext4_warning(sb, __func__,
++ "discard not supported, disabling");
++@@ -2620,7 +2629,7 @@
++ }
++ ext4_unlock_group(sb, entry->group);
++ kmem_cache_free(ext4_free_ext_cachep, entry);
++- ext4_mb_unload_buddy(&e4b);
+++ ext4_mb_release_desc(&e4b);
++ }
++
++ mb_debug(1, "freed %u blocks in %u structures\n", count, count2);
++Index: linux-source-2.6.32/fs/ext4/move_extent.c
++===================================================================
++--- linux-source-2.6.32.orig/fs/ext4/move_extent.c 2012-07-03 16:01:41.049370380 +0200
+++++ linux-source-2.6.32/fs/ext4/move_extent.c 2012-07-03 16:19:58.129373141 +0200
++@@ -1001,12 +1001,12 @@
++ return -EINVAL;
++ }
++
++- if ((orig_start > EXT_MAX_BLOCK) ||
++- (donor_start > EXT_MAX_BLOCK) ||
++- (*len > EXT_MAX_BLOCK) ||
++- (orig_start + *len > EXT_MAX_BLOCK)) {
+++ if ((orig_start > EXT_MAX_BLOCKS) ||
+++ (donor_start > EXT_MAX_BLOCKS) ||
+++ (*len > EXT_MAX_BLOCKS) ||
+++ (orig_start + *len > EXT_MAX_BLOCKS)) {
++ ext4_debug("ext4 move extent: Can't handle over [%u] blocks "
++- "[ino:orig %lu, donor %lu]\n", EXT_MAX_BLOCK,
+++ "[ino:orig %lu, donor %lu]\n", EXT_MAX_BLOCKS,
++ orig_inode->i_ino, donor_inode->i_ino);
++ return -EINVAL;
++ }
++Index: linux-source-2.6.32/fs/ext4/super.c
++===================================================================
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-03 16:19:53.737375622 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-03 16:19:58.133381520 +0200
++@@ -52,6 +52,8 @@
++
++ struct proc_dir_entry *ext4_proc_root;
++ static struct kset *ext4_kset;
+++static struct ext4_lazy_init *ext4_li_info;
+++static struct mutex ext4_li_mtx;
++
++ static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
++ unsigned long journal_devnum);
++@@ -350,6 +352,42 @@
++ ext4_handle_error(sb);
++ }
++
+++void ext4_error_inode(const char *function, struct inode *inode,
+++ const char *fmt, ...)
+++{
+++ va_list args;
+++
+++ va_start(args, fmt);
+++ printk(KERN_CRIT "EXT4-fs error (device %s): %s: inode #%lu: (comm %s) ",
+++ inode->i_sb->s_id, function, inode->i_ino, current->comm);
+++ vprintk(fmt, args);
+++ printk("\n");
+++ va_end(args);
+++
+++ ext4_handle_error(inode->i_sb);
+++}
+++
+++void ext4_error_file(const char *function, struct file *file,
+++ const char *fmt, ...)
+++{
+++ va_list args;
+++ struct inode *inode = file->f_dentry->d_inode;
+++ char pathname[80], *path;
+++
+++ va_start(args, fmt);
+++ path = d_path(&(file->f_path), pathname, sizeof(pathname));
+++ if (!path)
+++ path = "(unknown)";
+++ printk(KERN_CRIT
+++ "EXT4-fs error (device %s): %s: inode #%lu (comm %s path %s): ",
+++ inode->i_sb->s_id, function, inode->i_ino, current->comm, path);
+++ vprintk(fmt, args);
+++ printk("\n");
+++ va_end(args);
+++
+++ ext4_handle_error(inode->i_sb);
+++}
+++
++ static const char *ext4_decode_error(struct super_block *sb, int errno,
++ char nbuf[16])
++ {
++@@ -1095,13 +1133,14 @@
++ Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
++ Opt_data_err_abort, Opt_data_err_ignore,
++ Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
++- Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota,
++- Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err, Opt_resize,
++- Opt_usrquota, Opt_grpquota, Opt_i_version,
+++ Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
+++ Opt_noquota, Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err,
+++ Opt_resize, Opt_usrquota, Opt_grpquota, Opt_i_version,
++ Opt_stripe, Opt_delalloc, Opt_nodelalloc,
++ Opt_block_validity, Opt_noblock_validity,
++ Opt_inode_readahead_blks, Opt_journal_ioprio,
++ Opt_discard, Opt_nodiscard,
+++ Opt_init_inode_table, Opt_noinit_inode_table,
++ };
++
++ static const match_table_t tokens = {
++@@ -2705,6 +2744,21 @@
++ get_random_bytes(&sbi->s_next_generation, sizeof(u32));
++ spin_lock_init(&sbi->s_next_gen_lock);
++
+++ err = percpu_counter_init(&sbi->s_freeblocks_counter,
+++ ext4_count_free_blocks(sb));
+++ if (!err)
+++ err = percpu_counter_init(&sbi->s_freeinodes_counter,
+++ ext4_count_free_inodes(sb));
+++ if (!err)
+++ err = percpu_counter_init(&sbi->s_dirs_counter,
+++ ext4_count_dirs(sb));
+++ if (!err)
+++ err = percpu_counter_init(&sbi->s_dirtyblocks_counter, 0);
+++ if (err) {
+++ ext4_msg(sb, KERN_ERR, "insufficient memory");
+++ goto failed_mount3;
+++ }
+++
++ sbi->s_stripe = ext4_get_stripe_size(sbi);
++ sbi->s_max_writeback_mb_bump = 128;
++
++@@ -2824,20 +2878,6 @@
++ set_task_ioprio(sbi->s_journal->j_task, journal_ioprio);
++
++ no_journal:
++- err = percpu_counter_init(&sbi->s_freeblocks_counter,
++- ext4_count_free_blocks(sb));
++- if (!err)
++- err = percpu_counter_init(&sbi->s_freeinodes_counter,
++- ext4_count_free_inodes(sb));
++- if (!err)
++- err = percpu_counter_init(&sbi->s_dirs_counter,
++- ext4_count_dirs(sb));
++- if (!err)
++- err = percpu_counter_init(&sbi->s_dirtyblocks_counter, 0);
++- if (err) {
++- ext4_msg(sb, KERN_ERR, "insufficient memory");
++- goto failed_mount_wq;
++- }
++ if (test_opt(sb, NOBH)) {
++ if (!(test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA)) {
++ ext4_msg(sb, KERN_WARNING, "Ignoring nobh option - "
++@@ -2970,10 +3010,6 @@
++ jbd2_journal_destroy(sbi->s_journal);
++ sbi->s_journal = NULL;
++ }
++- percpu_counter_destroy(&sbi->s_freeblocks_counter);
++- percpu_counter_destroy(&sbi->s_freeinodes_counter);
++- percpu_counter_destroy(&sbi->s_dirs_counter);
++- percpu_counter_destroy(&sbi->s_dirtyblocks_counter);
++ failed_mount3:
++ if (sbi->s_flex_groups) {
++ if (is_vmalloc_addr(sbi->s_flex_groups))
++@@ -2981,6 +3017,10 @@
++ else
++ kfree(sbi->s_flex_groups);
++ }
+++ percpu_counter_destroy(&sbi->s_freeblocks_counter);
+++ percpu_counter_destroy(&sbi->s_freeinodes_counter);
+++ percpu_counter_destroy(&sbi->s_dirs_counter);
+++ percpu_counter_destroy(&sbi->s_dirtyblocks_counter);
++ failed_mount2:
++ for (i = 0; i < db_count; i++)
++ brelse(sbi->s_group_desc[i]);
++@@ -4003,6 +4043,15 @@
++ .fs_flags = FS_REQUIRES_DEV,
++ };
++
+++static int __init ext4_init_feat_adverts(void)
+++{
+++ return 0;
+++}
+++
+++static void ext4_exit_feat_adverts(void)
+++{
+++}
+++
++ static int __init init_ext4_fs(void)
++ {
++ int err;
++@@ -4015,6 +4064,9 @@
++ if (!ext4_kset)
++ goto out4;
++ ext4_proc_root = proc_mkdir("fs/ext4", NULL);
+++
+++ err = ext4_init_feat_adverts();
+++
++ err = init_ext4_mballoc();
++ if (err)
++ goto out3;
++@@ -4028,6 +4080,9 @@
++ err = register_filesystem(&ext4_fs_type);
++ if (err)
++ goto out;
+++
+++ ext4_li_info = NULL;
+++ mutex_init(&ext4_li_mtx);
++ return 0;
++ out:
++ destroy_inodecache();
++@@ -4036,6 +4091,7 @@
++ out2:
++ exit_ext4_mballoc();
++ out3:
+++ ext4_exit_feat_adverts();
++ remove_proc_entry("fs/ext4", NULL);
++ kset_unregister(ext4_kset);
++ out4:
diff --git a/ldiskfs/kernel_patches/patches/ext4-vmalloc-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-vmalloc-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..86c8818
+index 0000000..a8a151c
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-vmalloc-2.6.32-vanilla.patch
@@ -0,0 +1,210 @@
+Index: linux-source-2.6.32/fs/ext4/super.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-06-28 12:11:27.705663349 +0200
-++++ linux-source-2.6.32/fs/ext4/super.c 2012-06-28 12:11:38.097666318 +0200
-+@@ -639,7 +639,12 @@
++--- linux-source-2.6.32.orig/fs/ext4/super.c 2012-07-04 11:15:17.645376714 +0200
+++++ linux-source-2.6.32/fs/ext4/super.c 2012-07-04 11:15:26.913377451 +0200
++@@ -677,7 +677,12 @@
+
+ for (i = 0; i < sbi->s_gdb_count; i++)
+ brelse(sbi->s_group_desc[i]);
@@ -5459,7 +5955,7 @@ index 0000000..86c8818
+ if (is_vmalloc_addr(sbi->s_flex_groups))
+ vfree(sbi->s_flex_groups);
+ else
-+@@ -2466,12 +2471,13 @@
++@@ -2505,12 +2510,13 @@
+ unsigned long offset = 0;
+ unsigned long journal_devnum = 0;
+ unsigned long def_mount_opts;
@@ -5474,7 +5970,7 @@ index 0000000..86c8818
+ unsigned int i;
+ int needs_recovery, has_huge_files;
+ __u64 blocks_count;
-+@@ -2794,11 +2800,18 @@
++@@ -2833,11 +2839,18 @@
+ (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb)));
+ db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) /
+ EXT4_DESC_PER_BLOCK(sb);
@@ -5497,7 +5993,7 @@ index 0000000..86c8818
+ }
+
+ #ifdef __BIG_ENDIAN
-+@@ -3003,17 +3016,16 @@
++@@ -3043,17 +3056,16 @@
+ if (IS_ERR(root)) {
+ ext4_msg(sb, KERN_ERR, "get root inode failed");
+ ret = PTR_ERR(root);
@@ -5516,7 +6012,7 @@ index 0000000..86c8818
+ ret = -ENOMEM;
+ goto failed_mount4;
+ }
-+@@ -3064,6 +3076,7 @@
++@@ -3104,6 +3116,7 @@
+ if (err) {
+ ext4_msg(sb, KERN_ERR, "failed to initalize mballoc (%d)",
+ err);
@@ -5524,7 +6020,7 @@ index 0000000..86c8818
+ goto failed_mount4;
+ }
+
-+@@ -3105,6 +3118,8 @@
++@@ -3145,6 +3158,8 @@
+ goto failed_mount;
+
+ failed_mount4:
@@ -5533,7 +6029,7 @@ index 0000000..86c8818
+ ext4_msg(sb, KERN_ERR, "mount failed");
+ destroy_workqueue(EXT4_SB(sb)->dio_unwritten_wq);
+ failed_mount_wq:
-+@@ -3129,7 +3144,11 @@
++@@ -3169,7 +3184,11 @@
+ failed_mount2:
+ for (i = 0; i < db_count; i++)
+ brelse(sbi->s_group_desc[i]);
@@ -5548,9 +6044,9 @@ index 0000000..86c8818
+ remove_proc_entry(sb->s_id, ext4_proc_root);
+Index: linux-source-2.6.32/fs/ext4/mballoc.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-06-28 12:11:12.521665249 +0200
-++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-06-28 12:11:38.101746741 +0200
-+@@ -2469,24 +2469,37 @@
++--- linux-source-2.6.32.orig/fs/ext4/mballoc.c 2012-07-04 11:15:03.525371414 +0200
+++++ linux-source-2.6.32/fs/ext4/mballoc.c 2012-07-04 11:15:26.913377451 +0200
++@@ -2473,24 +2473,37 @@
+ while (array_size < sizeof(*sbi->s_group_info) *
+ num_meta_group_infos_max)
+ array_size = array_size << 1;
@@ -5596,7 +6092,7 @@ index 0000000..86c8818
+ "EXT4-fs: can't read descriptor %u\n", i);
+ goto err_freebuddy;
+ }
-+@@ -2504,7 +2517,10 @@
++@@ -2508,7 +2521,10 @@
+ kfree(sbi->s_group_info[i]);
+ iput(sbi->s_buddy_cache);
+ err_freesgi:
@@ -5608,7 +6104,7 @@ index 0000000..86c8818
+ return -ENOMEM;
+ }
+
-+@@ -2545,14 +2561,6 @@
++@@ -2549,14 +2565,6 @@
+ i++;
+ } while (i <= sb->s_blocksize_bits + 1);
+
@@ -5623,7 +6119,7 @@ index 0000000..86c8818
+ spin_lock_init(&sbi->s_md_lock);
+ spin_lock_init(&sbi->s_bal_lock);
+
-+@@ -2622,6 +2630,15 @@
++@@ -2626,6 +2634,15 @@
+ spin_lock_init(&lg->lg_prealloc_lock);
+ }
+
@@ -5639,7 +6135,7 @@ index 0000000..86c8818
+ if (sbi->s_proc) {
+ struct proc_dir_entry *p;
+ proc_create_data("mb_groups", S_IRUGO, sbi->s_proc,
-+@@ -2682,7 +2699,10 @@
++@@ -2686,7 +2703,10 @@
+ EXT4_DESC_PER_BLOCK_BITS(sb);
+ for (i = 0; i < num_meta_group_infos; i++)
+ kfree(sbi->s_group_info[i]);
@@ -5739,15 +6235,15 @@ index 0000000..d9bf1d9
+ goto out_stop;
diff --git a/ldiskfs/kernel_patches/patches/ext4-xattr-no-update-ctime-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4-xattr-no-update-ctime-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..b0bee6d
+index 0000000..b56143b
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4-xattr-no-update-ctime-2.6.32-vanilla.patch
@@ -0,0 +1,32 @@
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:10:06.385666114 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:10:12.449674842 +0200
-+@@ -1503,6 +1503,13 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-03 16:27:47.225375337 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-03 16:27:58.677416541 +0200
++@@ -1524,6 +1524,13 @@
+ #define EXT4_MAX_DIR_SIZE_NAME "max_dir_size"
+
+ /*
@@ -5763,8 +6259,8 @@ index 0000000..b0bee6d
+
+Index: linux-source-2.6.32/fs/ext4/xattr.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/xattr.c 2012-06-28 12:08:30.285665815 +0200
-++++ linux-source-2.6.32/fs/ext4/xattr.c 2012-06-28 12:10:12.481658638 +0200
++--- linux-source-2.6.32.orig/fs/ext4/xattr.c 2012-07-03 16:01:41.053394089 +0200
+++++ linux-source-2.6.32/fs/ext4/xattr.c 2012-07-03 16:27:58.681371270 +0200
+@@ -1045,7 +1045,8 @@
+ }
+ if (!error) {
@@ -5777,7 +6273,7 @@ index 0000000..b0bee6d
+ error = ext4_mark_iloc_dirty(handle, inode, &is.iloc);
diff --git a/ldiskfs/kernel_patches/patches/ext4_data_in_dirent-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4_data_in_dirent-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..d99ae18
+index 0000000..a30fb76
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4_data_in_dirent-2.6.32-vanilla.patch
@@ -0,0 +1,521 @@
@@ -5792,8 +6288,8 @@ index 0000000..d99ae18
+
+Index: linux-source-2.6.32/fs/ext4/dir.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/dir.c 2012-06-28 12:08:15.765666233 +0200
-++++ linux-source-2.6.32/fs/ext4/dir.c 2012-06-28 12:11:16.361665139 +0200
++--- linux-source-2.6.32.orig/fs/ext4/dir.c 2012-07-03 16:01:41.053394089 +0200
+++++ linux-source-2.6.32/fs/ext4/dir.c 2012-07-04 11:15:07.123039573 +0200
+@@ -53,11 +53,18 @@
+
+ static unsigned char get_dtype(struct super_block *sb, int filetype)
@@ -5868,9 +6364,9 @@ index 0000000..d99ae18
+ while (*p) {
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:10:58.337671542 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:11:16.361665139 +0200
-+@@ -1258,6 +1258,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-04 11:14:59.581367627 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-04 11:15:07.125372180 +0200
++@@ -1262,6 +1262,7 @@
+ #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
+ #define EXT4_FEATURE_INCOMPAT_MMP 0x0100
+ #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
@@ -5878,7 +6374,7 @@ index 0000000..d99ae18
+
+ #define EXT4_FEATURE_COMPAT_SUPP EXT2_FEATURE_COMPAT_EXT_ATTR
+ #define EXT4_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \
-+@@ -1266,7 +1267,9 @@
++@@ -1270,7 +1271,9 @@
+ EXT4_FEATURE_INCOMPAT_EXTENTS| \
+ EXT4_FEATURE_INCOMPAT_64BIT| \
+ EXT4_FEATURE_INCOMPAT_FLEX_BG| \
@@ -5889,7 +6385,7 @@ index 0000000..d99ae18
+ #define EXT4_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+ EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
+ EXT4_FEATURE_RO_COMPAT_GDT_CSUM| \
-+@@ -1348,6 +1351,43 @@
++@@ -1352,6 +1355,43 @@
+ #define EXT4_FT_SYMLINK 7
+
+ #define EXT4_FT_MAX 8
@@ -5933,7 +6429,7 @@ index 0000000..d99ae18
+
+ /*
+ * EXT4_DIR_PAD defines the directory entries boundaries
-+@@ -1356,8 +1396,11 @@
++@@ -1360,8 +1400,11 @@
+ */
+ #define EXT4_DIR_PAD 4
+ #define EXT4_DIR_ROUND (EXT4_DIR_PAD - 1)
@@ -5946,7 +6442,7 @@ index 0000000..d99ae18
+ #define EXT4_MAX_REC_LEN ((1<<16)-1)
+
+ /*
-+@@ -1684,7 +1727,7 @@
++@@ -1705,7 +1748,7 @@
+ struct ext4_dir_entry_2 ** res_dir);
+ #define ll_ext4_find_entry(inode, dentry, res_dir) ext4_find_entry(inode, &(dentry)->d_name, res_dir)
+ extern int ext4_add_dot_dotdot(handle_t *handle, struct inode *dir,
@@ -5955,7 +6451,7 @@ index 0000000..d99ae18
+ extern struct buffer_head *ext4_append(handle_t *handle,
+ struct inode *inode,
+ ext4_lblk_t *block, int *err);
-+@@ -2015,6 +2058,28 @@
++@@ -2036,6 +2079,28 @@
+
+ #define in_range(b, first, len) ((b) >= (first) && (b) <= (first) + (len) - 1)
+
@@ -5986,8 +6482,8 @@ index 0000000..d99ae18
+ #endif /* _EXT4_H */
+Index: linux-source-2.6.32/fs/ext4/namei.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/namei.c 2012-06-28 12:10:52.005665948 +0200
-++++ linux-source-2.6.32/fs/ext4/namei.c 2012-06-28 12:11:16.365664904 +0200
++--- linux-source-2.6.32.orig/fs/ext4/namei.c 2012-07-04 11:14:53.865373482 +0200
+++++ linux-source-2.6.32/fs/ext4/namei.c 2012-07-04 11:15:07.129380072 +0200
+@@ -169,7 +169,8 @@
+ static unsigned dx_get_limit(struct dx_entry *entries);
+ static void dx_set_count(struct dx_entry *entries, unsigned value);
@@ -6304,14 +6800,14 @@ index 0000000..d99ae18
+ ext4_error(inode->i_sb, __func__,
diff --git a/ldiskfs/kernel_patches/patches/ext4_pdirop-2.6.32-vanilla.patch b/ldiskfs/kernel_patches/patches/ext4_pdirop-2.6.32-vanilla.patch
new file mode 100644
-index 0000000..7166474
+index 0000000..d0e3788
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext4_pdirop-2.6.32-vanilla.patch
@@ -0,0 +1,2272 @@
+Index: linux-source-2.6.32/include/linux/htree_lock.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-++++ linux-source-2.6.32/include/linux/htree_lock.h 2012-06-28 12:11:51.973666178 +0200
+++++ linux-source-2.6.32/include/linux/htree_lock.h 2012-07-04 11:28:14.317363671 +0200
+@@ -0,0 +1,187 @@
++/*
++ * include/linux/htree_lock.h
@@ -6503,7 +6999,7 @@ index 0000000..7166474
+Index: linux-source-2.6.32/fs/ext4/htree_lock.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-++++ linux-source-2.6.32/fs/ext4/htree_lock.c 2012-06-28 12:11:51.977663925 +0200
+++++ linux-source-2.6.32/fs/ext4/htree_lock.c 2012-07-04 11:28:14.317363671 +0200
+@@ -0,0 +1,880 @@
++/*
++ * fs/ext4/htree_lock.c
@@ -7387,9 +7883,9 @@ index 0000000..7166474
++EXPORT_SYMBOL(htree_lock_free);
+Index: linux-source-2.6.32/fs/ext4/ext4.h
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-06-28 12:11:34.597665360 +0200
-++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-06-28 12:11:51.977663925 +0200
-+@@ -28,6 +28,7 @@
++--- linux-source-2.6.32.orig/fs/ext4/ext4.h 2012-07-04 11:15:23.709373618 +0200
+++++ linux-source-2.6.32/fs/ext4/ext4.h 2012-07-04 11:28:14.321373950 +0200
++@@ -29,6 +29,7 @@
+ #include <linux/mutex.h>
+ #include <linux/timer.h>
+ #include <linux/wait.h>
@@ -7397,7 +7893,7 @@ index 0000000..7166474
+ #include <linux/blockgroup_lock.h>
+ #include <linux/percpu_counter.h>
+ #ifdef __KERNEL__
-+@@ -1269,6 +1270,7 @@
++@@ -1273,6 +1274,7 @@
+ #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
+ #define EXT4_FEATURE_INCOMPAT_EA_INODE 0x0400
+ #define EXT4_FEATURE_INCOMPAT_DIRDATA 0x1000
@@ -7405,7 +7901,7 @@ index 0000000..7166474
+
+ #define EXT4_FEATURE_COMPAT_SUPP EXT2_FEATURE_COMPAT_EXT_ATTR
+ #define EXT4_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \
-+@@ -1279,7 +1281,8 @@
++@@ -1283,7 +1285,8 @@
+ EXT4_FEATURE_INCOMPAT_FLEX_BG| \
+ EXT4_FEATURE_INCOMPAT_EA_INODE| \
+ EXT4_FEATURE_INCOMPAT_MMP| \
@@ -7415,7 +7911,7 @@ index 0000000..7166474
+
+ #define EXT4_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
+ EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
-+@@ -1496,6 +1499,76 @@
++@@ -1500,6 +1503,76 @@
+ */
+ #define ERR_BAD_DX_DIR -75000
+
@@ -7492,7 +7988,7 @@ index 0000000..7166474
+ void ext4_get_group_no_and_offset(struct super_block *sb, ext4_fsblk_t blocknr,
+ ext4_group_t *blockgrpp, ext4_grpblk_t *offsetp);
+
-+@@ -1735,14 +1808,16 @@
++@@ -1756,14 +1829,16 @@
+ extern struct inode *ext4_create_inode(handle_t *handle,
+ struct inode * dir, int mode);
+ extern int ext4_add_entry(handle_t *handle, struct dentry *dentry,
@@ -7512,7 +8008,7 @@ index 0000000..7166474
+ extern int ext4_add_dot_dotdot(handle_t *handle, struct inode *dir,
+ struct inode *inode, const void *, const void *);
+ extern struct buffer_head *ext4_append(handle_t *handle,
-+@@ -1852,13 +1927,15 @@
++@@ -1873,13 +1948,15 @@
+ es->s_r_blocks_count_hi = cpu_to_le32(blk >> 32);
+ }
+
@@ -7534,8 +8030,8 @@ index 0000000..7166474
+ static inline void ext4_isize_set(struct ext4_inode *raw_inode, loff_t i_size)
+Index: linux-source-2.6.32/fs/ext4/namei.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/namei.c 2012-06-28 12:11:31.057668333 +0200
-++++ linux-source-2.6.32/fs/ext4/namei.c 2012-06-28 12:11:51.981664959 +0200
++--- linux-source-2.6.32.orig/fs/ext4/namei.c 2012-07-04 11:15:20.965374700 +0200
+++++ linux-source-2.6.32/fs/ext4/namei.c 2012-07-04 11:28:14.325374745 +0200
+@@ -176,7 +176,7 @@
+ struct inode *dir,
+ struct dx_hash_info *hinfo,
@@ -8556,8 +9052,8 @@ index 0000000..7166474
+ old_de2, old_bh2);
+Index: linux-source-2.6.32/fs/ext4/inode.c
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/inode.c 2012-06-28 12:10:23.333666208 +0200
-++++ linux-source-2.6.32/fs/ext4/inode.c 2012-06-28 12:11:51.985662967 +0200
++--- linux-source-2.6.32.orig/fs/ext4/inode.c 2012-07-04 11:11:15.545375533 +0200
+++++ linux-source-2.6.32/fs/ext4/inode.c 2012-07-04 11:28:14.329377409 +0200
+@@ -4923,7 +4923,7 @@
+ if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_64BIT))
+ ei->i_file_acl |=
@@ -8569,8 +9065,8 @@ index 0000000..7166474
+ ei->i_reserved_quota = 0;
+Index: linux-source-2.6.32/fs/ext4/Makefile
+===================================================================
-+--- linux-source-2.6.32.orig/fs/ext4/Makefile 2012-06-28 12:10:45.425668386 +0200
-++++ linux-source-2.6.32/fs/ext4/Makefile 2012-06-28 12:11:51.985662967 +0200
++--- linux-source-2.6.32.orig/fs/ext4/Makefile 2012-07-04 11:14:45.637376168 +0200
+++++ linux-source-2.6.32/fs/ext4/Makefile 2012-07-04 11:28:14.329377409 +0200
+@@ -7,7 +7,7 @@
+ 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 \
@@ -8582,10 +9078,10 @@ index 0000000..7166474
+ ext4-$(CONFIG_EXT4_FS_POSIX_ACL) += acl.o
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6.32-vanilla.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6.32-vanilla.series
new file mode 100644
-index 0000000..e402bef
+index 0000000..b1eff79
--- /dev/null
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6.32-vanilla.series
-@@ -0,0 +1,37 @@
+@@ -0,0 +1,38 @@
+ext4-wantedi-2.6.32-vanilla.patch
+ext4-map_inode_page-2.6.32-vanilla.patch
+export-ext4-2.6.32-vanilla.patch
@@ -8593,6 +9089,7 @@ index 0000000..e402bef
+ext4-nlink-2.6.32-vanilla.patch
+ext4-ext_generation-2.6.32-vanilla.patch
+ext4-inode-version-2.6.32-vanilla.patch
++ext4-update-vanilla-2.6.32-vanilla.patch
+ext4-mmp-2.6.32-vanilla.patch
+ext4-lookup-dotdot-2.6.32-vanilla.patch
+ext4-max-dir-size-2.6.32-vanilla.patch
--
Lustre Debian Packaging
More information about the Pkg-lustre-svn-commit
mailing list