Re: ext3 warnings from LTP rename14

2007-10-18 Thread Andreas Dilger
On Oct 16, 2007  21:17 -0500, Eric Sandeen wrote:
 Eric Sandeen wrote:
  Martin Habets wrote:
  I ran the ltp-full-20070930 tests on 2.6.23-rc9-mph4 (sparc32 SMP), and am
  seeing the following warnings:
  
  This makes me a little nervous about my change
  ef2b02d3e617cb0400eedf2668f86215e1b0e6af
  (ext34: ensure do_split leaves enough free space in both blocks)
  
  Do you know when this first showed up?  Could you test -rc6?
  
  You say you can reproduce it; have you checked (fsck'd) the filesystem
  in between, and is it in good shape?
  
  -Eric
 
 FWIW, I ran rename14 standalone a few times on 2.6.23.1 with no
 problems...
 
 [EMAIL PROTECTED] ltp-full-20070930]#
 ./testcases/kernel/syscalls/rename/rename14
 rename141  PASS  :  Test Passed
 [EMAIL PROTECTED] ltp-full-20070930]#
 ./testcases/kernel/syscalls/rename/rename14
 rename141  PASS  :  Test Passed
 [EMAIL PROTECTED] ltp-full-20070930]#
 ./testcases/kernel/syscalls/rename/rename14
 rename141  PASS  :  Test Passed
 [EMAIL PROTECTED] ~]# uname -a
 Linux bear-05.lab.msp.redhat.com 2.6.23.1 #1 SMP Mon Oct 15 15:28:08 CDT
 2007 i686 athlon i386 GNU/Linux

It is probably significant that the original machine is a sparc32 (big
endian).  I'd suspect you can reproduce this on a PPC system also.  You
might also consider running sparse on it ext3/ext4 in case you missed an
le32_to_cpu() or something.

Cheers, Andreas
--
Andreas Dilger
Principal Software Engineer
Cluster File Systems, Inc.

-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


How Inactive may be much greather than cached?

2007-10-18 Thread Vasily Averin
Hi all,

