diff --git a/ldiskfs/kernel_patches/patches/ext3-max-dir-size.patch b/ldiskfs/kernel_patches/patches/ext3-max-dir-size.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e7621effd426c2b5ee1c1e03f52b2bbef9cf1911
--- /dev/null
+++ b/ldiskfs/kernel_patches/patches/ext3-max-dir-size.patch
@@ -0,0 +1,113 @@
+diff -pur linux-2.6.9-full.mid/fs/ext3/ialloc.c linux-2.6.9-full/fs/ext3/ialloc.c
+--- linux-2.6.9-full.mid/fs/ext3/ialloc.c	2008-04-16 13:49:22.000000000 +0800
++++ linux-2.6.9-full/fs/ext3/ialloc.c	2008-04-16 15:26:40.000000000 +0800
+@@ -440,6 +440,9 @@ struct inode *ext3_new_inode(handle_t *h
+ 	if (!dir || !dir->i_nlink)
+ 		return ERR_PTR(-EPERM);
+ 
++	if (ext3_max_dir_size > 0 && i_size_read(dir) >= ext3_max_dir_size)
++		return ERR_PTR(-EFBIG);
++
+ 	sb = dir->i_sb;
+ 	inode = new_inode(sb);
+ 	if (!inode)
+diff -pur linux-2.6.9-full.mid/fs/ext3/super.c linux-2.6.9-full/fs/ext3/super.c
+--- linux-2.6.9-full.mid/fs/ext3/super.c	2008-05-06 16:07:23.000000000 +0800
++++ linux-2.6.9-full/fs/ext3/super.c	2008-05-12 02:05:36.000000000 +0800
+@@ -2610,6 +2610,53 @@ static struct file_system_type ext3_fs_t
+ 	.fs_flags	= FS_REQUIRES_DEV,
+ };
+ 
++/*
++ * max directory size tunable
++ */
++#define EXT3_DEFAULT_MAX_DIR_SIZE		0
++#define EXT3_MAX_DIR_SIZE_NAME		"max_dir_size"
++
++unsigned long ext3_max_dir_size;
++
++static int ext3_max_dir_size_read(char *page, char **start, off_t off,
++                                  int count, int *eof, void *data)
++{
++	int len;
++
++	*eof = 1;
++	if (off != 0)
++		return 0;
++
++	len = sprintf(page, "%lu\n", ext3_max_dir_size);
++	*start = page;
++	return len;
++}
++
++static int ext3_max_dir_size_write(struct file *file, const char *buffer,
++                                   unsigned long count, void *data)
++{
++	char str[32];
++	unsigned long value;
++	char *end;
++
++	if (count >= sizeof(str)) {
++		printk(KERN_ERR "EXT3-fs: %s string too long, max %u bytes\n",
++		       EXT3_MAX_DIR_SIZE_NAME, (int)sizeof(str));
++		return -EOVERFLOW;
++	}
++
++	if (copy_from_user(str, buffer, count))
++		return -EFAULT;
++
++	value = simple_strtol(str, &end, 0);
++	if (value < 0)
++		return -ERANGE;
++
++	ext3_max_dir_size = value;
++	return count;
++}
++
++
+ #define EXT3_ROOT "ext3"
+ struct proc_dir_entry *proc_root_ext3;
+ 
+@@ -2628,8 +2675,22 @@ int __init init_ext3_proc(void)
+ 		goto out_mb_proc;
+ 	}
+ 
++	proc = create_proc_entry(EXT3_MAX_DIR_SIZE_NAME,
++		                 S_IFREG | S_IRUGO | S_IWUSR, proc_root_ext3);
++	if (proc == NULL) {
++		printk(KERN_ERR "EXT3-fs: Unable to create %s/%s\n",
++			EXT3_ROOT, EXT3_MAX_DIR_SIZE_NAME);
++		ret = -ENOMEM;
++		goto out_proc_root;
++	}
++
++	proc->data = NULL;
++	proc->read_proc = ext3_max_dir_size_read;
++	proc->write_proc = ext3_max_dir_size_write;
+ 	return 0;
+ 
++out_proc_root:
++	remove_proc_entry(EXT3_ROOT, proc_root_fs);
+ out_mb_proc:
+ 	exit_ext3_mb_proc();
+ out:
+@@ -2639,6 +2700,7 @@ out:
+ void exit_ext3_proc(void)
+ {
+ 	exit_ext3_mb_proc();
++	remove_proc_entry(EXT3_MAX_DIR_SIZE_NAME, proc_root_ext3);
+ 	remove_proc_entry(EXT3_ROOT, proc_root_fs);
+ }
+ 
+diff -pur linux-2.6.9-full.mid/include/linux/ext3_fs.h linux-2.6.9-full/include/linux/ext3_fs.h
+--- linux-2.6.9-full.mid/include/linux/ext3_fs.h	2008-04-16 14:02:18.000000000 +0800
++++ linux-2.6.9-full/include/linux/ext3_fs.h	2008-04-15 00:59:38.000000000 +0800
+@@ -854,6 +854,8 @@ extern struct proc_dir_entry *proc_root_
+ extern int __init init_ext3_proc(void);
+ extern void exit_ext3_proc(void);
+ 
++extern unsigned long ext3_max_dir_size;
++
+ extern void ext3_error (struct super_block *, const char *, const char *, ...)
+ 	__attribute__ ((format (printf, 3, 4)));
+ extern void __ext3_std_error (struct super_block *, const char *, int);
diff --git a/ldiskfs/kernel_patches/patches/ext3-mballoc3-2.6.18.patch b/ldiskfs/kernel_patches/patches/ext3-mballoc3-2.6.18.patch
index c7854cee5aec2e440ef35065be619f16cf6f05fd..bc9313679a90dd2f8670adbc5a73fd76eba17588 100644
--- a/ldiskfs/kernel_patches/patches/ext3-mballoc3-2.6.18.patch
+++ b/ldiskfs/kernel_patches/patches/ext3-mballoc3-2.6.18.patch
@@ -101,8 +101,8 @@ Index: linux-2.6.18.8/include/linux/ext3_fs.h
  extern void ext3_mb_release_blocks(struct super_block *, int);
  extern void ext3_mb_release_blocks(struct super_block *, int);
  extern void ext3_mb_discard_inode_preallocations(struct inode *);
