Whamcloud - gitweb
b=22514 kernel update for rhel5.5 & oel5.5.
[fs/lustre-release.git] / ldiskfs / kernel_patches / patches / ext4-max-dir-size-rhel5.patch
index bbf2ba8..7c3933c 100644 (file)
@@ -1,7 +1,7 @@
 diff -rupN linux-2.6.18-164.6.1_1//fs/ext4/ialloc.c linux-2.6.18-164.6.1_2//fs/ext4/ialloc.c
 --- linux-2.6.18-164.6.1_1//fs/ext4/ialloc.c   2010-03-31 17:42:50.000000000 +0530
 +++ linux-2.6.18-164.6.1_2//fs/ext4/ialloc.c   2010-03-31 17:43:22.000000000 +0530
-@@ -710,12 +710,15 @@ struct inode *ext4_new_inode_goal(handle
+@@ -622,11 +622,14 @@ struct inode *ext4_new_inode_goal(handle
        sb = dir->i_sb;
        trace_mark(ext4_request_inode, "dev %s dir %lu mode %d", sb->s_id,
                   dir->i_ino, mode);
@@ -13,110 +13,32 @@ diff -rupN linux-2.6.18-164.6.1_1//fs/ext4/ialloc.c linux-2.6.18-164.6.1_2//fs/e
        if (!inode)
                return ERR_PTR(-ENOMEM);
        ei = EXT4_I(inode);
 -      sbi = EXT4_SB(sb);
-       es = sbi->s_es;
  
-       if (goal && goal <= le32_to_cpu(es->s_inodes_count)) {
+       if (goal)
+               goal = sbi->s_inode_goal;
 diff -rupN linux-2.6.18-164.6.1_1//fs/ext4/super.c linux-2.6.18-164.6.1_2//fs/ext4/super.c
 --- linux-2.6.18-164.6.1_1//fs/ext4/super.c    2010-03-31 17:42:50.000000000 +0530
 +++ linux-2.6.18-164.6.1_2//fs/ext4/super.c    2010-03-31 17:45:32.000000000 +0530
 @@ -40,6 +40,7 @@
- #include <asm/uaccess.h>
- #include <linux/kthread.h>
- #include <linux/utsname.h>
-+#include <linux/proc_fs.h>
- #include "ext4.h"
- #include "ext4_jbd2.h"
-@@ -581,6 +582,7 @@ static void ext4_put_super(struct super_
-               ext4_commit_super(sb, es, 1);
-       }
-       if (sbi->s_proc) {
-+              remove_proc_entry(EXT4_MAX_DIR_SIZE_NAME, sbi->s_proc);
-               remove_proc_entry("inode_readahead_blks", sbi->s_proc);
-               remove_proc_entry("inode_goal", sbi->s_proc);
-               remove_proc_entry(sb->s_id, ext4_proc_root);
-@@ -2341,6 +2343,48 @@ static unsigned long ext4_get_stripe_siz
-       return 0;
- }
+ EXT4_RW_ATTR_SBI_UI(mb_order2_req, s_mb_order2_reqs);
+ EXT4_RW_ATTR_SBI_UI(mb_stream_req, s_mb_stream_request);
+ EXT4_RW_ATTR_SBI_UI(mb_group_prealloc, s_mb_group_prealloc);
++EXT4_RW_ATTR_SBI_UI(max_dir_size, s_max_dir_size);
+ static struct attribute *ext4_attrs[] = {
+       ATTR_LIST(delayed_allocation_blocks),
+@@ -48,6 +48,7 @@
+       ATTR_LIST(mb_order2_req),
+       ATTR_LIST(mb_stream_req),
+       ATTR_LIST(mb_group_prealloc),
++      ATTR_LIST(max_dir_size),
+       NULL,
+ };
  
-+#ifdef CONFIG_PROC_FS
-+static int ext4_max_dir_size_read(char *page, char **start, off_t off,
-+                                  int count, int *eof, void *data)
-+{
-+      struct ext4_sb_info *sbi = data;
-+      int len;
-+
-+      *eof = 1;
-+      if (off != 0)
-+              return 0;
-+
-+      len = sprintf(page, "%lu\n", sbi->s_max_dir_size);
-+      *start = page;
-+      return len;
-+}
-+
-+static int ext4_max_dir_size_write(struct file *file, const char *buffer,
-+                                   unsigned long count, void *data)
-+{
-+      struct ext4_sb_info *sbi = data;
-+      char str[32];
-+      unsigned long value;
-+      char *end;
-+
-+      if (count >= sizeof(str)) {
-+              printk(KERN_ERR "EXT4-fs: %s string too long, max %u bytes\n",
-+                     EXT4_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;
-+
-+      sbi->s_max_dir_size = value;
-+      return count;
-+}
-+#endif
-+
- static int ext4_fill_super(struct super_block *sb, void *data, int silent)
-                               __releases(kernel_lock)
-                               __acquires(kernel_lock)
-@@ -2690,6 +2734,19 @@ static int ext4_fill_super(struct super_
-                       p->proc_fops = &ext4_ui_proc_fops,
-                       p->data = &sbi->s_inode_goal;
-               }
-+              sbi->s_max_dir_size = EXT4_DEFAULT_MAX_DIR_SIZE;
-+              p = create_proc_entry(EXT4_MAX_DIR_SIZE_NAME,
-+                                    S_IFREG | S_IRUGO | S_IWUSR, sbi->s_proc);
-+              if (p == NULL) {
-+                      printk(KERN_ERR "EXT4-fs: unable to create %s\n",
-+                             EXT4_MAX_DIR_SIZE_NAME);
-+                      ret = -ENOMEM;
-+                      goto failed_mount;
-+              }
-+              p->data = sbi;
-+              p->read_proc = ext4_max_dir_size_read;
-+              p->write_proc = ext4_max_dir_size_write;
-+
-       }
- #endif
-@@ -2976,6 +3033,7 @@ failed_mount2:
-       kfree(sbi->s_group_desc);
- failed_mount:
-       if (sbi->s_proc) {
-+              remove_proc_entry(EXT4_MAX_DIR_SIZE_NAME, sbi->s_proc);
-               remove_proc_entry("inode_readahead_blks", sbi->s_proc);
-               remove_proc_entry("inode_goal", sbi->s_proc);
-               remove_proc_entry(sb->s_id, ext4_proc_root);
 diff -rupN linux-2.6.18-164.6.1_1//fs/ext4/ext4_sb.h linux-2.6.18-164.6.1_2//fs/ext4/ext4_sb.h
---- linux-2.6.18-164.6.1_1//fs/ext4/ext4_sb.h  2010-03-31 17:42:50.000000000 +0530
-+++ linux-2.6.18-164.6.1_2//fs/ext4/ext4_sb.h  2010-03-31 17:43:22.000000000 +0530
+--- linux-2.6.18-164.6.1_1//fs/ext4/ext4.h     2010-03-31 17:42:50.000000000 +0530
++++ linux-2.6.18-164.6.1_2//fs/ext4/ext4.h     2010-03-31 17:43:22.000000000 +0530
 @@ -119,6 +119,7 @@ struct ext4_sb_info {
        /* where last allocation was done - for stream allocation */
        unsigned long s_mb_last_group;
@@ -125,20 +47,3 @@ diff -rupN linux-2.6.18-164.6.1_1//fs/ext4/ext4_sb.h linux-2.6.18-164.6.1_2//fs/
  
        /* history to debug policy */
        struct ext4_mb_history *s_mb_history;
-diff -rupN linux-2.6.18-164.6.1_1//fs/ext4/ext4.h linux-2.6.18-164.6.1_2//fs/ext4/ext4.h
---- linux-2.6.18-164.6.1_1//fs/ext4/ext4.h     2010-03-31 17:42:50.000000000 +0530
-+++ linux-2.6.18-164.6.1_2//fs/ext4/ext4.h     2010-03-31 17:43:22.000000000 +0530
-@@ -1029,6 +1029,12 @@ struct mmp_struct {
- #define EXT4_MMP_MIN_CHECK_INTERVAL   5
- /*
-+ * max directory size tunable
-+ */
-+#define EXT4_DEFAULT_MAX_DIR_SIZE     0
-+#define EXT4_MAX_DIR_SIZE_NAME                "max_dir_size"
-+
-+/*
-  * Function prototypes
-  */
-