could anybody explain how inactive may be much greater than cached?
stress test (http://weather.ou.edu/~apw/projects/stress/) that writes into
removed files in cycle puts the node to the following state:

MemTotal: 16401648 kB
MemFree: 636644 kB
Buffers: 1122556 kB
Cached: 362880 kB
SwapCached: 700 kB
Active: 1604180 kB
Inactive: 13609828 kB

At the first glance memory should be freed on file closing, nobody refers to
file and ext3_delete_inode() truncates inode. We can see that memory is go away
from cached, however could somebody explain why it become invalid instead be
freed? Who holds the references to these pages?

thank you,
Vasily Averin
-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: How Inactive may be much greather than cached?

2007-10-18 Thread Nick Piggin
Hi,

On Thursday 18 October 2007 16:24, Vasily Averin wrote:
 Hi all,

 could anybody explain how inactive may be much greater than cached?
 stress test (http://weather.ou.edu/~apw/projects/stress/) that writes into
 removed files in cycle puts the node to the following state:

 MemTotal: 16401648 kB
 MemFree: 636644 kB
 Buffers: 1122556 kB
 Cached: 362880 kB
 SwapCached: 700 kB
 Active: 1604180 kB
 Inactive: 13609828 kB

 At the first glance memory should be freed on file closing, nobody refers
 to file and ext3_delete_inode() truncates inode. We can see that memory is
 go away from cached, however could somebody explain why it become
 invalid instead be freed? Who holds the references to these pages?

Buffers, swap cache, and anonymous.
-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [GIT PULL] ext4 update

2007-10-18 Thread Andreas Dilger
On Oct 16, 2007  21:51 -0700, [EMAIL PROTECTED] wrote:
 On Wed, 17 Oct 2007, Theodore Ts'o wrote:
 It has a number random cleanups and bug fixes, and two new features.
 The first is uninitialized block groups, which allows fast mke2fs
 operations plus as well as speeding up e2fsck by allowing it to skip
 parts of the inode tables that haven't been used yet.
 
 nice feature, is there any work on a tool to go through a well-used 
 filesystem and mark unused block groups as uninitialized? (I would guess 
 that such a tool may want to move files to make this so)

Yes, just set the feature flag via tune2fs and then run e2fsck on it.
The second e2fsck shown below is just a demonstration of the speedup.

# tune2fs -O uninit_groups /dev/foo
tune2fs 1.39.cfs9 (7-Apr-2007)

Please run e2fsck on the filesystem.

# time e2fsck -fy /dev/foo
e2fsck 1.39.cfs9 (7-Apr-2007)
Group descriptor 0 checksum is invalid.  Fix? yes

{repeats for all groups}

Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
lustre-OST: 9099/1640160 files (0.4% non-contiguous), 221996/6554520
blocks

real0m17.273s
user0m4.930s
sys 0m1.749s

# time e2fsck -fy /dev/hda3
e2fsck 1.39.cfs9 (7-Apr-2007)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
lustre-OST: 9099/1640160 files (0.4% non-contiguous), 221996/6554520
blocks

real0m2.412s
user0m0.604s
sys 0m0.077s


The caveats are:
(a) this is a read-only feature, so you can't mount such a filesystem r/w
on an older kernel.  You can disable it with tune2fs -O ^uninit_groups
and run a full e2fsck on it again.
(b) I don't think there is an official e2fsprogs release with support for this
feature yet (it's in the pipe, however).
(c) The actual speedup depends on how full the filesystem is, but since ext*
usually has way too many inodes, it is generally pretty good.

Cheers, Andreas
--
Andreas Dilger
Principal Software Engineer
Cluster File Systems, Inc.

-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: How Inactive may be much greather than cached?

2007-10-18 Thread Vasily Averin
Nick Piggin wrote:
 Hi,
 
 On Thursday 18 October 2007 16:24, Vasily Averin wrote:
 Hi all,

 could anybody explain how inactive may be much greater than cached?
 stress test (http://weather.ou.edu/~apw/projects/stress/) that writes into
 removed files in cycle puts the node to the following state:

 MemTotal: 16401648 kB
 MemFree: 636644 kB
 Buffers: 1122556 kB
 Cached: 362880 kB
 SwapCached: 700 kB
 Active: 1604180 kB
 Inactive: 13609828 kB

 At the first glance memory should be freed on file closing, nobody refers
 to file and ext3_delete_inode() truncates inode. We can see that memory is
 go away from cached, however could somebody explain why it become
 invalid instead be freed? Who holds the references to these pages?
 
 Buffers, swap cache, and anonymous.

But buffers and swap cache are low (1.1 Gb and 700kB in this example) and
anonymous should go away when process finished.



-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


- ext3-remove-ifdef-config_ext3_index.patch removed from -mm tree

2007-10-18 Thread akpm

The patch titled
 ext3: remove #ifdef CONFIG_EXT3_INDEX
has been removed from the -mm tree.  Its filename was
 ext3-remove-ifdef-config_ext3_index.patch

This patch was dropped because it was merged into mainline or a subsystem tree

--
Subject: ext3: remove #ifdef CONFIG_EXT3_INDEX
From: Eric Sandeen [EMAIL PROTECTED]

CONFIG_EXT3_INDEX is not an exposed config option in the kernel, and it is
unconditionally defined in ext3_fs.h.  tune2fs is already able to turn off
dir indexing, so at this point it's just cluttering up the code.  Remove
it.

Signed-off-by: Eric Sandeen [EMAIL PROTECTED]
Cc: linux-ext4@vger.kernel.org
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 fs/ext3/dir.c   |7 ---
 fs/ext3/namei.c |   19 ---
 include/linux/ext3_fs.h |   14 ++
 3 files changed, 2 insertions(+), 38 deletions(-)

diff -puN fs/ext3/dir.c~ext3-remove-ifdef-config_ext3_index fs/ext3/dir.c
--- a/fs/ext3/dir.c~ext3-remove-ifdef-config_ext3_index
+++ a/fs/ext3/dir.c
@@ -47,9 +47,7 @@ const struct file_operations ext3_dir_op
.compat_ioctl   = ext3_compat_ioctl,
 #endif
.fsync  = ext3_sync_file,   /* BKL held */
-#ifdef CONFIG_EXT3_INDEX
.release= ext3_release_dir,
-#endif
 };
 
 
@@ -107,7 +105,6 @@ static int ext3_readdir(struct file * fi
 
sb = inode-i_sb;
 
-#ifdef CONFIG_EXT3_INDEX
if (EXT3_HAS_COMPAT_FEATURE(inode-i_sb,
EXT3_FEATURE_COMPAT_DIR_INDEX) 
((EXT3_I(inode)-i_flags  EXT3_INDEX_FL) ||
@@ -123,7 +120,6 @@ static int ext3_readdir(struct file * fi
 */
EXT3_I(filp-f_path.dentry-d_inode)-i_flags = ~EXT3_INDEX_FL;
}
-#endif
stored = 0;
offset = filp-f_pos  (sb-s_blocksize - 1);
 
@@ -232,7 +228,6 @@ out:
return ret;
 }
 
-#ifdef CONFIG_EXT3_INDEX
 /*
  * These functions convert from the major/minor hash to an f_pos
  * value.
@@ -518,5 +513,3 @@ static int ext3_release_dir (struct inod
 
return 0;
 }
-
-#endif
diff -puN fs/ext3/namei.c~ext3-remove-ifdef-config_ext3_index fs/ext3/namei.c
--- a/fs/ext3/namei.c~ext3-remove-ifdef-config_ext3_index
+++ a/fs/ext3/namei.c
@@ -144,7 +144,6 @@ struct dx_map_entry
u16 size;
 };
 
-#ifdef CONFIG_EXT3_INDEX
 static inline unsigned dx_get_block (struct dx_entry *entry);
 static void dx_set_block (struct dx_entry *entry, unsigned value);
 static inline unsigned dx_get_hash (struct dx_entry *entry);
@@ -768,8 +767,6 @@ static void dx_insert_block(struct dx_fr
dx_set_block(new, block);
dx_set_count(entries, count + 1);
 }
-#endif
-
 
 static void ext3_update_dx_flag(struct inode *inode)
 {
@@ -871,7 +868,6 @@ static struct buffer_head * ext3_find_en
name = dentry-d_name.name;
if (namelen  EXT3_NAME_LEN)
return NULL;
-#ifdef CONFIG_EXT3_INDEX
if (is_dx(dir)) {
bh = ext3_dx_find_entry(dentry, res_dir, err);
/*
@@ -883,7 +879,6 @@ static struct buffer_head * ext3_find_en
return bh;
dxtrace(printk(ext3_find_entry: dx failed, falling back\n));
}
-#endif
nblocks = dir-i_size  EXT3_BLOCK_SIZE_BITS(sb);
start = EXT3_I(dir)-i_dir_start_lookup;
if (start = nblocks)
@@ -959,7 +954,6 @@ cleanup_and_exit:
return ret;
 }
 
-#ifdef CONFIG_EXT3_INDEX
 static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
   struct ext3_dir_entry_2 **res_dir, int *err)
 {
@@ -1027,7 +1021,6 @@ errout:
dx_release (frames);
return NULL;
 }
-#endif
 
 static struct dentry *ext3_lookup(struct inode * dir, struct dentry *dentry, 
struct nameidata *nd)
 {
@@ -1123,7 +1116,6 @@ static inline void ext3_set_de_type(stru
de-file_type = ext3_type_by_mode[(mode  S_IFMT)S_SHIFT];
 }
 
-#ifdef CONFIG_EXT3_INDEX
 /*
  * Move count entries from end of map between two memory locations.
  * Returns pointer to last entry moved.
@@ -1268,7 +1260,6 @@ errout:
*error = err;
return NULL;
 }
-#endif
 
 
 /*
@@ -1366,7 +1357,6 @@ static int add_dirent_to_buf(handle_t *h
return 0;
 }
 
-#ifdef CONFIG_EXT3_INDEX
 /*
  * This converts a one block unindexed directory to a 3 block indexed
  * directory, and adds the dentry to the indexed directory.
@@ -1445,7 +1435,6 @@ static int make_indexed_dir(handle_t *ha
 
return add_dirent_to_buf(handle, dentry, inode, de, bh);
 }
-#endif
 
 /*
  * ext3_add_entry()
@@ -1466,9 +1455,7 @@ static int ext3_add_entry (handle_t *han
struct ext3_dir_entry_2 *de;
struct super_block * sb;
int retval;
-#ifdef CONFIG_EXT3_INDEX
int dx_fallback=0;
-#endif
unsigned blocksize;
u32 block, blocks;
 
@@ -1476,7 +1463,6 @@ static int ext3_add_entry (handle_t *han
blocksize = sb-s_blocksize;
  

Re: How Inactive may be much greather than cached?

2007-10-18 Thread Nick Piggin
On Thursday 18 October 2007 17:14, Vasily Averin wrote:
 Nick Piggin wrote:
  Hi,
 
  On Thursday 18 October 2007 16:24, Vasily Averin wrote:
  Hi all,
 
  could anybody explain how inactive may be much greater than cached?
  stress test (http://weather.ou.edu/~apw/projects/stress/) that writes
  into removed files in cycle puts the node to the following state:
 
  MemTotal: 16401648 kB
  MemFree:636644 kB
  Buffers:   1122556 kB
  Cached: 362880 kB
  SwapCached:700 kB
  Active:1604180 kB
  Inactive: 13609828 kB
 
  At the first glance memory should be freed on file closing, nobody
  refers to file and ext3_delete_inode() truncates inode. We can see that
  memory is go away from cached, however could somebody explain why it
  become invalid instead be freed? Who holds the references to these
  pages?
 
  Buffers, swap cache, and anonymous.

 But buffers and swap cache are low (1.1 Gb and 700kB in this example) and
 anonymous should go away when process finished.

Ah, I didn't see it was an order of magnitude out.

Some filesystems, including I believe, ext3 with data=ordered,
can leave orphaned pages around after they have been truncated
out of the pagecache. These pages get left on the LRU and vmscan
reclaims them pretty easily.

Try ext3 data=writeback, or even ext2.
-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


- ext4-show-all-mount-options.patch removed from -mm tree

2007-10-18 Thread akpm

The patch titled
 ext4: show all mount options
has been removed from the -mm tree.  Its filename was
 ext4-show-all-mount-options.patch

This patch was dropped because it was merged into mainline or a subsystem tree

--
Subject: ext4: show all mount options
From: Miklos Szeredi [EMAIL PROTECTED]

Signed-off-by: Miklos Szeredi [EMAIL PROTECTED]
Cc: linux-ext4@vger.kernel.org
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 fs/ext4/super.c|   72 +++
 include/linux/ext4_fs_sb.h |1 
 2 files changed, 73 insertions(+)

diff -puN fs/ext4/super.c~ext4-show-all-mount-options fs/ext4/super.c
--- a/fs/ext4/super.c~ext4-show-all-mount-options
+++ a/fs/ext4/super.c
@@ -596,9 +596,80 @@ static inline void ext4_show_quota_optio
 #endif
 }
 
+/*
+ * Show an option if
+ *  - it's set to a non-default value OR
+ *  - if the per-sb default is different from the global default
+ */
 static int ext4_show_options(struct seq_file *seq, struct vfsmount *vfs)
 {
struct super_block *sb = vfs-mnt_sb;
+   struct ext4_sb_info *sbi = EXT4_SB(sb);
+   struct ext4_super_block *es = sbi-s_es;
+   unsigned long def_mount_opts;
+
+   def_mount_opts = le32_to_cpu(es-s_default_mount_opts);
+
+   if (sbi-s_sb_block != 1)
+   seq_printf(seq, ,sb=%llu, sbi-s_sb_block);
+   if (test_opt(sb, MINIX_DF))
+   seq_puts(seq, ,minixdf);
+   if (test_opt(sb, GRPID))
+   seq_puts(seq, ,grpid);
+   if (!test_opt(sb, GRPID)  (def_mount_opts  EXT4_DEFM_BSDGROUPS))
+   seq_puts(seq, ,nogrpid);
+   if (sbi-s_resuid != EXT4_DEF_RESUID ||
+   le16_to_cpu(es-s_def_resuid) != EXT4_DEF_RESUID) {
+   seq_printf(seq, ,resuid=%u, sbi-s_resuid);
+   }
+   if (sbi-s_resgid != EXT4_DEF_RESGID ||
+   le16_to_cpu(es-s_def_resgid) != EXT4_DEF_RESGID) {
+   seq_printf(seq, ,resgid=%u, sbi-s_resgid);
+   }
+   if (test_opt(sb, ERRORS_CONT)) {
+   int def_errors = le16_to_cpu(es-s_errors);
+
+   if (def_errors == EXT4_ERRORS_PANIC ||
+   def_errors == EXT4_ERRORS_RO) {
+   seq_puts(seq, ,errors=continue);
+   }
+   }
+   if (test_opt(sb, ERRORS_RO))
+   seq_puts(seq, ,errors=remount-ro);
+   if (test_opt(sb, ERRORS_PANIC))
+   seq_puts(seq, ,errors=panic);
+   if (test_opt(sb, NO_UID32))
+   seq_puts(seq, ,nouid32);
+   if (test_opt(sb, DEBUG))
+   seq_puts(seq, ,debug);
+   if (test_opt(sb, OLDALLOC))
+   seq_puts(seq, ,oldalloc);
+#ifdef CONFIG_EXT4_FS_XATTR
+   if (test_opt(sb, XATTR_USER))
+   seq_puts(seq, ,user_xattr);
+   if (!test_opt(sb, XATTR_USER) 
+   (def_mount_opts  EXT4_DEFM_XATTR_USER)) {
+   seq_puts(seq, ,nouser_xattr);
+   }
+#endif
+#ifdef CONFIG_EXT4_FS_POSIX_ACL
+   if (test_opt(sb, POSIX_ACL))
+   seq_puts(seq, ,acl);
+   if (!test_opt(sb, POSIX_ACL)  (def_mount_opts  EXT4_DEFM_ACL))
+   seq_puts(seq, ,noacl);
+#endif
+   if (!test_opt(sb, RESERVATION))
+   seq_puts(seq, ,noreservation);
+   if (sbi-s_commit_interval) {
+   seq_printf(seq, ,commit=%u,
+  (unsigned) (sbi-s_commit_interval / HZ));
+   }
+   if (test_opt(sb, BARRIER))
+   seq_puts(seq, ,barrier=1);
+   if (test_opt(sb, NOBH))
+   seq_puts(seq, ,nobh);
+   if (!test_opt(sb, EXTENTS))
+   seq_puts(seq, ,noextents);
 
if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)
seq_puts(seq, ,data=journal);
@@ -1486,6 +1557,7 @@ static int ext4_fill_super (struct super
sbi-s_mount_opt = 0;
sbi-s_resuid = EXT4_DEF_RESUID;
sbi-s_resgid = EXT4_DEF_RESGID;
+   sbi-s_sb_block = sb_block;
 
unlock_kernel();
 
diff -puN include/linux/ext4_fs_sb.h~ext4-show-all-mount-options 
include/linux/ext4_fs_sb.h
--- a/include/linux/ext4_fs_sb.h~ext4-show-all-mount-options
+++ a/include/linux/ext4_fs_sb.h
@@ -45,6 +45,7 @@ struct ext4_sb_info {
struct ext4_super_block * s_es; /* Pointer to the super block in the 
buffer */
struct buffer_head ** s_group_desc;
unsigned long  s_mount_opt;
+   ext4_fsblk_t s_sb_block;
uid_t s_resuid;
gid_t s_resgid;
unsigned short s_mount_state;
_

Patches currently in -mm which might be from [EMAIL PROTECTED] are

origin.patch
unprivileged-mounts-add-user-mounts-to-the-kernel.patch
unprivileged-mounts-allow-unprivileged-umount.patch
unprivileged-mounts-account-user-mounts.patch
unprivileged-mounts-propagate-error-values-from-clone_mnt.patch
unprivileged-mounts-allow-unprivileged-bind-mounts.patch
unprivileged-mounts-put-declaration-of-put_filesystem-in-fsh.patch

- ext2-show-all-mount-options.patch removed from -mm tree

2007-10-18 Thread akpm

The patch titled
 ext2: show all mount options
has been removed from the -mm tree.  Its filename was
 ext2-show-all-mount-options.patch

This patch was dropped because it was merged into mainline or a subsystem tree

--
Subject: ext2: show all mount options
From: Miklos Szeredi [EMAIL PROTECTED]

Using mtab is problematic for various reasons, one of them is that
unprivileged mounts won't turn up in there.  So we want to get rid of it, and
use /proc/mounts instead.

But most filesystems are lazy, and are not showing all mount options.  Which
means, that without mtab, the user won't be able to see some or all of the
options.

It would be nice if the generic code could remember the mount options, and
show them without the need to add extra code to filesystems.  But this is not
easy, because different filesystems handle mount options given options, and
not tough the rest.  This is not taken into account by mount(8) either, so
/etc/mtab will be broken in this case.

This series fixes up -show_options() in ext[234].

Signed-off-by: Miklos Szeredi [EMAIL PROTECTED]
Cc: linux-ext4@vger.kernel.org
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 fs/ext2/super.c|   61 +--
 include/linux/ext2_fs_sb.h |1 
 2 files changed, 60 insertions(+), 2 deletions(-)

diff -puN fs/ext2/super.c~ext2-show-all-mount-options fs/ext2/super.c
--- a/fs/ext2/super.c~ext2-show-all-mount-options
+++ a/fs/ext2/super.c
@@ -203,10 +203,66 @@ static void ext2_clear_inode(struct inod
 
 static int ext2_show_options(struct seq_file *seq, struct vfsmount *vfs)
 {
-   struct ext2_sb_info *sbi = EXT2_SB(vfs-mnt_sb);
+   struct super_block *sb = vfs-mnt_sb;
+   struct ext2_sb_info *sbi = EXT2_SB(sb);
+   struct ext2_super_block *es = sbi-s_es;
+   unsigned long def_mount_opts;
+
+   def_mount_opts = le32_to_cpu(es-s_default_mount_opts);
 
-   if (sbi-s_mount_opt  EXT2_MOUNT_GRPID)
+   if (sbi-s_sb_block != 1)
+   seq_printf(seq, ,sb=%lu, sbi-s_sb_block);
+   if (test_opt(sb, MINIX_DF))
+   seq_puts(seq, ,minixdf);
+   if (test_opt(sb, GRPID))
seq_puts(seq, ,grpid);
+   if (!test_opt(sb, GRPID)  (def_mount_opts  EXT2_DEFM_BSDGROUPS))
+   seq_puts(seq, ,nogrpid);
+   if (sbi-s_resuid != EXT2_DEF_RESUID ||
+   le16_to_cpu(es-s_def_resuid) != EXT2_DEF_RESUID) {
+   seq_printf(seq, ,resuid=%u, sbi-s_resuid);
+   }
+   if (sbi-s_resgid != EXT2_DEF_RESGID ||
+   le16_to_cpu(es-s_def_resgid) != EXT2_DEF_RESGID) {
+   seq_printf(seq, ,resgid=%u, sbi-s_resgid);
+   }
+   if (test_opt(sb, ERRORS_CONT)) {
+   int def_errors = le16_to_cpu(es-s_errors);
+
+   if (def_errors == EXT2_ERRORS_PANIC ||
+   def_errors == EXT2_ERRORS_RO) {
+   seq_puts(seq, ,errors=continue);
+   }
+   }
+   if (test_opt(sb, ERRORS_RO))
+   seq_puts(seq, ,errors=remount-ro);
+   if (test_opt(sb, ERRORS_PANIC))
+   seq_puts(seq, ,errors=panic);
+   if (test_opt(sb, NO_UID32))
+   seq_puts(seq, ,nouid32);
+   if (test_opt(sb, DEBUG))
+   seq_puts(seq, ,debug);
+   if (test_opt(sb, OLDALLOC))
+   seq_puts(seq, ,oldalloc);
+
+#ifdef CONFIG_EXT2_FS_XATTR
+   if (test_opt(sb, XATTR_USER))
+   seq_puts(seq, ,user_xattr);
+   if (!test_opt(sb, XATTR_USER) 
+   (def_mount_opts  EXT2_DEFM_XATTR_USER)) {
+   seq_puts(seq, ,nouser_xattr);
+   }
+#endif
+
+#ifdef CONFIG_EXT2_FS_POSIX_ACL
+   if (test_opt(sb, POSIX_ACL))
+   seq_puts(seq, ,acl);
+   if (!test_opt(sb, POSIX_ACL)  (def_mount_opts  EXT2_DEFM_ACL))
+   seq_puts(seq, ,noacl);
+#endif
+
+   if (test_opt(sb, NOBH))
+   seq_puts(seq, ,nobh);
 
 #if defined(CONFIG_QUOTA)
if (sbi-s_mount_opt  EXT2_MOUNT_USRQUOTA)
@@ -659,6 +715,7 @@ static int ext2_fill_super(struct super_
if (!sbi)
return -ENOMEM;
sb-s_fs_info = sbi;
+   sbi-s_sb_block = sb_block;
 
/*
 * See what the current blocksize for the device is, and
diff -puN include/linux/ext2_fs_sb.h~ext2-show-all-mount-options 
include/linux/ext2_fs_sb.h
--- a/include/linux/ext2_fs_sb.h~ext2-show-all-mount-options
+++ a/include/linux/ext2_fs_sb.h
@@ -39,6 +39,7 @@ struct ext2_sb_info {
struct ext2_super_block * s_es; /* Pointer to the super block in the 
buffer */
struct buffer_head ** s_group_desc;
unsigned long  s_mount_opt;
+   unsigned long s_sb_block;
uid_t s_resuid;
gid_t s_resgid;
unsigned short s_mount_state;
_

Patches currently in -mm which might be from [EMAIL PROTECTED] are

origin.patch
unprivileged-mounts-add-user-mounts-to-the-kernel.patch

- remove-unused-bh-in-calls-to-ext234_get_group_desc.patch removed from -mm tree

2007-10-18 Thread akpm

The patch titled
 remove unused bh in calls to ext234_get_group_desc
has been removed from the -mm tree.  Its filename was
 remove-unused-bh-in-calls-to-ext234_get_group_desc.patch

This patch was dropped because it was merged into mainline or a subsystem tree

--
Subject: remove unused bh in calls to ext234_get_group_desc
From: Eric Sandeen [EMAIL PROTECTED]

ext[234]_get_group_desc never tests the bh argument, and only sets it if it
is passed in; it is perfectly happy with a NULL bh argument.  But, many
callers send one in and never use it.  May as well call with NULL like
other callers who don't use the bh.

Signed-off-by: Eric Sandeen [EMAIL PROTECTED]
Cc: linux-ext4@vger.kernel.org
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 fs/ext2/ialloc.c |   24 
 fs/ext2/inode.c  |2 +-
 fs/ext3/ialloc.c |   17 +++--
 fs/ext4/ialloc.c |   17 +++--
 4 files changed, 23 insertions(+), 37 deletions(-)

diff -puN fs/ext2/ialloc.c~remove-unused-bh-in-calls-to-ext234_get_group_desc 
fs/ext2/ialloc.c
--- a/fs/ext2/ialloc.c~remove-unused-bh-in-calls-to-ext234_get_group_desc
+++ a/fs/ext2/ialloc.c
@@ -177,7 +177,6 @@ static void ext2_preread_inode(struct in
unsigned long block_group;
unsigned long offset;
unsigned long block;
-   struct buffer_head *bh;
struct ext2_group_desc * gdp;
struct backing_dev_info *bdi;
 
@@ -188,7 +187,7 @@ static void ext2_preread_inode(struct in
return;
 
block_group = (inode-i_ino - 1) / EXT2_INODES_PER_GROUP(inode-i_sb);
-   gdp = ext2_get_group_desc(inode-i_sb, block_group, bh);
+   gdp = ext2_get_group_desc(inode-i_sb, block_group, NULL);
if (gdp == NULL)
return;
 
@@ -217,11 +216,10 @@ static int find_group_dir(struct super_b
int ngroups = EXT2_SB(sb)-s_groups_count;
int avefreei = ext2_count_free_inodes(sb) / ngroups;
struct ext2_group_desc *desc, *best_desc = NULL;
-   struct buffer_head *bh, *best_bh = NULL;
int group, best_group = -1;
 
for (group = 0; group  ngroups; group++) {
-   desc = ext2_get_group_desc (sb, group, bh);
+   desc = ext2_get_group_desc (sb, group, NULL);
if (!desc || !desc-bg_free_inodes_count)
continue;
if (le16_to_cpu(desc-bg_free_inodes_count)  avefreei)
@@ -231,7 +229,6 @@ static int find_group_dir(struct super_b
 le16_to_cpu(best_desc-bg_free_blocks_count))) {
best_group = group;
best_desc = desc;
-   best_bh = bh;
}
}
if (!best_desc)
@@ -284,7 +281,6 @@ static int find_group_orlov(struct super
int max_debt, max_dirs, min_blocks, min_inodes;
int group = -1, i;
struct ext2_group_desc *desc;
-   struct buffer_head *bh;
 
freei = percpu_counter_read_positive(sbi-s_freeinodes_counter);
avefreei = freei / ngroups;
@@ -295,7 +291,6 @@ static int find_group_orlov(struct super
if ((parent == sb-s_root-d_inode) ||
(EXT2_I(parent)-i_flags  EXT2_TOPDIR_FL)) {
struct ext2_group_desc *best_desc = NULL;
-   struct buffer_head *best_bh = NULL;
int best_ndir = inodes_per_group;
int best_group = -1;
 
@@ -303,7 +298,7 @@ static int find_group_orlov(struct super
parent_group = (unsigned)group % ngroups;
for (i = 0; i  ngroups; i++) {
group = (parent_group + i) % ngroups;
-   desc = ext2_get_group_desc (sb, group, bh);
+   desc = ext2_get_group_desc (sb, group, NULL);
if (!desc || !desc-bg_free_inodes_count)
continue;
if (le16_to_cpu(desc-bg_used_dirs_count) = best_ndir)
@@ -315,11 +310,9 @@ static int find_group_orlov(struct super
best_group = group;
best_ndir = le16_to_cpu(desc-bg_used_dirs_count);
best_desc = desc;
-   best_bh = bh;
}
if (best_group = 0) {
desc = best_desc;
-   bh = best_bh;
group = best_group;
goto found;
}
@@ -345,7 +338,7 @@ static int find_group_orlov(struct super
 
for (i = 0; i  ngroups; i++) {
group = (parent_group + i) % ngroups;
-   desc = ext2_get_group_desc (sb, group, bh);
+   desc = ext2_get_group_desc (sb, group, NULL);
if (!desc || !desc-bg_free_inodes_count)
continue;
if (sbi-s_debts[group] = max_debt)
@@ -362,7 +355,7 @@ static int find_group_orlov(struct super
 

- fix-f_version-type-should-be-u64-instead-of-unsigned-long.patch removed from -mm tree

2007-10-18 Thread akpm

The patch titled
 Fix f_version type: should be u64 instead of unsigned long
has been removed from the -mm tree.  Its filename was
 fix-f_version-type-should-be-u64-instead-of-unsigned-long.patch

This patch was dropped because it was merged into mainline or a subsystem tree

--
Subject: Fix f_version type: should be u64 instead of unsigned long
From: Mathieu Desnoyers [EMAIL PROTECTED]

Fix f_version type: should be u64 instead of long

There is a type inconsistency between struct inode i_version and struct file
f_version.

fs.h:

struct inode
  u64 i_version;

and

struct file
  unsigned long   f_version;

Users do:

fs/ext3/dir.c:

if (filp-f_version != inode-i_version) {

So why isn't f_version a u64 ? It becomes a problem if versions gets
higher than 2^32 and we are on an architecture where longs are 32 bits.

This patch changes the f_version type to u64, and updates the users accordingly.

It applies to 2.6.23-rc2-mm2.

Signed-off-by: Mathieu Desnoyers [EMAIL PROTECTED]
Cc: Martin Bligh [EMAIL PROTECTED]
Cc: Randy.Dunlap [EMAIL PROTECTED]
Cc: Al Viro [EMAIL PROTECTED]
Cc: linux-ext4@vger.kernel.org
Cc: Mark Fasheh [EMAIL PROTECTED]
Cc: Christoph Hellwig [EMAIL PROTECTED]
Cc: J. Bruce Fields [EMAIL PROTECTED]
Cc: Trond Myklebust [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 fs/ext3/dir.c|2 +-
 fs/ext4/dir.c|2 +-
 fs/ocfs2/dir.c   |   10 +-
 fs/proc/base.c   |4 ++--
 include/linux/fs.h   |2 +-
 include/linux/seq_file.h |2 +-
 6 files changed, 11 insertions(+), 11 deletions(-)

diff -puN 
fs/ext3/dir.c~fix-f_version-type-should-be-u64-instead-of-unsigned-long 
fs/ext3/dir.c
--- a/fs/ext3/dir.c~fix-f_version-type-should-be-u64-instead-of-unsigned-long
+++ a/fs/ext3/dir.c
@@ -210,7 +210,7 @@ revalidate:
 * not the directory has been modified
 * during the copy operation.
 */
-   unsigned long version = filp-f_version;
+   u64 version = filp-f_version;
 
error = filldir(dirent, de-name,
de-name_len,
diff -puN 
fs/ext4/dir.c~fix-f_version-type-should-be-u64-instead-of-unsigned-long 
fs/ext4/dir.c
--- a/fs/ext4/dir.c~fix-f_version-type-should-be-u64-instead-of-unsigned-long
+++ a/fs/ext4/dir.c
@@ -210,7 +210,7 @@ revalidate:
 * not the directory has been modified
 * during the copy operation.
 */
-   unsigned long version = filp-f_version;
+   u64 version = filp-f_version;
 
error = filldir(dirent, de-name,
de-name_len,
diff -puN 
fs/ocfs2/dir.c~fix-f_version-type-should-be-u64-instead-of-unsigned-long 
fs/ocfs2/dir.c
--- a/fs/ocfs2/dir.c~fix-f_version-type-should-be-u64-instead-of-unsigned-long
+++ a/fs/ocfs2/dir.c
@@ -586,7 +586,7 @@ bail:
 }
 
 static int ocfs2_dir_foreach_blk_id(struct inode *inode,
-   unsigned long *f_version,
+   u64 *f_version,
loff_t *f_pos, void *priv,
filldir_t filldir, int *filldir_err)
 {
@@ -648,7 +648,7 @@ revalidate:
 * not the directory has been modified
 * during the copy operation.
 */
-   unsigned long version = *f_version;
+   u64 version = *f_version;
unsigned char d_type = DT_UNKNOWN;
 
if (de-file_type  OCFS2_FT_MAX)
@@ -677,7 +677,7 @@ out:
 }
 
 static int ocfs2_dir_foreach_blk_el(struct inode *inode,
-   unsigned long *f_version,
+   u64 *f_version,
loff_t *f_pos, void *priv,
filldir_t filldir, int *filldir_err)
 {
@@ -798,7 +798,7 @@ out:
return stored;
 }
 
-static int ocfs2_dir_foreach_blk(struct inode *inode, unsigned long *f_version,
+static int ocfs2_dir_foreach_blk(struct inode *inode, u64 *f_version,
 loff_t *f_pos, void *priv, filldir_t filldir,
 int *filldir_err)
 {
@@ -818,7 +818,7 @@ int ocfs2_dir_foreach(struct inode *inod
  filldir_t filldir)
 {
int ret = 0, filldir_err = 0;
-   unsigned long version = inode-i_version;
+   u64 version = inode-i_version;
 
while (*f_pos  i_size_read(inode)) {
ret = ocfs2_dir_foreach_blk(inode, version, f_pos, priv,
diff -puN 

- ext3-show-all-mount-options.patch removed from -mm tree

2007-10-18 Thread akpm

The patch titled
 ext3: show all mount options
has been removed from the -mm tree.  Its filename was
 ext3-show-all-mount-options.patch

This patch was dropped because it was merged into mainline or a subsystem tree

--
Subject: ext3: show all mount options
From: Miklos Szeredi [EMAIL PROTECTED]

Signed-off-by: Miklos Szeredi [EMAIL PROTECTED]
Cc: linux-ext4@vger.kernel.org
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 fs/ext3/super.c|   70 +++
 include/linux/ext3_fs_sb.h |1 
 2 files changed, 71 insertions(+)

diff -puN fs/ext3/super.c~ext3-show-all-mount-options fs/ext3/super.c
--- a/fs/ext3/super.c~ext3-show-all-mount-options
+++ a/fs/ext3/super.c
@@ -545,9 +545,78 @@ static inline void ext3_show_quota_optio
 #endif
 }
 
+/*
+ * Show an option if
+ *  - it's set to a non-default value OR
+ *  - if the per-sb default is different from the global default
+ */
 static int ext3_show_options(struct seq_file *seq, struct vfsmount *vfs)
 {
struct super_block *sb = vfs-mnt_sb;
+   struct ext3_sb_info *sbi = EXT3_SB(sb);
+   struct ext3_super_block *es = sbi-s_es;
+   unsigned long def_mount_opts;
+
+   def_mount_opts = le32_to_cpu(es-s_default_mount_opts);
+
+   if (sbi-s_sb_block != 1)
+   seq_printf(seq, ,sb=%lu, sbi-s_sb_block);
+   if (test_opt(sb, MINIX_DF))
+   seq_puts(seq, ,minixdf);
+   if (test_opt(sb, GRPID))
+   seq_puts(seq, ,grpid);
+   if (!test_opt(sb, GRPID)  (def_mount_opts  EXT3_DEFM_BSDGROUPS))
+   seq_puts(seq, ,nogrpid);
+   if (sbi-s_resuid != EXT3_DEF_RESUID ||
+   le16_to_cpu(es-s_def_resuid) != EXT3_DEF_RESUID) {
+   seq_printf(seq, ,resuid=%u, sbi-s_resuid);
+   }
+   if (sbi-s_resgid != EXT3_DEF_RESGID ||
+   le16_to_cpu(es-s_def_resgid) != EXT3_DEF_RESGID) {
+   seq_printf(seq, ,resgid=%u, sbi-s_resgid);
+   }
+   if (test_opt(sb, ERRORS_CONT)) {
+   int def_errors = le16_to_cpu(es-s_errors);
+
+   if (def_errors == EXT3_ERRORS_PANIC ||
+   def_errors == EXT3_ERRORS_RO) {
+   seq_puts(seq, ,errors=continue);
+   }
+   }
+   if (test_opt(sb, ERRORS_RO))
+   seq_puts(seq, ,errors=remount-ro);
+   if (test_opt(sb, ERRORS_PANIC))
+   seq_puts(seq, ,errors=panic);
+   if (test_opt(sb, NO_UID32))
+   seq_puts(seq, ,nouid32);
+   if (test_opt(sb, DEBUG))
+   seq_puts(seq, ,debug);
+   if (test_opt(sb, OLDALLOC))
+   seq_puts(seq, ,oldalloc);
+#ifdef CONFIG_EXT3_FS_XATTR
+   if (test_opt(sb, XATTR_USER))
+   seq_puts(seq, ,user_xattr);
+   if (!test_opt(sb, XATTR_USER) 
+   (def_mount_opts  EXT3_DEFM_XATTR_USER)) {
+   seq_puts(seq, ,nouser_xattr);
+   }
+#endif
+#ifdef CONFIG_EXT3_FS_POSIX_ACL
+   if (test_opt(sb, POSIX_ACL))
+   seq_puts(seq, ,acl);
+   if (!test_opt(sb, POSIX_ACL)  (def_mount_opts  EXT3_DEFM_ACL))
+   seq_puts(seq, ,noacl);
+#endif
+   if (!test_opt(sb, RESERVATION))
+   seq_puts(seq, ,noreservation);
+   if (sbi-s_commit_interval) {
+   seq_printf(seq, ,commit=%u,
+  (unsigned) (sbi-s_commit_interval / HZ));
+   }
+   if (test_opt(sb, BARRIER))
+   seq_puts(seq, ,barrier=1);
+   if (test_opt(sb, NOBH))
+   seq_puts(seq, ,nobh);
 
if (test_opt(sb, DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA)
seq_puts(seq, ,data=journal);
@@ -1425,6 +1494,7 @@ 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_sb_block = sb_block;
 
unlock_kernel();
 
diff -puN include/linux/ext3_fs_sb.h~ext3-show-all-mount-options 
include/linux/ext3_fs_sb.h
--- a/include/linux/ext3_fs_sb.h~ext3-show-all-mount-options
+++ a/include/linux/ext3_fs_sb.h
@@ -44,6 +44,7 @@ struct ext3_sb_info {
struct ext3_super_block * s_es; /* Pointer to the super block in the 
buffer */
struct buffer_head ** s_group_desc;
unsigned long  s_mount_opt;
+   ext3_fsblk_t s_sb_block;
uid_t s_resuid;
gid_t s_resgid;
unsigned short s_mount_state;
_

Patches currently in -mm which might be from [EMAIL PROTECTED] are

origin.patch
unprivileged-mounts-add-user-mounts-to-the-kernel.patch
unprivileged-mounts-allow-unprivileged-umount.patch
unprivileged-mounts-account-user-mounts.patch
unprivileged-mounts-propagate-error-values-from-clone_mnt.patch
unprivileged-mounts-allow-unprivileged-bind-mounts.patch
unprivileged-mounts-put-declaration-of-put_filesystem-in-fsh.patch
unprivileged-mounts-allow-unprivileged-mounts.patch

Re: [PATCH 2/2] ext2: Avoid rec_len overflow with 64KB block size

2007-10-18 Thread Christoph Lameter
On Wed, 17 Oct 2007, Andrew Morton wrote:

 b) what happens when an old ext2 driver tries to read and/or write this
directory entry?  Do we need a compat flag for it?

Old ext2 only supports up to 4k

include/linux/ext2_fs.h:

#define EXT2_MIN_BLOCK_SIZE 1024
#define EXT2_MAX_BLOCK_SIZE 4096
#define EXT2_MIN_BLOCK_LOG_SIZE   10

Should fail to mount the volume since the block size is too large.

-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/2] ext2: Avoid rec_len overflow with 64KB block size

2007-10-18 Thread Andrew Morton
On Thu, 18 Oct 2007 02:03:39 -0700 (PDT) Christoph Lameter [EMAIL PROTECTED] 
wrote:

 On Wed, 17 Oct 2007, Andrew Morton wrote:
 
  b) what happens when an old ext2 driver tries to read and/or write this
 directory entry?  Do we need a compat flag for it?
 
 Old ext2 only supports up to 4k
 
 include/linux/ext2_fs.h:
 
 #define EXT2_MIN_BLOCK_SIZE 1024
 #define EXT2_MAX_BLOCK_SIZE 4096
 #define EXT2_MIN_BLOCK_LOG_SIZE   10
 
 Should fail to mount the volume since the block size is too large.

should, but does it?

box:/usr/src/25 grep MAX_BLOCK_SIZE fs/ext2/*.[ch] include/linux/ext2*
include/linux/ext2_fs.h:#define EXT2_MAX_BLOCK_SIZE 4096
box:/usr/src/25 

-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[patch 129/155] ext3: fix setup_new_group_blocks locking

2007-10-18 Thread akpm
From: Eric Sandeen [EMAIL PROTECTED]

setup_new_group_blocks() manipulates the group descriptor block bh under
the block_bitmap bh's lock.  It shouldn't matter since nobody but resize
should be touching these blocks, but it's worth fixing up.

Signed-off-by: Eric Sandeen [EMAIL PROTECTED]
C: linux-ext4@vger.kernel.org
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 fs/ext3/resize.c |6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff -puN fs/ext3/resize.c~ext3-fix-setup_new_group_blocks-locking 
fs/ext3/resize.c
--- a/fs/ext3/resize.c~ext3-fix-setup_new_group_blocks-locking
+++ a/fs/ext3/resize.c
@@ -245,10 +245,10 @@ static int setup_new_group_blocks(struct
brelse(gdb);
goto exit_bh;
}
-   lock_buffer(bh);
-   memcpy(gdb-b_data, sbi-s_group_desc[i]-b_data, bh-b_size);
+   lock_buffer(gdb);
+   memcpy(gdb-b_data, sbi-s_group_desc[i]-b_data, gdb-b_size);
set_buffer_uptodate(gdb);
-   unlock_buffer(bh);
+   unlock_buffer(gdb);
ext3_journal_dirty_metadata(handle, gdb);
ext3_set_bit(bit, bh-b_data);
brelse(gdb);
_
-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[RFC][PATCH 2/6] ext4: code cleanup

2007-10-18 Thread Aneesh Kumar K.V
Fix sparse warnings.

Signed-off-by: Aneesh Kumar K.V [EMAIL PROTECTED]
---
 fs/ext4/extents.c   |6 +++---
 fs/ext4/inode.c |   14 --
 include/linux/ext4_fs.h |2 ++
 3 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index 392b76e..ce58d45 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -1230,7 +1230,7 @@ static ext4_lblk_t ext4_ext_next_leaf_block(struct inode 
*inode,
  * then we have to correct all indexes above.
  * TODO: do we need to correct tree in all cases?
  */
-int ext4_ext_correct_indexes(handle_t *handle, struct inode *inode,
+static int ext4_ext_correct_indexes(handle_t *handle, struct inode *inode,
struct ext4_ext_path *path)
 {
struct ext4_extent_header *eh;
@@ -1677,7 +1677,7 @@ ext4_ext_in_cache(struct inode *inode, ext4_lblk_t block,
  * It's used in truncate case only, thus all requests are for
  * last index in the block only.
  */
-int ext4_ext_rm_idx(handle_t *handle, struct inode *inode,
+static int ext4_ext_rm_idx(handle_t *handle, struct inode *inode,
struct ext4_ext_path *path)
 {
struct buffer_head *bh;
@@ -1947,7 +1947,7 @@ ext4_ext_more_to_rm(struct ext4_ext_path *path)
return 1;
 }
 
-int ext4_ext_remove_space(struct inode *inode, unsigned long start)
+static int ext4_ext_remove_space(struct inode *inode, unsigned long start)
 {
struct super_block *sb = inode-i_sb;
int depth = ext_depth(inode);
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index a557c5c..8908ab3 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -2159,11 +2159,11 @@ static void ext4_clear_blocks(handle_t *handle, struct 
inode *inode,
for (p = first; p  last; p++) {
u32 nr = le32_to_cpu(*p);
if (nr) {
-   struct buffer_head *bh;
+   struct buffer_head *tbh;
 
*p = 0;
-   bh = sb_find_get_block(inode-i_sb, nr);
-   ext4_forget(handle, 0, inode, bh, nr);
+   tbh = sb_find_get_block(inode-i_sb, nr);
+   ext4_forget(handle, 0, inode, tbh, nr);
}
}
 
@@ -2431,8 +2431,10 @@ void ext4_truncate(struct inode *inode)
return;
}
 
-   if (EXT4_I(inode)-i_flags  EXT4_EXTENTS_FL)
-   return ext4_ext_truncate(inode, page);
+   if (EXT4_I(inode)-i_flags  EXT4_EXTENTS_FL) {
+   ext4_ext_truncate(inode, page);
+   return;
+   }
 
handle = start_transaction(inode);
if (IS_ERR(handle)) {
@@ -3283,7 +3285,7 @@ ext4_reserve_inode_write(handle_t *handle, struct inode 
*inode,
  * Expand an inode by new_extra_isize bytes.
  * Returns 0 on success or negative error number on failure.
  */
-int ext4_expand_extra_isize(struct inode *inode, unsigned int new_extra_isize,
+static int ext4_expand_extra_isize(struct inode *inode, unsigned int 
new_extra_isize,
struct ext4_iloc iloc, handle_t *handle)
 {
struct ext4_inode *raw_inode;
diff --git a/include/linux/ext4_fs.h b/include/linux/ext4_fs.h
index f6d4b4c..514464d 100644
--- a/include/linux/ext4_fs.h
+++ b/include/linux/ext4_fs.h
@@ -928,6 +928,8 @@ extern ext4_fsblk_t ext4_new_block (handle_t *handle, 
struct inode *inode,
ext4_fsblk_t goal, int *errp);
 extern ext4_fsblk_t ext4_new_blocks (handle_t *handle, struct inode *inode,
ext4_fsblk_t goal, unsigned long *count, int *errp);
+extern ext4_fsblk_t ext4_new_blocks_old (handle_t *handle, struct inode *inode,
+   ext4_fsblk_t goal, unsigned long *count, int *errp);
 extern void ext4_free_blocks (handle_t *handle, struct inode *inode,
ext4_fsblk_t block, unsigned long count, int metadata);
 extern void ext4_free_blocks_sb (handle_t *handle, struct super_block *sb,
-- 
1.5.3.4.206.g58ba4-dirty

-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[RFC][PATCH 3/6] ext4: Code cleanup

2007-10-18 Thread Aneesh Kumar K.V
rename i_file_acl to i_file_acl_lo

Signed-off-by: Aneesh Kumar K.V [EMAIL PROTECTED]
---
 fs/ext4/inode.c |4 ++--
 include/linux/ext4_fs.h |2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 8908ab3..ef073df 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -2825,7 +2825,7 @@ void ext4_read_inode(struct inode * inode)
}
inode-i_blocks = le32_to_cpu(raw_inode-i_blocks);
ei-i_flags = le32_to_cpu(raw_inode-i_flags);
-   ei-i_file_acl = le32_to_cpu(raw_inode-i_file_acl);
+   ei-i_file_acl = le32_to_cpu(raw_inode-i_file_acl_lo);
if (EXT4_SB(inode-i_sb)-s_es-s_creator_os !=
cpu_to_le32(EXT4_OS_HURD))
ei-i_file_acl |=
@@ -2980,7 +2980,7 @@ static int ext4_do_update_inode(handle_t *handle,
cpu_to_le32(EXT4_OS_HURD))
raw_inode-i_file_acl_high =
cpu_to_le16(ei-i_file_acl  32);
-   raw_inode-i_file_acl = cpu_to_le32(ei-i_file_acl);
+   raw_inode-i_file_acl_lo = cpu_to_le32(ei-i_file_acl);
if (!S_ISREG(inode-i_mode)) {
raw_inode-i_dir_acl = cpu_to_le32(ei-i_dir_acl);
} else {
diff --git a/include/linux/ext4_fs.h b/include/linux/ext4_fs.h
index 514464d..6464ff9 100644
--- a/include/linux/ext4_fs.h
+++ b/include/linux/ext4_fs.h
@@ -325,7 +325,7 @@ struct ext4_inode {
} osd1; /* OS dependent 1 */
__le32  i_block[EXT4_N_BLOCKS];/* Pointers to blocks */
__le32  i_generation;   /* File version (for NFS) */
-   __le32  i_file_acl; /* File ACL */
+   __le32  i_file_acl_lo;  /* File ACL */
__le32  i_dir_acl;  /* Directory ACL */
__le32  i_obso_faddr;   /* Obsoleted fragment address */
union {
-- 
1.5.3.4.206.g58ba4-dirty

-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[RFC][PATCH 4/6] ext4: code cleanup

2007-10-18 Thread Aneesh Kumar K.V
rename ext4_inode.i_dir_acl to i_size_high
drop ext4_inode_info.i_dir_acl as it is not used

Signed-off-by: Aneesh Kumar K.V [EMAIL PROTECTED]
---
 fs/ext4/ialloc.c  |1 -
 fs/ext4/inode.c   |   55 ++---
 include/linux/ext4_fs.h   |   15 +--
 include/linux/ext4_fs_i.h |1 -
 4 files changed, 34 insertions(+), 38 deletions(-)

diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
index de40401..d775170 100644
--- a/fs/ext4/ialloc.c
+++ b/fs/ext4/ialloc.c
@@ -708,7 +708,6 @@ got:
if (!S_ISDIR(mode))
ei-i_flags = ~EXT4_DIRSYNC_FL;
ei-i_file_acl = 0;
-   ei-i_dir_acl = 0;
ei-i_dtime = 0;
ei-i_block_alloc_info = NULL;
ei-i_block_group = group;
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index ef073df..39859cf 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -2801,7 +2801,6 @@ void ext4_read_inode(struct inode * inode)
inode-i_gid |= le16_to_cpu(raw_inode-i_gid_high)  16;
}
inode-i_nlink = le16_to_cpu(raw_inode-i_links_count);
-   inode-i_size = le32_to_cpu(raw_inode-i_size);
 
ei-i_state = 0;
ei-i_dir_start_lookup = 0;
@@ -2827,15 +2826,11 @@ void ext4_read_inode(struct inode * inode)
ei-i_flags = le32_to_cpu(raw_inode-i_flags);
ei-i_file_acl = le32_to_cpu(raw_inode-i_file_acl_lo);
if (EXT4_SB(inode-i_sb)-s_es-s_creator_os !=
-   cpu_to_le32(EXT4_OS_HURD))
+   cpu_to_le32(EXT4_OS_HURD)) {
ei-i_file_acl |=
((__u64)le16_to_cpu(raw_inode-i_file_acl_high))  32;
-   if (!S_ISREG(inode-i_mode)) {
-   ei-i_dir_acl = le32_to_cpu(raw_inode-i_dir_acl);
-   } else {
-   inode-i_size |=
-   ((__u64)le32_to_cpu(raw_inode-i_size_high))  32;
}
+   inode-i_size = ext4_isize(raw_inode);
ei-i_disksize = inode-i_size;
inode-i_generation = le32_to_cpu(raw_inode-i_generation);
ei-i_block_group = iloc.block_group;
@@ -2966,7 +2961,6 @@ static int ext4_do_update_inode(handle_t *handle,
raw_inode-i_gid_high = 0;
}
raw_inode-i_links_count = cpu_to_le16(inode-i_nlink);
-   raw_inode-i_size = cpu_to_le32(ei-i_disksize);
 
EXT4_INODE_SET_XTIME(i_ctime, inode, raw_inode);
EXT4_INODE_SET_XTIME(i_mtime, inode, raw_inode);
@@ -2981,32 +2975,27 @@ static int ext4_do_update_inode(handle_t *handle,
raw_inode-i_file_acl_high =
cpu_to_le16(ei-i_file_acl  32);
raw_inode-i_file_acl_lo = cpu_to_le32(ei-i_file_acl);
-   if (!S_ISREG(inode-i_mode)) {
-   raw_inode-i_dir_acl = cpu_to_le32(ei-i_dir_acl);
-   } else {
-   raw_inode-i_size_high =
-   cpu_to_le32(ei-i_disksize  32);
-   if (ei-i_disksize  0x7fffULL) {
-   struct super_block *sb = inode-i_sb;
-   if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
-   EXT4_FEATURE_RO_COMPAT_LARGE_FILE) ||
-   EXT4_SB(sb)-s_es-s_rev_level ==
-   cpu_to_le32(EXT4_GOOD_OLD_REV)) {
-  /* If this is the first large file
-   * created, add a flag to the superblock.
-   */
-   err = ext4_journal_get_write_access(handle,
-   EXT4_SB(sb)-s_sbh);
-   if (err)
-   goto out_brelse;
-   ext4_update_dynamic_rev(sb);
-   EXT4_SET_RO_COMPAT_FEATURE(sb,
+   ext4_isize_set(raw_inode, ei-i_disksize);
+   if (ei-i_disksize  0x7fffULL) {
+   struct super_block *sb = inode-i_sb;
+   if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
+   EXT4_FEATURE_RO_COMPAT_LARGE_FILE) ||
+   EXT4_SB(sb)-s_es-s_rev_level ==
+   cpu_to_le32(EXT4_GOOD_OLD_REV)) {
+   /* If this is the first large file
+* created, add a flag to the superblock.
+*/
+   err = ext4_journal_get_write_access(handle,
+   EXT4_SB(sb)-s_sbh);
+   if (err)
+   goto out_brelse;
+   ext4_update_dynamic_rev(sb);
+   EXT4_SET_RO_COMPAT_FEATURE(sb,
EXT4_FEATURE_RO_COMPAT_LARGE_FILE);
-   sb-s_dirt = 1;
-   handle-h_sync = 1;
-   err = ext4_journal_dirty_metadata(handle,
-   EXT4_SB(sb)-s_sbh);
-

[RFC][PATCH 6/6] ext4: Support large files

2007-10-18 Thread Aneesh Kumar K.V
This patch converts ext4_inode i_blocks to represent total
blocks occupied by the inode in file system block size.
Earlier the variable used to represent this in 512 byte
block size. This actually limited the total size of the file.

The feature is enabled transparently when we write an inode
whose i_blocks cannot be represnted as 512 byte units in a
48 bit variable.

inode flag  EXT4_HUGE_FILE_FL

Signed-off-by: Aneesh Kumar K.V [EMAIL PROTECTED]
---
 fs/ext4/inode.c |   34 ++
 fs/ext4/super.c |9 ++---
 include/linux/ext4_fs.h |3 ++-
 3 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 98dbcb7..479d9b1 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -2778,14 +2778,20 @@ static blkcnt_t ext4_inode_blocks(struct ext4_inode 
*raw_inode,
struct ext4_inode_info *ei)
 {
blkcnt_t i_blocks ;
-   struct super_block *sb = ei-vfs_inode.i_sb;
+   struct inode *inode = (ei-vfs_inode);
+   struct super_block *sb = inode-i_sb;
 
if (EXT4_HAS_RO_COMPAT_FEATURE(sb,
EXT4_FEATURE_RO_COMPAT_HUGE_FILE)) {
/* we are using combined 48 bit field */
i_blocks = ((u64)le16_to_cpu(raw_inode-i_blocks_high))  32 |

le32_to_cpu(raw_inode-i_blocks_lo);
-   return i_blocks;
+   if (ei-i_flags  EXT4_HUGE_FILE_FL) {
+   /* i_blocks represent file system block size */
+   return i_blocks   (inode-i_blkbits - 9);
+   } else {
+   return i_blocks;
+   }
} else {
return le32_to_cpu(raw_inode-i_blocks_lo);
}
@@ -2943,8 +2949,9 @@ static int ext4_inode_blocks_set(handle_t *handle,
 * i_blocks can be represnted in a 32 bit variable
 * as multiple of 512 bytes
 */
-   raw_inode-i_blocks_lo   = cpu_to_le32((u32)i_blocks);
+   raw_inode-i_blocks_lo   = cpu_to_le32(i_blocks);
raw_inode-i_blocks_high = 0;
+   ei-i_flags = ~EXT4_HUGE_FILE_FL;
} else if (i_blocks = 0xULL) {
/*
 * i_blocks can be represented in a 48 bit variable
@@ -2955,12 +2962,23 @@ static int ext4_inode_blocks_set(handle_t *handle,
if (err)
goto  err_out;
/* i_block is stored in the split  48 bit fields */
-   raw_inode-i_blocks_lo   = cpu_to_le32((u32)i_blocks);
+   raw_inode-i_blocks_lo   = cpu_to_le32(i_blocks);
+   raw_inode-i_blocks_high = cpu_to_le16(i_blocks  32);
+   ei-i_flags = ~EXT4_HUGE_FILE_FL;
+   } else {
+   /*
+* i_blocks should be represented in a 48 bit variable
+* as multiple of  file system block size
+*/
+   err = ext4_update_rocompat_feature(handle, sb,
+   EXT4_FEATURE_RO_COMPAT_HUGE_FILE);
+   if (err)
+   goto  err_out;
+   ei-i_flags |= EXT4_HUGE_FILE_FL;
+   /* i_block is stored in file system block size */
+   i_blocks = i_blocks  (inode-i_blkbits - 9);
+   raw_inode-i_blocks_lo   = cpu_to_le32(i_blocks);
raw_inode-i_blocks_high = cpu_to_le16(i_blocks  32);
-   }else {
-   ext4_error(sb, __FUNCTION__,
-   Wrong inode i_blocks count  %llu\n,
-   (unsigned long long)inode-i_blocks);
}
 err_out:
return err;
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index fee3bd7..801c499 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -1660,11 +1660,14 @@ static loff_t ext4_max_size(int bits)
upper_limit = (bits - 9);
 
} else {
-   /* We use 48 bit ext4_inode i_blocks */
+   /*
+* We use 48 bit ext4_inode i_blocks
+* With EXT4_HUGE_FILE_FL set the i_blocks
+* represent total number of blocks in
+* file system block size
+*/
upper_limit = (1LL  48) - 1;
 
-   /* total blocks in file system block size */
-   upper_limit = (bits - 9);
}
 
/* indirect blocks */
diff --git a/include/linux/ext4_fs.h b/include/linux/ext4_fs.h
index 8d55c16..71f0569 100644
--- a/include/linux/ext4_fs.h
+++ b/include/linux/ext4_fs.h
@@ -205,8 +205,9 @@ struct ext4_group_desc
 #define EXT4_NOTAIL_FL 0x8000 /* file tail should not be 
merged */
 #define EXT4_DIRSYNC_FL0x0001 /* dirsync behaviour 
(directories only) */
 #define EXT4_TOPDIR_FL 0x0002 /* Top of 

[RFC][PATCH 5/6] ext4: Add support for 48 bit inode i_blocks.

2007-10-18 Thread Aneesh Kumar K.V
use the __le16  l_i_reserved1 field of the linux2
struct of ext4_inode to represet the higher 16
bits for i_blocks. With this change max_file size becomes
(2**48 -1 )* 512 bytes.

We add a RO_COMPAT feature to the super
block to indicate that  inode have i_blocks represented as
a split 48 bits. Super block with this feature set cannot
be mounted read write on a kernel with CONFIG_LSF disabled.

Super block flag EXT4_FEATURE_RO_COMPAT_HUGE_FILE

Signed-off-by: Aneesh Kumar K.V [EMAIL PROTECTED]
---
 fs/ext4/inode.c |   58 ++-
 fs/ext4/super.c |   62 ++
 include/linux/ext4_fs.h |   10 +--
 3 files changed, 119 insertions(+), 11 deletions(-)

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 39859cf..98dbcb7 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -2774,6 +2774,22 @@ void ext4_get_inode_flags(struct ext4_inode_info *ei)
if (flags  S_DIRSYNC)
ei-i_flags |= EXT4_DIRSYNC_FL;
 }
+static blkcnt_t ext4_inode_blocks(struct ext4_inode *raw_inode,
+   struct ext4_inode_info *ei)
+{
+   blkcnt_t i_blocks ;
+   struct super_block *sb = ei-vfs_inode.i_sb;
+
+   if (EXT4_HAS_RO_COMPAT_FEATURE(sb,
+   EXT4_FEATURE_RO_COMPAT_HUGE_FILE)) {
+   /* we are using combined 48 bit field */
+   i_blocks = ((u64)le16_to_cpu(raw_inode-i_blocks_high))  32 |
+   
le32_to_cpu(raw_inode-i_blocks_lo);
+   return i_blocks;
+   } else {
+   return le32_to_cpu(raw_inode-i_blocks_lo);
+   }
+}
 
 void ext4_read_inode(struct inode * inode)
 {
@@ -2822,8 +2838,8 @@ void ext4_read_inode(struct inode * inode)
 * recovery code: that's fine, we're about to complete
 * the process of deleting those. */
}
-   inode-i_blocks = le32_to_cpu(raw_inode-i_blocks);
ei-i_flags = le32_to_cpu(raw_inode-i_flags);
+   inode-i_blocks = ext4_inode_blocks(raw_inode, ei);
ei-i_file_acl = le32_to_cpu(raw_inode-i_file_acl_lo);
if (EXT4_SB(inode-i_sb)-s_es-s_creator_os !=
cpu_to_le32(EXT4_OS_HURD)) {
@@ -2913,6 +2929,43 @@ bad_inode:
return;
 }
 
+static int ext4_inode_blocks_set(handle_t *handle,
+   struct ext4_inode *raw_inode,
+   struct ext4_inode_info *ei)
+{
+   struct inode *inode = (ei-vfs_inode);
+   u64 i_blocks = inode-i_blocks;
+   struct super_block *sb = inode-i_sb;
+   int err = 0;
+
+   if (i_blocks = ~0U) {
+   /*
+* i_blocks can be represnted in a 32 bit variable
+* as multiple of 512 bytes
+*/
+   raw_inode-i_blocks_lo   = cpu_to_le32((u32)i_blocks);
+   raw_inode-i_blocks_high = 0;
+   } else if (i_blocks = 0xULL) {
+   /*
+* i_blocks can be represented in a 48 bit variable
+* as multiple of 512 bytes
+*/
+   err = ext4_update_rocompat_feature(handle, sb,
+   EXT4_FEATURE_RO_COMPAT_HUGE_FILE);
+   if (err)
+   goto  err_out;
+   /* i_block is stored in the split  48 bit fields */
+   raw_inode-i_blocks_lo   = cpu_to_le32((u32)i_blocks);
+   raw_inode-i_blocks_high = cpu_to_le16(i_blocks  32);
+   }else {
+   ext4_error(sb, __FUNCTION__,
+   Wrong inode i_blocks count  %llu\n,
+   (unsigned long long)inode-i_blocks);
+   }
+err_out:
+   return err;
+}
+
 /*
  * Post the struct inode info into an on-disk inode location in the
  * buffer-cache.  This gobbles the caller's reference to the
@@ -2967,7 +3020,8 @@ static int ext4_do_update_inode(handle_t *handle,
EXT4_INODE_SET_XTIME(i_atime, inode, raw_inode);
EXT4_EINODE_SET_XTIME(i_crtime, ei, raw_inode);
 
-   raw_inode-i_blocks = cpu_to_le32(inode-i_blocks);
+   if (ext4_inode_blocks_set(handle, raw_inode, ei))
+   goto out_brelse;
raw_inode-i_dtime = cpu_to_le32(ei-i_dtime);
raw_inode-i_flags = cpu_to_le32(ei-i_flags);
if (EXT4_SB(inode-i_sb)-s_es-s_creator_os !=
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index e2bed20..fee3bd7 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -1632,17 +1632,50 @@ static void ext4_orphan_cleanup (struct super_block * 
sb,
 
 /*
  * Maximal file size.  There is a direct, and {,double-,triple-}indirect
- * block limit, and also a limit of (2^32 - 1) 512-byte sectors in i_blocks.
- * We need to be 1 filesystem block less than the 2^32 sector limit.
+ * block limit, and also a limit of (2^48 - 1) 512-byte sectors in i_blocks.
+ * We need to be 1 filesystem block less 

Re: How Inactive may be much greather than cached?

2007-10-18 Thread Vasily Averin
Nick Piggin wrote:
 Some filesystems, including I believe, ext3 with data=ordered,
 can leave orphaned pages around after they have been truncated
 out of the pagecache. These pages get left on the LRU and vmscan
 reclaims them pretty easily.
 
 Try ext3 data=writeback, or even ext2.

thanks, data=writeback helps.

Resume: ext3 with data=ordered gets bh with data and moves it to journal
transaction. If transaction handled immediately, ext3 frees bh on this page, and
then frees this page.
However if journal delays processing of this transaction, ext3 cannot free bh
that is still busy. Later jbd layer decrements bh counter but it makes nothing
with data page that is not freed and stays inactive.
-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


patch queue updates

2007-10-18 Thread Aneesh Kumar K.V

Hi Mingming,

The patch queue updated on top of d85714d81cc0408daddb68c10f7fd69eafe7c213

The commit d85714d81cc0408daddb68c10f7fd69eafe7c213  contain changes that
Andrew pushed to linus which had conflicts with patches in the patch queue.
The update fixes them. 


Changes
a) ext4_grpnum_t.patch got updated to take care of conflicts.
b) The ext4-cleanup.patch is split into 4 small patches.
 ext4-cleanup.patch
 ext4-cleanup-2.patch
 ext4-cleanup-3.patch
 ext4-cleanup-4.patch

c) mballoc-core.patch updated to fix compile error. 


The series can be found at

http://www.radian.org/~kvaneesh/ext4/oct-18-2007/
http://www.radian.org/~kvaneesh/ext4/oct-18-2007/patch-series.tar


-aneesh
-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: How Inactive may be much greather than cached?

2007-10-18 Thread Rik van Riel
On Thu, 18 Oct 2007 17:27:00 +1000
Nick Piggin [EMAIL PROTECTED] wrote:

 Some filesystems, including I believe, ext3 with data=ordered,
 can leave orphaned pages around after they have been truncated
 out of the pagecache. These pages get left on the LRU and vmscan
 reclaims them pretty easily.

How can the VM recognize those pages?  Are they part of
the buffer cache, part of the page cache, or different?

I think it would make sense to at least try to rotate
those pages to the end of the LRU so kswapd can get rid
of them quickly.

-- 
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it. - Brian W. Kernighan
-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: ext3 warnings from LTP rename14

2007-10-18 Thread Eric Sandeen
Andreas Dilger wrote:

 It is probably significant that the original machine is a sparc32 (big
 endian).  

Oh, true.

 I'd suspect you can reproduce this on a PPC system also.  You
 might also consider running sparse on it ext3/ext4 in case you missed an
 le32_to_cpu() or something.

sparse checks out ok... and, -rc6 which did not have that change showed
the same behavior

-Eric

-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


can not find some patches from patch queue on ext4 git tree

2007-10-18 Thread Coly Li
Hi, my local ext4 git tree is from 
git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git,
with commit commit d85714d81cc0408daddb68c10f7fd69eafe7c213.

It seems some of patchese of patch queue are not in current tree, which were 
there 1 - 2 days ago.
Is it because we are merging ext4 tree to 2.6.23 ? and after the merge, the 
patches will in pached
in the tree again ?
Should I generate my patch based on current version, or wait for some day ? 
Indeed, I try to add my
patch to current version, but some patches missing from ext4 tree.

Thanks for information :-)

-- 
Coly Li
SuSE PRC Labs
-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: can not find some patches from patch queue on ext4 git tree

2007-10-18 Thread Theodore Tso
On Fri, Oct 19, 2007 at 01:41:00AM +0800, Coly Li wrote:

 Hi, my local ext4 git tree is from 
 git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4.git,
 with commit commit d85714d81cc0408daddb68c10f7fd69eafe7c213.

 It seems some of patchese of patch queue are not in current tree,
 which were there 1 - 2 days ago.  Is it because we are merging ext4
 tree to 2.6.23 ? and after the merge, the patches will in pached in
 the tree again ?  Should I generate my patch based on current
 version, or wait for some day ? Indeed, I try to add my patch to
 current version, but some patches missing from ext4 tree.

You're apparently looking at the master branch of ext4.git.  There are
multiple branch heads, and the master branch head moves around a lot.
If you look at the web page, it might be clearer:

http://git.kernel.org/?p=linux/kernel/git/tytso/ext4.git

At the bottom of the page, there is a list of branch heads.
2.6.23-ext4-1 was the last ext4 snapshot that we published.  The
for_linus branch contains the stable version of the patch queue that
I have requested that Linus pull from.

The master branch is one that I haven't been careful about maintaining
stably, although maybe I should be more careful about that, since it's
one people tend to use by default.  OK, it's fixed.  I've repointed
the master pointer to point at 2.6.23-ext4-1.  Sorry about any
confusion that this might have caused.

Right now, during the merge window, things are a little crazy, just
because patches are flowing in from the -mm tree as well as from the
ext4 tree.  So it's probably easier to do your development against
2.6.23-ext4-1 and then after the merge carnage settles down, we can
fix up the patch.   

If it's easier, you can also see the ext4 patches as a quilt stack here:

http://repo.or.cz/w/ext4-patch-queue.git
git://repo.or.cz/ext4-patch-queue.git

It's currently in a state of flux as well as we're waiting for patches
to get merged, but hopefully that will settle down within a day or
two.  To explain how things work, a number of people have write access
into the ext4-patch-queue, and it gets run through an automated test
system located at IBM (both the whole patch queue, as well as the
first part up to the stable boundary, which is the list of patches
we plan to push to Linus).  This allows us to work in parallel
cleaning up varoius patches, and periodically I'll generate an ext4
patch series which is what gets pulled into the -mm tree for testing.
This all works pretty well, except during the merge window; but
fortunately that's a relaively short period of time.

Regards,

- Ted
-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


- ext3-support-large-blocksize-up-to-pagesize.patch removed from -mm tree

2007-10-18 Thread akpm

The patch titled
 ext3: support large blocksize up to PAGESIZE
has been removed from the -mm tree.  Its filename was
 ext3-support-large-blocksize-up-to-pagesize.patch

This patch was dropped because it was merged into mainline or a subsystem tree

--
Subject: ext3: support large blocksize up to PAGESIZE
From: Takashi Sato [EMAIL PROTECTED]

This patch set supports large block size(4k, =64k) in ext3 just enlarging
the block size limit.  But it is NOT possible to have 64kB blocksize on
ext3 without some changes to the directory handling code.  The reason is
that an empty 64kB directory block would have a rec_len == (__u16)2^16 ==
0, and this would cause an error to be hit in the filesystem.  The proposed
solution is treat 64k rec_len with a an impossible value like rec_len =
0x to handle this.

The Patch-set consists of the following 2 patches.
  [1/2]  ext3: enlarge blocksize
 - Allow blocksize up to pagesize

  [2/2]  ext3: fix rec_len overflow
 - prevent rec_len from overflow with 64KB blocksize

Now on 64k page ppc64 box runs with this patch set we could create a 64k
block size ext3, and able to handle empty directory block.

Signed-off-by: Takashi Sato [EMAIL PROTECTED]
Signed-off-by: Mingming Cao [EMAIL PROTECTED]
Cc: linux-ext4@vger.kernel.org
Acked-by: Christoph Lameter [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 fs/ext3/super.c |6 +-
 include/linux/ext3_fs.h |4 ++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff -puN fs/ext3/super.c~ext3-support-large-blocksize-up-to-pagesize 
fs/ext3/super.c
--- a/fs/ext3/super.c~ext3-support-large-blocksize-up-to-pagesize
+++ a/fs/ext3/super.c
@@ -1620,7 +1620,11 @@ static int ext3_fill_super (struct super
}
 
brelse (bh);
-   sb_set_blocksize(sb, blocksize);
+   if (!sb_set_blocksize(sb, blocksize)) {
+   printk(KERN_ERR EXT3-fs: bad blocksize %d.\n,
+   blocksize);
+   goto out_fail;
+   }
logic_sb_block = (sb_block * EXT3_MIN_BLOCK_SIZE) / blocksize;
offset = (sb_block * EXT3_MIN_BLOCK_SIZE) % blocksize;
bh = sb_bread(sb, logic_sb_block);
diff -puN include/linux/ext3_fs.h~ext3-support-large-blocksize-up-to-pagesize 
include/linux/ext3_fs.h
--- a/include/linux/ext3_fs.h~ext3-support-large-blocksize-up-to-pagesize
+++ a/include/linux/ext3_fs.h
@@ -72,8 +72,8 @@
  * Macro-instructions used to manage several block sizes
  */
 #define EXT3_MIN_BLOCK_SIZE1024
-#defineEXT3_MAX_BLOCK_SIZE 4096
-#define EXT3_MIN_BLOCK_LOG_SIZE  10
+#defineEXT3_MAX_BLOCK_SIZE 65536
+#define EXT3_MIN_BLOCK_LOG_SIZE10
 #ifdef __KERNEL__
 # define EXT3_BLOCK_SIZE(s)((s)-s_blocksize)
 #else
_

Patches currently in -mm which might be from [EMAIL PROTECTED] are

origin.patch

-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


- ext4-uninitialized-block-groups.patch removed from -mm tree

2007-10-18 Thread akpm

The patch titled
 Ext4: Uninitialized Block Groups
has been removed from the -mm tree.  Its filename was
 ext4-uninitialized-block-groups.patch

This patch was dropped because it was merged into mainline or a subsystem tree

--
Subject: Ext4: Uninitialized Block Groups
From: Andreas Dilger [EMAIL PROTECTED]

In pass1 of e2fsck, every inode table in the fileystem is scanned and
checked, regardless of whether it is in use.  This is this the most time
consuming part of the filesystem check.  The unintialized block group
feature can greatly reduce e2fsck time by eliminating checking of
uninitialized inodes.

With this feature, there is a a high water mark of used inodes for each
block group.  Block and inode bitmaps can be uninitialized on disk via a
flag in the group descriptor to avoid reading or scanning them at e2fsck
time.  A checksum of each group descriptor is used to ensure that
corruption in the group descriptor's bit flags does not cause incorrect
operation.

The feature is enabled through a mkfs option

mke2fs /dev/ -O uninit_groups

A patch adding support for uninitialized block groups to e2fsprogs tools has
been posted to the linux-ext4 mailing list.

The patches have been stress tested with fsstress and fsx.  In performance
tests testing e2fsck time, we have seen that e2fsck time on ext3 grows
linearly with the total number of inodes in the filesytem.  In ext4 with
the uninitialized block groups feature, the e2fsck time is constant, based
solely on the number of used inodes rather than the total inode count. 
Since typical ext4 filesystems only use 1-10% of their inodes, this feature
can greatly reduce e2fsck time for users.  With performance improvement of
2-20 times, depending on how full the filesystem is.

The attached graph shows the major improvements in e2fsck times in filesystems
with a large total inode count, but few inodes in use.

In each group descriptor if we have

EXT4_BG_INODE_UNINIT set in bg_flags:
Inode table is not initialized/used in this group. So we can skip
the consistency check during fsck.
EXT4_BG_BLOCK_UNINIT set in bg_flags:
No block in the group is used. So we can skip the block bitmap
verification for this group.

We also add two new fields to group descriptor as a part of
uninitialized group patch.

__le16  bg_itable_unused;   /* Unused inodes count */
__le16  bg_checksum;/* crc16(sb_uuid+group+desc) */

bg_itable_unused:

If we have EXT4_BG_INODE_UNINIT not set in bg_flags
then bg_itable_unused will give the offset within
the inode table till the inodes are used. This can be
used by fsck to skip list of inodes that are marked unused.

bg_checksum:
Now that we depend on bg_flags and bg_itable_unused to determine
the block and inode usage, we need to make sure group descriptor
is not corrupt. We add checksum to group descriptor to
detect corruption. If the descriptor is found to be corrupt, we
mark all the blocks and inodes in the group used.

Signed-off-by: Andreas Dilger [EMAIL PROTECTED]
Signed-off-by: Avantika Mathur [EMAIL PROTECTED]
Signed-off-by: Mingming Cao [EMAIL PROTECTED]
Signed-off-by: Aneesh Kumar K.V [EMAIL PROTECTED]
Cc: linux-ext4@vger.kernel.org
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 fs/Kconfig  |1 
 fs/ext4/balloc.c|  112 -
 fs/ext4/group.h |   27 +++
 fs/ext4/ialloc.c|  146 +++---
 fs/ext4/resize.c|   21 -
 fs/ext4/super.c |   47 
 include/linux/ext4_fs.h |   16 +++-
 7 files changed, 335 insertions(+), 35 deletions(-)

diff -puN fs/Kconfig~ext4-uninitialized-block-groups fs/Kconfig
--- a/fs/Kconfig~ext4-uninitialized-block-groups
+++ a/fs/Kconfig
@@ -140,6 +140,7 @@ config EXT4DEV_FS
tristate Ext4dev/ext4 extended fs support development (EXPERIMENTAL)
depends on EXPERIMENTAL
select JBD2
+   select CRC16
help
  Ext4dev is a predecessor filesystem of the next generation
  extended fs ext4, based on ext3 filesystem code. It will be
diff -puN fs/ext4/balloc.c~ext4-uninitialized-block-groups fs/ext4/balloc.c
--- a/fs/ext4/balloc.c~ext4-uninitialized-block-groups
+++ a/fs/ext4/balloc.c
@@ -20,6 +20,7 @@
 #include linux/quotaops.h
 #include linux/buffer_head.h
 
+#include group.h
 /*
  * balloc.c contains the blocks allocation and deallocation routines
  */
@@ -42,6 +43,94 @@ void ext4_get_group_no_and_offset(struct
 
 }
 
+/* Initializes an uninitialized block bitmap if given, and returns the
+ * number of blocks free in the group. */
+unsigned ext4_init_block_bitmap(struct super_block *sb, struct buffer_head *bh,
+   int block_group, struct ext4_group_desc *gdp)
+{
+   unsigned long start;
+   int bit, bit_max;
+   unsigned free_blocks, group_blocks;
+   struct ext4_sb_info *sbi 

- jbd-config_jbd_debug-cannot-create-proc-entry-fix.patch removed from -mm tree

2007-10-18 Thread akpm

The patch titled
 jbd-config_jbd_debug-cannot-create-proc-entry-fix
has been removed from the -mm tree.  Its filename was
 jbd-config_jbd_debug-cannot-create-proc-entry-fix.patch

This patch was dropped because it was folded into 
jbd-config_jbd_debug-cannot-create-proc-entry.patch

--
Subject: jbd-config_jbd_debug-cannot-create-proc-entry-fix
From: Andrew Morton [EMAIL PROTECTED]

- use `#ifdef foo' instead of `#if defined(foo)'

- CONFIG_JBD_DEBUG depends on CONFIG_DEBUG_FS so we don't need to duplicate
  that logic in the .c file ifdefs

- Make journal_enable_debug __read_mostly just for the heck of it

- Make jbd_debugfs_dir and jbd_debug static

- debugfs_remove(NULL) is legal: remove unneeded tests

- jbd_create_debugfs_entry is a better name than create_jbd_debugfs_entry

- ditto remove_jbd_debugfs_entry

- C functions are preferred over macros

- Avoid declaring multiple variables in a single line.

Cc: Jose R. Santos [EMAIL PROTECTED]
Cc: linux-ext4@vger.kernel.org
Cc: Jan Kara [EMAIL PROTECTED]
Cc: Jose R. Santos [EMAIL PROTECTED]
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 fs/jbd/journal.c |   34 ++
 1 file changed, 18 insertions(+), 16 deletions(-)

diff -puN fs/jbd/journal.c~jbd-config_jbd_debug-cannot-create-proc-entry-fix 
fs/jbd/journal.c
--- a/fs/jbd/journal.c~jbd-config_jbd_debug-cannot-create-proc-entry-fix
+++ a/fs/jbd/journal.c
@@ -1858,16 +1858,15 @@ void journal_put_journal_head(struct jou
 /*
  * debugfs tunables
  */
-#if defined(CONFIG_JBD_DEBUG)
-u8 journal_enable_debug;
-EXPORT_SYMBOL(journal_enable_debug);
-#endif
+#ifdef CONFIG_JBD_DEBUG
 
-#if defined(CONFIG_JBD_DEBUG)  defined(CONFIG_DEBUG_FS)
+u8 journal_enable_debug __read_mostly;
+EXPORT_SYMBOL(journal_enable_debug);
 
-struct dentry  *jbd_debugfs_dir, *jbd_debug;
+static struct dentry *jbd_debugfs_dir;
+static struct dentry *jbd_debug;
 
-static void __init create_jbd_debugfs_entry(void)
+static void __init jbd_create_debugfs_entry(void)
 {
jbd_debugfs_dir = debugfs_create_dir(jbd, NULL);
if (jbd_debugfs_dir)
@@ -1876,18 +1875,21 @@ static void __init create_jbd_debugfs_en
   journal_enable_debug);
 }
 
-static void __exit remove_jbd_debugfs_entry(void)
+static void __exit jbd_remove_debugfs_entry(void)
 {
-   if (jbd_debug)
-   debugfs_remove(jbd_debug);
-   if (jbd_debugfs_dir)
-   debugfs_remove(jbd_debugfs_dir);
+   debugfs_remove(jbd_debug);
+   debugfs_remove(jbd_debugfs_dir);
 }
 
 #else
 
-#define create_jbd_debugfs_entry() do {} while (0)
-#define remove_jbd_debugfs_entry() do {} while (0)
+static inline void jbd_create_debugfs_entry(void)
+{
+}
+
+static inline void jbd_remove_debugfs_entry(void)
+{
+}
 
 #endif
 
@@ -1945,7 +1947,7 @@ static int __init journal_init(void)
ret = journal_init_caches();
if (ret != 0)
journal_destroy_caches();
-   create_jbd_debugfs_entry();
+   jbd_create_debugfs_entry();
return ret;
 }
 
@@ -1956,7 +1958,7 @@ static void __exit journal_exit(void)
if (n)
printk(KERN_EMERG JBD: leaked %d journal_heads!\n, n);
 #endif
-   remove_jbd_debugfs_entry();
+   jbd_remove_debugfs_entry();
journal_destroy_caches();
 }
 
_

Patches currently in -mm which might be from [EMAIL PROTECTED] are

origin.patch
console-keyboard-events-and-accessibility.patch
add-kernel-notifierc.patch
console-events-and-accessibility.patch
fix-random-hard-freeze-with-avm-cards-using-b1dma.patch
jbd-config_jbd_debug-cannot-create-proc-entry.patch
jbd-config_jbd_debug-cannot-create-proc-entry-fix.patch
task-containersv11-basic-task-container-framework-fix.patch
task-containersv11-shared-container-subsystem-group-arrays-simplify-proc-cgroups-fix.patch
task-containersv11-shared-container-subsystem-group-arrays-include-fix.patch
add-containerstats-v3-fix.patch
pid-namespaces-dynamic-kmem-cache-allocator-for-pid-namespaces-fix.patch
pid-namespaces-define-is_global_init-and-is_container_init-fix.patch
pid-namespaces-define-is_global_init-and-is_container_init-versus-x86_64-mm-i386-show-unhandled-signals-v3.patch
lockdep-fix-mismatched-lockdep_depth-curr_chain_hash-checkpatch-fixes.patch
fs-superc-use-list_for_each_entry-instead-of-list_for_each-fix.patch
pid-namespaces-helpers-to-find-the-task-by-its-numerical-ids-fix.patch
pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual-fix.patch
pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual-fix-2.patch
pid-namespaces-changes-to-show-virtual-ids-to-user-use-find_task_by_pid_ns-in-places-that-operate-with-virtual-fix-3.patch
pid-namespaces-changes-to-show-virtual-ids-to-user-fix.patch
cpuset-sched_load_balance-flag-fix.patch

Re: [PATCH 2/2] ext2: Avoid rec_len overflow with 64KB block size

2007-10-18 Thread Mingming Cao
On Wed, 2007-10-17 at 21:09 -0700, Andrew Morton wrote:
 On Thu, 11 Oct 2007 13:18:49 +0200 Jan Kara [EMAIL PROTECTED] wrote:
 
  With 64KB blocksize, a directory entry can have size 64KB which does not fit
  into 16 bits we have for entry lenght. So we store 0x instead and 
  convert
  value when read from / written to disk.
 
 btw, this changes ext2's on-disk format.
 
Just to clarify this is only changes the directory entries format on
ext2/3/4 fs with 64k block size. But currently without kernel changes
ext2/3/4 does not support 64 block size.

 a) is the ext2 format documented anywhere?  If so, that document will
need updating.
 

The e2fsprogs needs to be changed to sync up with this change.

Ted has a paper a while back to show ext2 disk format 
http://web.mit.edu/tytso/www/linux/ext2intro.html

The Documentation/filesystems/ext2.txt doesn't have the ext2 format
documented. That document is out-dated need to be reviewed and cleaned
up.
 
 b) what happens when an old ext2 driver tries to read and/or write this
directory entry?  Do we need a compat flag for it?
 
 c) what happens when old and new ext3 or ext4 try to read/write this
directory entry?
 

Without the first patch in this series: ext2 large blocksize support
patches, it fails to mount a ext2 filesystem with 64k block size. 

[PATCH 1/2] ext2:  Support large blocksize up to PAGESIZE
http://lkml.org/lkml/2007/10/1/361

So the old ext2/3/4 driver will not get access the directory entry with
64k block size format changes.


Regards,

Mingming

 -
 To unsubscribe from this list: send the line unsubscribe linux-ext4 in
 the body of a message to [EMAIL PROTECTED]
 More majordomo info at  http://vger.kernel.org/majordomo-info.html

-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


- ext4-flex_bg-kernel-support-v2.patch removed from -mm tree

2007-10-18 Thread akpm

The patch titled
 ext4: FLEX_BG Kernel support
has been removed from the -mm tree.  Its filename was
 ext4-flex_bg-kernel-support-v2.patch

This patch was dropped because it was merged into mainline or a subsystem tree

--
Subject: ext4: FLEX_BG Kernel support
From: Jose R. Santos [EMAIL PROTECTED]

This feature relaxes check restrictions on where each block groups meta
data is located within the storage media.  This allows for the allocation
of bitmaps or inode tables outside the block group boundaries in cases
where bad blocks forces us to look for new blocks which the owning block
group can not satisfy.  This will also allow for new meta-data allocation
schemes to improve performance and scalability.

Signed-off-by: Jose R. Santos [EMAIL PROTECTED]
Cc: linux-ext4@vger.kernel.org
Signed-off-by: Andrew Morton [EMAIL PROTECTED]
---

 fs/ext4/super.c |9 +++--
 include/linux/ext4_fs.h |4 +++-
 2 files changed, 10 insertions(+), 3 deletions(-)

diff -puN fs/ext4/super.c~ext4-flex_bg-kernel-support-v2 fs/ext4/super.c
--- a/fs/ext4/super.c~ext4-flex_bg-kernel-support-v2
+++ a/fs/ext4/super.c
@@ -1358,13 +1358,17 @@ static int ext4_check_descriptors (struc
ext4_fsblk_t inode_table;
struct ext4_group_desc * gdp = NULL;
int desc_block = 0;
+   int flexbg_flag = 0;
int i;
 
+   if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FLEX_BG))
+   flexbg_flag = 1;
+
ext4_debug (Checking group descriptors);
 
for (i = 0; i  sbi-s_groups_count; i++)
{
-   if (i == sbi-s_groups_count - 1)
+   if (i == sbi-s_groups_count - 1 || flexbg_flag)
last_block = ext4_blocks_count(sbi-s_es) - 1;
else
last_block = first_block +
@@ -1409,7 +1413,8 @@ static int ext4_check_descriptors (struc
   le16_to_cpu(gdp-bg_checksum));
return 0;
}
-   first_block += EXT4_BLOCKS_PER_GROUP(sb);
+   if (!flexbg_flag)
+   first_block += EXT4_BLOCKS_PER_GROUP(sb);
gdp = (struct ext4_group_desc *)
((__u8 *)gdp + EXT4_DESC_SIZE(sb));
}
diff -puN include/linux/ext4_fs.h~ext4-flex_bg-kernel-support-v2 
include/linux/ext4_fs.h
--- a/include/linux/ext4_fs.h~ext4-flex_bg-kernel-support-v2
+++ a/include/linux/ext4_fs.h
@@ -682,13 +682,15 @@ static inline int ext4_valid_inum(struct
 #define EXT4_FEATURE_INCOMPAT_META_BG  0x0010
 #define EXT4_FEATURE_INCOMPAT_EXTENTS  0x0040 /* extents support */
 #define EXT4_FEATURE_INCOMPAT_64BIT0x0080
+#define EXT4_FEATURE_INCOMPAT_FLEX_BG  0x0200
 
 #define EXT4_FEATURE_COMPAT_SUPP   EXT2_FEATURE_COMPAT_EXT_ATTR
 #define EXT4_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \
 EXT4_FEATURE_INCOMPAT_RECOVER| \
 EXT4_FEATURE_INCOMPAT_META_BG| \
 EXT4_FEATURE_INCOMPAT_EXTENTS| \
-EXT4_FEATURE_INCOMPAT_64BIT)
+EXT4_FEATURE_INCOMPAT_64BIT| \
+EXT4_FEATURE_INCOMPAT_FLEX_BG)
 #define EXT4_FEATURE_RO_COMPAT_SUPP(EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
 EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
 EXT4_FEATURE_RO_COMPAT_GDT_CSUM| \
_

Patches currently in -mm which might be from [EMAIL PROTECTED] are

origin.patch
jbd-config_jbd_debug-cannot-create-proc-entry.patch
jbd-config_jbd_debug-cannot-create-proc-entry-fix.patch
jbd-fix-jbd-warnings-when-compiling-with-config_jbd_debug.patch

-
To unsubscribe from this list: send the line unsubscribe linux-ext4 in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html