- extern int __init init_ext3_proc(void);
- extern void exit_ext3_proc(void);
+ extern int __init init_ext3_mb_proc(void);
+ extern void exit_ext3_mb_proc(void);
 -extern void ext3_mb_free_blocks(handle_t *, struct inode *, unsigned long, unsigned long, int, int *);
 +extern void ext3_mb_free_blocks(handle_t *, struct inode *, unsigned long,
 +				unsigned long, int, unsigned long *);
diff --git a/ldiskfs/kernel_patches/patches/ext3-mballoc3-2.6.22.patch b/ldiskfs/kernel_patches/patches/ext3-mballoc3-2.6.22.patch
index 7ce15fe674aa5d399739b53ab2afd0d0dbbb325a..68ca8ae13b50f345f00c37a9e3fc2e52784289e5 100644
--- a/ldiskfs/kernel_patches/patches/ext3-mballoc3-2.6.22.patch
+++ b/ldiskfs/kernel_patches/patches/ext3-mballoc3-2.6.22.patch
@@ -101,8 +101,8 @@ Index: linux-2.6.22.19/include/linux/ext3_fs.h
  extern void ext3_mb_release_blocks(struct super_block *, int);
  extern void ext3_mb_release_blocks(struct super_block *, int);
  extern void ext3_mb_discard_inode_preallocations(struct inode *);
- extern int __init init_ext3_proc(void);
- extern void exit_ext3_proc(void);
+ extern int __init init_ext3_mb_proc(void);
+ extern void exit_ext3_mb_proc(void);
 -extern void ext3_mb_free_blocks(handle_t *, struct inode *, unsigned long, unsigned long, int, int *);
 +extern void ext3_mb_free_blocks(handle_t *, struct inode *, unsigned long,
 +				unsigned long, int, unsigned long *);
