[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