diff --git a/ldiskfs/kernel_patches/patches/ext3-mballoc3-core.patch b/ldiskfs/kernel_patches/patches/ext3-mballoc3-core.patch
index f1d9bd61be3ce020206f7a99d057f9e6304db087..ac840d064df4605a533a053d45f7b9352e1d882c 100644
--- a/ldiskfs/kernel_patches/patches/ext3-mballoc3-core.patch
+++ b/ldiskfs/kernel_patches/patches/ext3-mballoc3-core.patch
@@ -62,13 +62,24 @@ Index: linux-2.6.9-full/include/linux/ext3_fs.h
 +extern void ext3_mb_release_blocks(struct super_block *, int);
 +extern void ext3_mb_release_blocks(struct super_block *, int);
 +extern void ext3_mb_discard_inode_preallocations(struct inode *);
-+extern int __init init_ext3_proc(void);
-+extern void exit_ext3_proc(void);
++extern int __init init_ext3_mb_proc(void);
++extern void exit_ext3_mb_proc(void);
 +extern void ext3_mb_free_blocks(handle_t *, struct inode *, unsigned long, unsigned long, int, int *);
 +
  
  /* inode.c */
  extern int ext3_block_truncate_page(handle_t *, struct page *,
+@@ -804,6 +850,10 @@ extern int ext3_group_extend(struct supe
+ 				unsigned long n_blocks_count);
+ 
+ /* super.c */
++extern struct proc_dir_entry *proc_root_ext3;
++extern int __init init_ext3_proc(void);
++extern void exit_ext3_proc(void);
++
+ extern void ext3_error (struct super_block *, const char *, const char *, ...)
+ 	__attribute__ ((format (printf, 3, 4)));
+ extern void __ext3_std_error (struct super_block *, const char *, int);
 Index: linux-2.6.9-full/include/linux/ext3_fs_sb.h
 ===================================================================
 --- linux-2.6.9-full.orig/include/linux/ext3_fs_sb.h	2007-06-08 23:44:07.000000000 +0400
@@ -105,7 +116,7 @@ Index: linux-2.6.9-full/include/linux/ext3_fs_sb.h
 +	int s_mb_history_cur;
 +	int s_mb_history_max;
 +	int s_mb_history_num;
-+	struct proc_dir_entry *s_mb_proc;
++	struct proc_dir_entry *s_dev_proc;
 +	spinlock_t s_mb_history_lock;
 +	int s_mb_history_filter;
 +
@@ -147,17 +158,83 @@ Index: linux-2.6.9-full/fs/ext3/super.c
  	ext3_ext_release(sb);
  	ext3_xattr_put_super(sb);
  	journal_destroy(sbi->s_journal);
-@@ -463,6 +464,8 @@ static struct inode *ext3_alloc_inode(st
+@@ -438,6 +439,8 @@ void ext3_put_super (struct super_block 
+ 		invalidate_bdev(sbi->journal_bdev, 0);
+ 		ext3_blkdev_remove(sbi);
+ 	}
++	remove_proc_entry(sb->s_id, proc_root_ext3);
++	sbi->s_dev_proc = NULL;
+ 	sb->s_fs_info = NULL;
+ 	kfree(sbi);
+ 	return;
+@@ -463,6 +466,8 @@ static struct inode *ext3_alloc_inode(st
  	ei->vfs_inode.i_version = 1;
- 
+ 	
  	memset(&ei->i_cached_extent, 0, sizeof(ei->i_cached_extent));
 +	INIT_LIST_HEAD(&ei->i_prealloc_list);
 +	spin_lock_init(&ei->i_prealloc_lock);
  	return &ei->vfs_inode;
  }
  
-@@ -2576,7 +2579,13 @@ static struct file_system_type ext3_fs_t
+@@ -1353,6 +1358,13 @@ static int ext3_fill_super (struct super
+ 	sbi->s_mount_opt = 0;
+ 	sbi->s_resuid = EXT3_DEF_RESUID;
+ 	sbi->s_resgid = EXT3_DEF_RESGID;
++	sbi->s_dev_proc = proc_mkdir(sb->s_id, proc_root_ext3);
++	if (sbi->s_dev_proc == NULL) {
++		printk(KERN_ERR "EXT3-fs: Unable to create %s\n", sb->s_id);
++		sb->s_fs_info = NULL;
++		kfree(sbi);
++		return -ENOMEM;
++	}
+ 
+ 	blocksize = sb_min_blocksize(sb, EXT3_MIN_BLOCK_SIZE);
+ 	if (!blocksize) {
+@@ -1729,6 +1741,8 @@ failed_mount:
+ 	ext3_blkdev_remove(sbi);
+ 	brelse(bh);
+ out_fail:
++	remove_proc_entry(sb->s_id, proc_root_ext3);
++	sbi->s_dev_proc = NULL;
+ 	sb->s_fs_info = NULL;
+ 	kfree(sbi);
+ 	return -EINVAL;
+@@ -2593,9 +2607,47 @@ static struct file_system_type ext3_fs_t
+ 	.fs_flags	= FS_REQUIRES_DEV,
+ };
  
++#define EXT3_ROOT "ext3"
++struct proc_dir_entry *proc_root_ext3;
++
++int __init init_ext3_proc(void)
++{
++	struct proc_dir_entry *proc;
++	int ret;
++
++	if ((ret = init_ext3_mb_proc()))
++		goto out;
++
++	proc_root_ext3 = proc_mkdir(EXT3_ROOT, proc_root_fs);
++	if (proc_root_ext3 == NULL) {
++		printk(KERN_ERR "EXT3-fs: Unable to create %s\n", EXT3_ROOT);
++		ret = -ENOMEM;
++		goto out_mb_proc;
++	}
++
++	return 0;
++
++out_mb_proc:
++	exit_ext3_mb_proc();
++out:
++	return ret;
++}
++
++void exit_ext3_proc(void)
++{
++	exit_ext3_mb_proc();
++	remove_proc_entry(EXT3_ROOT, proc_root_fs);
++}
++
  static int __init init_ext3_fs(void)
  {
 -	int err = init_ext3_xattr();
@@ -171,19 +248,19 @@ Index: linux-2.6.9-full/fs/ext3/super.c
  	if (err)
  		return err;
  	err = init_inodecache();
-@@ -2598,6 +2607,7 @@ static void __exit exit_ext3_fs(void)
+@@ -2617,6 +2669,7 @@ static void __exit exit_ext3_fs(void)
  	unregister_filesystem(&ext3_fs_type);
  	destroy_inodecache();
  	exit_ext3_xattr();
 +	exit_ext3_proc();
  }
  
- int ext3_prep_san_write(struct inode *inode, long *blocks,
+ int ext3_map_inode_page(struct inode *inode, struct page *page,
 Index: linux-2.6.9-full/fs/ext3/mballoc.c
 ===================================================================
 --- linux-2.6.9-full.orig/fs/ext3/mballoc.c	2007-10-17 21:59:51.072534980 +0400
 +++ linux-2.6.9-full/fs/ext3/mballoc.c	2007-10-17 23:09:22.000000000 +0400
-@@ -0,0 +1,4398 @@
+@@ -0,0 +1,4380 @@
 +/*
 + * Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com
 + * Written by Alex Tomas <alex@clusterfs.com>
@@ -642,8 +719,6 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c
 +
 +#define in_range(b, first, len)	((b) >= (first) && (b) <= (first) + (len) - 1)
 +
-+static struct proc_dir_entry *proc_root_ext3;
-+
 +int ext3_create (struct inode *, struct dentry *, int, struct nameidata *);
 +struct buffer_head * read_block_bitmap(struct super_block *, unsigned int);
 +unsigned long ext3_new_blocks_old(handle_t *handle, struct inode *inode,
@@ -2358,8 +2433,8 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c
 +{
 +	struct ext3_sb_info *sbi = EXT3_SB(sb);
 +
-+	remove_proc_entry("mb_groups", sbi->s_mb_proc);
-+	remove_proc_entry("mb_history", sbi->s_mb_proc);
++	remove_proc_entry("mb_groups", sbi->s_dev_proc);
++	remove_proc_entry("mb_history", sbi->s_dev_proc);
 +
 +	if (sbi->s_mb_history)
 +		kfree(sbi->s_mb_history);
@@ -2370,14 +2445,14 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c
 +	struct ext3_sb_info *sbi = EXT3_SB(sb);
 +	int i;
 +
-+	if (sbi->s_mb_proc != NULL) {
++	if (sbi->s_dev_proc != NULL) {
 +		struct proc_dir_entry *p;
-+		p = create_proc_entry("mb_history", S_IRUGO, sbi->s_mb_proc);
++		p = create_proc_entry("mb_history", S_IRUGO, sbi->s_dev_proc);
 +		if (p) {
 +			p->proc_fops = &ext3_mb_seq_history_fops;
 +			p->data = sb;
 +		}
-+		p = create_proc_entry("mb_groups", S_IRUGO, sbi->s_mb_proc);
++		p = create_proc_entry("mb_groups", S_IRUGO, sbi->s_dev_proc);
 +		if (p) {
 +			p->proc_fops = &ext3_mb_seq_groups_fops;
 +			p->data = sb;
@@ -2764,7 +2839,6 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c
 +	mb_debug("freed %u blocks in %u structures\n", count, count2);
 +}
 +
-+#define EXT3_ROOT			"ext3"
 +#define EXT3_MB_STATS_NAME		"stats"
 +#define EXT3_MB_MAX_TO_SCAN_NAME	"max_to_scan"
 +#define EXT3_MB_MIN_TO_SCAN_NAME	"min_to_scan"
@@ -2972,17 +3046,13 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c
 +
 +int ext3_mb_init_per_dev_proc(struct super_block *sb)
 +{
-+	mode_t mode = S_IFREG | S_IRUGO | S_IWUSR;
 +	struct ext3_sb_info *sbi = EXT3_SB(sb);
++	mode_t mode = S_IFREG | S_IRUGO | S_IWUSR;
 +	struct proc_dir_entry *proc;
-+	char devname[64], *name;
-+
-+	snprintf(devname, sizeof(devname) - 1, "%s",
-+		bdevname(sb->s_bdev, devname));
-+	sbi->s_mb_proc = proc_mkdir(devname, proc_root_ext3);
++	char *name;
 +
 +	name = EXT3_MB_STATS_NAME;
-+	proc = create_proc_entry(name, mode, sbi->s_mb_proc);
++	proc = create_proc_entry(name, mode, sbi->s_dev_proc);
 +	if (proc == NULL)
 +		goto err_out;
 +	proc->data = sbi;
@@ -2990,7 +3060,7 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c
 +	proc->write_proc = ext3_mb_stats_write;
 +
 +	name = EXT3_MB_MAX_TO_SCAN_NAME;
-+	proc = create_proc_entry(name, mode, sbi->s_mb_proc);
++	proc = create_proc_entry(name, mode, sbi->s_dev_proc);
 +	if (proc == NULL)
 +		goto err_out;
 +	proc->data = sbi;
@@ -2998,7 +3068,7 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c
 +	proc->write_proc = ext3_mb_max_to_scan_write;
 +
 +	name = EXT3_MB_MIN_TO_SCAN_NAME;
-+	proc = create_proc_entry(name, mode, sbi->s_mb_proc);
++	proc = create_proc_entry(name, mode, sbi->s_dev_proc);
 +	if (proc == NULL)
 +		goto err_out;
 +	proc->data = sbi;
@@ -3006,7 +3076,7 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c
 +	proc->write_proc = ext3_mb_min_to_scan_write;
 +
 +	name = EXT3_MB_ORDER2_REQ;
-+	proc = create_proc_entry(name, mode, sbi->s_mb_proc);
++	proc = create_proc_entry(name, mode, sbi->s_dev_proc);
 +	if (proc == NULL)
 +		goto err_out;
 +	proc->data = sbi;
@@ -3014,7 +3084,7 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c
 +	proc->write_proc = ext3_mb_order2_req_write;
 +
 +	name = EXT3_MB_STREAM_REQ;
-+	proc = create_proc_entry(name, mode, sbi->s_mb_proc);
++	proc = create_proc_entry(name, mode, sbi->s_dev_proc);
 +	if (proc == NULL)
 +		goto err_out;
 +	proc->data = sbi;
@@ -3025,13 +3095,11 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c
 +
 +err_out:
 +	printk(KERN_ERR "EXT3-fs: Unable to create %s\n", name);
-+	remove_proc_entry(EXT3_MB_STREAM_REQ, sbi->s_mb_proc);
-+	remove_proc_entry(EXT3_MB_ORDER2_REQ, sbi->s_mb_proc);
-+	remove_proc_entry(EXT3_MB_MIN_TO_SCAN_NAME, sbi->s_mb_proc);
-+	remove_proc_entry(EXT3_MB_MAX_TO_SCAN_NAME, sbi->s_mb_proc);
-+	remove_proc_entry(EXT3_MB_STATS_NAME, sbi->s_mb_proc);
-+	remove_proc_entry(devname, proc_root_ext3);
-+	sbi->s_mb_proc = NULL;
++	remove_proc_entry(EXT3_MB_STREAM_REQ, sbi->s_dev_proc);
++	remove_proc_entry(EXT3_MB_ORDER2_REQ, sbi->s_dev_proc);
++	remove_proc_entry(EXT3_MB_MIN_TO_SCAN_NAME, sbi->s_dev_proc);
++	remove_proc_entry(EXT3_MB_MAX_TO_SCAN_NAME, sbi->s_dev_proc);
++	remove_proc_entry(EXT3_MB_STATS_NAME, sbi->s_dev_proc);
 +
 +	return -ENOMEM;
 +}
@@ -3039,24 +3107,20 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c
 +int ext3_mb_destroy_per_dev_proc(struct super_block *sb)
 +{
 +	struct ext3_sb_info *sbi = EXT3_SB(sb);
-+	char devname[64];
 +
-+	if (sbi->s_mb_proc == NULL)
++	if (sbi->s_dev_proc == NULL)
 +		return -EINVAL;
 +
-+	snprintf(devname, sizeof(devname) - 1, "%s",
-+		bdevname(sb->s_bdev, devname));
-+	remove_proc_entry(EXT3_MB_STREAM_REQ, sbi->s_mb_proc);
-+	remove_proc_entry(EXT3_MB_ORDER2_REQ, sbi->s_mb_proc);
-+	remove_proc_entry(EXT3_MB_MIN_TO_SCAN_NAME, sbi->s_mb_proc);
-+	remove_proc_entry(EXT3_MB_MAX_TO_SCAN_NAME, sbi->s_mb_proc);
-+	remove_proc_entry(EXT3_MB_STATS_NAME, sbi->s_mb_proc);
-+	remove_proc_entry(devname, proc_root_ext3);
++	remove_proc_entry(EXT3_MB_STREAM_REQ, sbi->s_dev_proc);
++	remove_proc_entry(EXT3_MB_ORDER2_REQ, sbi->s_dev_proc);
++	remove_proc_entry(EXT3_MB_MIN_TO_SCAN_NAME, sbi->s_dev_proc);
++	remove_proc_entry(EXT3_MB_MAX_TO_SCAN_NAME, sbi->s_dev_proc);
++	remove_proc_entry(EXT3_MB_STATS_NAME, sbi->s_dev_proc);
 +
 +	return 0;
 +}
 +
-+int __init init_ext3_proc(void)
++int __init init_ext3_mb_proc(void)
 +{
 +	ext3_pspace_cachep =
 +		kmem_cache_create("ext3_prealloc_space",
@@ -3065,18 +3129,13 @@ Index: linux-2.6.9-full/fs/ext3/mballoc.c
 +	if (ext3_pspace_cachep == NULL)
 +		return -ENOMEM;
 +
-+	proc_root_ext3 = proc_mkdir(EXT3_ROOT, proc_root_fs);
-+	if (proc_root_ext3 == NULL)
-+		printk(KERN_ERR "EXT3-fs: Unable to create %s\n", EXT3_ROOT);
-+
 +	return 0;
 +}
 +
-+void exit_ext3_proc(void)
++void exit_ext3_mb_proc(void)
 +{
 +	/* XXX: synchronize_rcu(); */
 +	kmem_cache_destroy(ext3_pspace_cachep);
-+	remove_proc_entry(EXT3_ROOT, proc_root_fs);
 +}
 +
 +
diff --git a/ldiskfs/kernel_patches/patches/ext3-mmp-2.6-rhel4.patch b/ldiskfs/kernel_patches/patches/ext3-mmp-2.6-rhel4.patch
index 3a86d41a42865ef77be0aecc2fdc433fa7c56434..ea3b19ab7d01e2b26420077b82a7b07be121b3bb 100644
--- a/ldiskfs/kernel_patches/patches/ext3-mmp-2.6-rhel4.patch
+++ b/ldiskfs/kernel_patches/patches/ext3-mmp-2.6-rhel4.patch
@@ -18,10 +18,10 @@ Index: linux-2.6.9/fs/ext3/super.c
 +	if (sbi->s_mmp_tsk)
 +		kthread_stop(sbi->s_mmp_tsk);
 +
+ 	remove_proc_entry(sb->s_id, proc_root_ext3);
+ 	sbi->s_dev_proc = NULL;
  	sb->s_fs_info = NULL;
- 	kfree(sbi);
- 	return;
-@@ -1431,6 +1436,314 @@ static unsigned long descriptor_loc(stru
+@@ -1439,6 +1444,314 @@ static unsigned long descriptor_loc(stru
  	return (first_data_block + has_super + (bg * sbi->s_blocks_per_group));
  }
  
diff --git a/ldiskfs/kernel_patches/patches/ext3-mmp-2.6-sles10.patch b/ldiskfs/kernel_patches/patches/ext3-mmp-2.6-sles10.patch
index c9637f6da0739e0b4c96e1da34d6dd9e91e3c651..04635f5de21bb8e88c42c9dbb5a455b76900f10f 100644
--- a/ldiskfs/kernel_patches/patches/ext3-mmp-2.6-sles10.patch
+++ b/ldiskfs/kernel_patches/patches/ext3-mmp-2.6-sles10.patch
@@ -18,10 +18,10 @@ Index: linux-2.6.16.46-0.14/fs/ext3/super.c
 +	if (sbi->s_mmp_tsk)
 +		kthread_stop(sbi->s_mmp_tsk);
 +
+ 	remove_proc_entry(sb->s_id, proc_root_ext3);
+ 	sbi->s_dev_proc = NULL;
  	sb->s_fs_info = NULL;
- 	kfree(sbi);
- 	return;
-@@ -1521,6 +1526,313 @@ static unsigned long descriptor_loc(stru
+@@ -1529,6 +1534,313 @@ static unsigned long descriptor_loc(stru
  	return (first_data_block + has_super + (bg * sbi->s_blocks_per_group));
  }
  
diff --git a/ldiskfs/kernel_patches/patches/ext3-mmp-2.6.18-vanilla.patch b/ldiskfs/kernel_patches/patches/ext3-mmp-2.6.18-vanilla.patch
index b7c4a1c95207daf10c85325878166fecb3b610b0..26f86b8c959f035577c9ff7e591f604c7a5c6a30 100644
--- a/ldiskfs/kernel_patches/patches/ext3-mmp-2.6.18-vanilla.patch
+++ b/ldiskfs/kernel_patches/patches/ext3-mmp-2.6.18-vanilla.patch
@@ -18,10 +18,10 @@ Index: linux-2.6.18/fs/ext3/super.c
 +	if (sbi->s_mmp_tsk)
 +		kthread_stop(sbi->s_mmp_tsk);
 +
+ 	remove_proc_entry(sb->s_id, proc_root_ext3);
+ 	sbi->s_dev_proc = NULL;
  	sb->s_fs_info = NULL;
- 	kfree(sbi);
- 	return;
-@@ -1528,6 +1533,313 @@ static ext3_fsblk_t descriptor_loc(struc
+@@ -1536,6 +1541,313 @@ static ext3_fsblk_t descriptor_loc(struc
  	return (has_super + ext3_group_first_block_no(sb, bg));
  }
  
diff --git a/ldiskfs/kernel_patches/patches/ext3-mmp-2.6.22-vanilla.patch b/ldiskfs/kernel_patches/patches/ext3-mmp-2.6.22-vanilla.patch
index afb34e100d85c1f4f4365253b1b9950889c46955..c7fd5f69c060175e8336d8380db2ff4164f94a12 100644
--- a/ldiskfs/kernel_patches/patches/ext3-mmp-2.6.22-vanilla.patch
+++ b/ldiskfs/kernel_patches/patches/ext3-mmp-2.6.22-vanilla.patch
@@ -18,10 +18,10 @@ Index: linux-2.6.18/fs/ext3/super.c
 +	if (sbi->s_mmp_tsk)
 +		kthread_stop(sbi->s_mmp_tsk);
 +
+ 	remove_proc_entry(sb->s_id, proc_root_ext3);
+ 	sbi->s_dev_proc = NULL;
  	sb->s_fs_info = NULL;
- 	kfree(sbi);
- 	return;
-@@ -1528,6 +1533,313 @@ static ext3_fsblk_t descriptor_loc(struc
+@@ -1536,6 +1541,313 @@ static ext3_fsblk_t descriptor_loc(struc
  	return (has_super + ext3_group_first_block_no(sb, bg));
  }
  
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel4.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel4.series
index de9e3e3b9d0088c37cf6d8e87d8f6eeb99f22c1d..3d46e12636533b74355bc4099f054333ae6a6242 100644
--- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel4.series
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel4.series
@@ -23,3 +23,4 @@ ext3-unlink-race.patch
 ext3-mmp-2.6-rhel4.patch
 ext3-fiemap-2.6-sles10.patch
 ext3-external-journal-2.6.9.patch
+ext3-max-dir-size.patch
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series
index 48c08132c6771e54957365a2a18fcfe1530528df..27ce713a323b6b974baaebfef904a394a6f779f1 100644
--- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-rhel5.series
@@ -19,3 +19,4 @@ ext3-unlink-race.patch
 ext3-fiemap-2.6.18-vanilla.patch
 ext3-statfs-2.6-rhel5.patch
 ext3-lookup-dotdot-2.6.9.patch
+ext3-max-dir-size.patch
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-sles10.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-sles10.series
index 32a431c396ab52f5f37b4626fcbbbdf7f9c26ff6..faf21966daae739b7618662e8bf4d8307d09350c 100644
--- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-sles10.series
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-sles10.series
@@ -23,3 +23,4 @@ ext3-mmp-2.6-sles10.patch
 ext3-fiemap-2.6-sles10.patch
 ext3-statfs-2.6-sles10.patch
 ext3-lookup-dotdot-2.6.9.patch
+ext3-max-dir-size.patch
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series
index 2b89fb422e80ab13543c24cbfc4d3624541e2929..b1e5ee803d497108eb894cfa55cbdabb0dfabd8d 100644
--- a/ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6-suse.series
@@ -22,3 +22,4 @@ ext3-uninit-2.6-suse.patch
 ext3-nanosecond-2.6-suse.patch
 ext3-fiemap-stub-suse.patch
 ext3-external-journal-2.6.5.patch
+ext3-max-dir-size.patch
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6.18-vanilla.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6.18-vanilla.series
index 4b1cdf5f4d62f5c589e15eb8ab2d6727c1dd3f87..2af174b3ab4462bf319807f46afe0697a3d9ccc4 100644
--- a/ldiskfs/kernel_patches/series/ldiskfs-2.6.18-vanilla.series
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6.18-vanilla.series
@@ -19,3 +19,4 @@ ext3-mmp-2.6.18-vanilla.patch
 ext3-handle-directory-corruption-better.patch
 ext3-fiemap-2.6.18-vanilla.patch
 ext3-lookup-dotdot-2.6.9.patch
+ext3-max-dir-size.patch
diff --git a/ldiskfs/kernel_patches/series/ldiskfs-2.6.22-vanilla.series b/ldiskfs/kernel_patches/series/ldiskfs-2.6.22-vanilla.series
index 4ab651d5be5c827fa3e0905d9cf6fe3194b0763a..e256a9861e9b1fbb8f3f5af9ed659319a2ceb97b 100644
--- a/ldiskfs/kernel_patches/series/ldiskfs-2.6.22-vanilla.series
+++ b/ldiskfs/kernel_patches/series/ldiskfs-2.6.22-vanilla.series
@@ -20,3 +20,4 @@ ext3-statfs-2.6.22.patch
 ext3-lookup-dotdot-2.6.9.patch
 ext3-unlink-race.patch
 ext3-export-journal-api.patch
+ext3-max-dir-size.patch