SOURCES (LINUX_2_6): kernel-ext4.patch - kernel ext4 patchset
adamg
adamg at pld-linux.org
Mon Feb 2 00:17:55 CET 2009
Author: adamg Date: Sun Feb 1 23:17:55 2009 GMT
Module: SOURCES Tag: LINUX_2_6
---- Log message:
- kernel ext4 patchset
---- Files affected:
SOURCES:
kernel-ext4.patch (1.1 -> 1.1.2.1)
---- Diffs:
================================================================
Index: SOURCES/kernel-ext4.patch
diff -u SOURCES/kernel-ext4.patch:1.1 SOURCES/kernel-ext4.patch:1.1.2.1
--- SOURCES/kernel-ext4.patch:1.1 Sat Oct 25 21:36:17 2008
+++ SOURCES/kernel-ext4.patch Mon Feb 2 00:17:49 2009
@@ -1,8651 +1,2211 @@
-Patchset: 2.6.26-ext4-7
+http://git.kernel.org/?p=linux/kernel/git/tytso/ext4.git;a=commitdiff;h=e041093f35eee3bc7093788c3753bc4493e62d75
-This patch was created by combining the ext4-pushed-post-2.6.27-rc1.gz
-patches with the stable patches in 2.6.27-rc3-ext4-1 series.
+Aneesh Kumar K.V (14):
+ ext4: Fix the delalloc writepages to allocate blocks at the right offset.
+ ext4: avoid ext4_error when mounting a fs with a single bg
+ ext4: Don't overwrite allocation_context ac_status
+ ext4: Add blocks added during resize to bitmap
+ ext4: Use EXT4_GROUP_INFO_NEED_INIT_BIT during resize
+ ext4: cleanup mballoc header files
+ ext4: don't use blocks freed but not yet committed in buddy cache init
+ ext4: Fix race between read_block_bitmap() and mark_diskspace_used()
+ ext4: Fix the race between read_inode_bitmap() and ext4_new_inode()
+ ext4: Use new buffer_head flag to check uninit group bitmaps initialization
+ ext4: mark the blocks/inode bitmap beyond end of group as used
+ ext4: Don't allow new groups to be added during block allocation
+ ext4: Init the complete page while building buddy cache
+ ext4: Fix s_dirty_blocks_counter if block allocation failed with nodelalloc
- Documentation/filesystems/ext4.txt | 131 ++-
- fs/buffer.c | 19 +-
- fs/ext4/acl.c | 188 ++--
- fs/ext4/balloc.c | 221 +++--
- fs/ext4/dir.c | 37 +-
- fs/ext4/ext4.h | 64 +-
- fs/ext4/ext4_extents.h | 5 +-
- fs/ext4/ext4_i.h | 10 +-
- fs/ext4/ext4_jbd2.h | 29 +-
- fs/ext4/ext4_sb.h | 5 +-
- fs/ext4/extents.c | 277 +++---
- fs/ext4/file.c | 20 +-
- fs/ext4/fsync.c | 4 +
- fs/ext4/group.h | 2 +-
- fs/ext4/ialloc.c | 169 +++-
- fs/ext4/inode.c | 1931 ++++++++++++++++++++++++++++++------
- fs/ext4/mballoc.c | 744 +++++++++++----
- fs/ext4/mballoc.h | 10 +-
- fs/ext4/migrate.c | 3 +-
- fs/ext4/namei.c | 45 +-
- fs/ext4/resize.c | 134 ++-
- fs/ext4/super.c | 451 ++++++---
- fs/ext4/xattr.c | 4 +-
- fs/ext4/xattr_trusted.c | 4 +-
- fs/ext4/xattr_user.c | 4 +-
- fs/jbd2/checkpoint.c | 1 -
- fs/jbd2/commit.c | 308 +++----
- fs/jbd2/journal.c | 54 +-
- fs/jbd2/transaction.c | 365 +++----
- fs/mpage.c | 14 +-
- include/linux/fs.h | 2 +
- include/linux/jbd2.h | 73 +-
- include/linux/mpage.h | 10 +
- include/linux/percpu_counter.h | 12 +-
- include/linux/writeback.h | 1 +
- lib/percpu_counter.c | 7 +-
- mm/filemap.c | 3 +-
- mm/page-writeback.c | 3 +
- 38 files changed, 3822 insertions(+), 1542 deletions(-)
+Mark Fasheh (1):
+ jbd2: Add BH_JBDPrivateStart
-diff --git a/Documentation/filesystems/ext4.txt b/Documentation/filesystems/ext4.txt
-index 0c5086d..0d53949 100644
---- a/Documentation/filesystems/ext4.txt
-+++ b/Documentation/filesystems/ext4.txt
-@@ -13,72 +13,99 @@ Mailing list: linux-ext4 at vger.kernel.org
- 1. Quick usage instructions:
- ===========================
-
-- - Grab updated e2fsprogs from
-- ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs-interim/
-- This is a patchset on top of e2fsprogs-1.39, which can be found at
-+ - Compile and install the latest version of e2fsprogs (as of this
-+ writing version 1.41) from:
-+
-+ http://sourceforge.net/project/showfiles.php?group_id=2406
-+
-+ or
-+
- ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/
-
-- - It's still mke2fs -j /dev/hda1
-+ or grab the latest git repository from:
-+
-+ git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
-+
-+ - Note that it is highly important to install the mke2fs.conf file
-+ that comes with the e2fsprogs 1.41.x sources in /etc/mke2fs.conf. If
-+ you have edited the /etc/mke2fs.conf file installed on your system,
-+ you will need to merge your changes with the version from e2fsprogs
-+ 1.41.x.
-+
-+ - Create a new filesystem using the ext4dev filesystem type:
-+
-+ # mke2fs -t ext4dev /dev/hda1
-+
-+ Or configure an existing ext3 filesystem to support extents and set
-+ the test_fs flag to indicate that it's ok for an in-development
-+ filesystem to touch this filesystem:
-
-- - mount /dev/hda1 /wherever -t ext4dev
-+ # tune2fs -O extents -E test_fs /dev/hda1
-
-- - To enable extents,
-+ If the filesystem was created with 128 byte inodes, it can be
-+ converted to use 256 byte for greater efficiency via:
-
-- mount /dev/hda1 /wherever -t ext4dev -o extents
-+ # tune2fs -I 256 /dev/hda1
-
-- - The filesystem is compatible with the ext3 driver until you add a file
-- which has extents (ie: `mount -o extents', then create a file).
-+ (Note: we currently do not have tools to convert an ext4dev
-+ filesystem back to ext3; so please do not do try this on production
-+ filesystems.)
-
-- NOTE: The "extents" mount flag is temporary. It will soon go away and
-- extents will be enabled by the "-o extents" flag to mke2fs or tune2fs
-+ - Mounting:
-+
-+ # mount -t ext4dev /dev/hda1 /wherever
-
- - When comparing performance with other filesystems, remember that
-- ext3/4 by default offers higher data integrity guarantees than most. So
-- when comparing with a metadata-only journalling filesystem, use `mount -o
-- data=writeback'. And you might as well use `mount -o nobh' too along
-- with it. Making the journal larger than the mke2fs default often helps
-- performance with metadata-intensive workloads.
-+ ext3/4 by default offers higher data integrity guarantees than most.
-+ So when comparing with a metadata-only journalling filesystem, such
-+ as ext3, use `mount -o data=writeback'. And you might as well use
-+ `mount -o nobh' too along with it. Making the journal larger than
-+ the mke2fs default often helps performance with metadata-intensive
-+ workloads.
-
- 2. Features
- ===========
-
- 2.1 Currently available
-
--* ability to use filesystems > 16TB
-+* ability to use filesystems > 16TB (e2fsprogs support not available yet)
- * extent format reduces metadata overhead (RAM, IO for access, transactions)
- * extent format more robust in face of on-disk corruption due to magics,
- * internal redunancy in tree
--
--2.1 Previously available, soon to be enabled by default by "mkefs.ext4":
--
--* dir_index and resize inode will be on by default
--* large inodes will be used by default for fast EAs, nsec timestamps, etc
-+* improved file allocation (multi-block alloc)
-+* fix 32000 subdirectory limit
-+* nsec timestamps for mtime, atime, ctime, create time
-+* inode version field on disk (NFSv4, Lustre)
-+* reduced e2fsck time via uninit_bg feature
-+* journal checksumming for robustness, performance
-+* persistent file preallocation (e.g for streaming media, databases)
-+* ability to pack bitmaps and inode tables into larger virtual groups via the
-+ flex_bg feature
-+* large file support
-+* Inode allocation using large virtual block groups via flex_bg
-+* delayed allocation
-+* large block (up to pagesize) support
-+* efficent new ordered mode in JBD2 and ext4(avoid using buffer head to force
-+ the ordering)
-
- 2.2 Candidate features for future inclusion
-
--There are several under discussion, whether they all make it in is
--partly a function of how much time everyone has to work on them:
-+* Online defrag (patches available but not well tested)
-+* reduced mke2fs time via lazy itable initialization in conjuction with
-+ the uninit_bg feature (capability to do this is available in e2fsprogs
-+ but a kernel thread to do lazy zeroing of unused inode table blocks
-+ after filesystem is first mounted is required for safety)
-
--* improved file allocation (multi-block alloc, delayed alloc; basically done)
--* fix 32000 subdirectory limit (patch exists, needs some e2fsck work)
--* nsec timestamps for mtime, atime, ctime, create time (patch exists,
-- needs some e2fsck work)
--* inode version field on disk (NFSv4, Lustre; prototype exists)
--* reduced mke2fs/e2fsck time via uninitialized groups (prototype exists)
--* journal checksumming for robustness, performance (prototype exists)
--* persistent file preallocation (e.g for streaming media, databases)
-+There are several others under discussion, whether they all make it in is
-+partly a function of how much time everyone has to work on them. Features like
-+metadata checksumming have been discussed and planned for a bit but no patches
-+exist yet so I'm not sure they're in the near-term roadmap.
-
--Features like metadata checksumming have been discussed and planned for
--a bit but no patches exist yet so I'm not sure they're in the near-term
--roadmap.
-+The big performance win will come with mballoc, delalloc and flex_bg
-+grouping of bitmaps and inode tables. Some test results available here:
-
--The big performance win will come with mballoc and delalloc. CFS has
--been using mballoc for a few years already with Lustre, and IBM + Bull
--did a lot of benchmarking on it. The reason it isn't in the first set of
--patches is partly a manageability issue, and partly because it doesn't
--directly affect the on-disk format (outside of much better allocation)
--so it isn't critical to get into the first round of changes. I believe
--Alex is working on a new set of patches right now.
-+ - http://www.bullopensource.org/ext4/20080530/ffsb-write-2.6.26-rc2.html
-+ - http://www.bullopensource.org/ext4/20080530/ffsb-readwrite-2.6.26-rc2.html
-
- 3. Options
- ==========
-@@ -222,9 +249,11 @@ stripe=n Number of filesystem blocks that mballoc will try
- to use for allocation size and alignment. For RAID5/6
- systems this should be the number of data
- disks * RAID chunk size in file system blocks.
--
-+delalloc (*) Deferring block allocation until write-out time.
-+nodelalloc Disable delayed allocation. Blocks are allocation
-+ when data is copied from user to page cache.
- Data Mode
-----------
-+=========
- There are 3 different data modes:
-
- * writeback mode
-@@ -236,10 +265,10 @@ typically provide the best ext4 performance.
-
- * ordered mode
- In data=ordered mode, ext4 only officially journals metadata, but it logically
--groups metadata and data blocks into a single unit called a transaction. When
--it's time to write the new metadata out to disk, the associated data blocks
--are written first. In general, this mode performs slightly slower than
--writeback but significantly faster than journal mode.
-+groups metadata information related to data changes with the data blocks into a
-+single unit called a transaction. When it's time to write the new metadata
-+out to disk, the associated data blocks are written first. In general,
-+this mode performs slightly slower than writeback but significantly faster than journal mode.
-
- * journal mode
- data=journal mode provides full data and metadata journaling. All new data is
-@@ -247,7 +276,8 @@ written to the journal first, and then to its final location.
- In the event of a crash, the journal can be replayed, bringing both data and
- metadata into a consistent state. This mode is the slowest except when data
- needs to be read from and written to disk at the same time where it
--outperforms all others modes.
-+outperforms all others modes. Curently ext4 does not have delayed
-+allocation support if this data journalling mode is selected.
-
- References
- ==========
-@@ -256,7 +286,8 @@ kernel source: <file:fs/ext4/>
- <file:fs/jbd2/>
-
- programs: http://e2fsprogs.sourceforge.net/
-- http://ext2resize.sourceforge.net
-
- useful links: http://fedoraproject.org/wiki/ext3-devel
- http://www.bullopensource.org/ext4/
-+ http://ext4.wiki.kernel.org/index.php/Main_Page
-+ http://fedoraproject.org/wiki/Features/Ext4
-diff --git a/fs/buffer.c b/fs/buffer.c
-index 0f51c0f..5fa1512 100644
---- a/fs/buffer.c
-+++ b/fs/buffer.c
-@@ -1691,11 +1691,13 @@ static int __block_write_full_page(struct inode *inode, struct page *page,
- */
- clear_buffer_dirty(bh);
- set_buffer_uptodate(bh);
-- } else if (!buffer_mapped(bh) && buffer_dirty(bh)) {
-+ } else if ((!buffer_mapped(bh) || buffer_delay(bh)) &&
-+ buffer_dirty(bh)) {
- WARN_ON(bh->b_size != blocksize);
- err = get_block(inode, block, bh, 1);
- if (err)
- goto recover;
-+ clear_buffer_delay(bh);
- if (buffer_new(bh)) {
- /* blockdev mappings never come here */
- clear_buffer_new(bh);
-@@ -1774,7 +1776,8 @@ recover:
- bh = head;
- /* Recovery: lock and submit the mapped buffers */
- do {
-- if (buffer_mapped(bh) && buffer_dirty(bh)) {
-+ if (buffer_mapped(bh) && buffer_dirty(bh) &&
-+ !buffer_delay(bh)) {
- lock_buffer(bh);
- mark_buffer_async_write(bh);
- } else {
-@@ -2061,6 +2064,7 @@ int generic_write_end(struct file *file, struct address_space *mapping,
- struct page *page, void *fsdata)
- {
- struct inode *inode = mapping->host;
-+ int i_size_changed = 0;
-
- copied = block_write_end(file, mapping, pos, len, copied, page, fsdata);
-
-@@ -2073,12 +2077,21 @@ int generic_write_end(struct file *file, struct address_space *mapping,
- */
- if (pos+copied > inode->i_size) {
- i_size_write(inode, pos+copied);
-- mark_inode_dirty(inode);
-+ i_size_changed = 1;
- }
-
- unlock_page(page);
- page_cache_release(page);
-
-+ /*
-+ * Don't mark the inode dirty under page lock. First, it unnecessarily
-+ * makes the holding time of page lock longer. Second, it forces lock
-+ * ordering of page lock and transaction start for journaling
-+ * filesystems.
-+ */
-+ if (i_size_changed)
-+ mark_inode_dirty(inode);
-+
- return copied;
- }
- EXPORT_SYMBOL(generic_write_end);
-diff --git a/fs/ext4/acl.c b/fs/ext4/acl.c
-index 3c8dab8..a234b54 100644
---- a/fs/ext4/acl.c
-+++ b/fs/ext4/acl.c
-@@ -40,34 +40,35 @@ ext4_acl_from_disk(const void *value, size_t size)
- acl = posix_acl_alloc(count, GFP_NOFS);
- if (!acl)
- return ERR_PTR(-ENOMEM);
-- for (n=0; n < count; n++) {
-+ for (n = 0; n < count; n++) {
- ext4_acl_entry *entry =
- (ext4_acl_entry *)value;
- if ((char *)value + sizeof(ext4_acl_entry_short) > end)
- goto fail;
- acl->a_entries[n].e_tag = le16_to_cpu(entry->e_tag);
- acl->a_entries[n].e_perm = le16_to_cpu(entry->e_perm);
-- switch(acl->a_entries[n].e_tag) {
-- case ACL_USER_OBJ:
-- case ACL_GROUP_OBJ:
-- case ACL_MASK:
-- case ACL_OTHER:
-- value = (char *)value +
-- sizeof(ext4_acl_entry_short);
-- acl->a_entries[n].e_id = ACL_UNDEFINED_ID;
-- break;
--
-- case ACL_USER:
-- case ACL_GROUP:
-- value = (char *)value + sizeof(ext4_acl_entry);
-- if ((char *)value > end)
-- goto fail;
-- acl->a_entries[n].e_id =
-- le32_to_cpu(entry->e_id);
-- break;
--
-- default:
-+
-+ switch (acl->a_entries[n].e_tag) {
-+ case ACL_USER_OBJ:
-+ case ACL_GROUP_OBJ:
-+ case ACL_MASK:
-+ case ACL_OTHER:
-+ value = (char *)value +
-+ sizeof(ext4_acl_entry_short);
-+ acl->a_entries[n].e_id = ACL_UNDEFINED_ID;
-+ break;
-+
-+ case ACL_USER:
-+ case ACL_GROUP:
-+ value = (char *)value + sizeof(ext4_acl_entry);
-+ if ((char *)value > end)
- goto fail;
-+ acl->a_entries[n].e_id =
-+ le32_to_cpu(entry->e_id);
-+ break;
-+
-+ default:
-+ goto fail;
- }
- }
- if (value != end)
-@@ -96,27 +97,26 @@ ext4_acl_to_disk(const struct posix_acl *acl, size_t *size)
- return ERR_PTR(-ENOMEM);
- ext_acl->a_version = cpu_to_le32(EXT4_ACL_VERSION);
- e = (char *)ext_acl + sizeof(ext4_acl_header);
-- for (n=0; n < acl->a_count; n++) {
-+ for (n = 0; n < acl->a_count; n++) {
- ext4_acl_entry *entry = (ext4_acl_entry *)e;
- entry->e_tag = cpu_to_le16(acl->a_entries[n].e_tag);
- entry->e_perm = cpu_to_le16(acl->a_entries[n].e_perm);
-- switch(acl->a_entries[n].e_tag) {
-- case ACL_USER:
-- case ACL_GROUP:
-- entry->e_id =
-- cpu_to_le32(acl->a_entries[n].e_id);
-- e += sizeof(ext4_acl_entry);
-- break;
--
-- case ACL_USER_OBJ:
-- case ACL_GROUP_OBJ:
-- case ACL_MASK:
-- case ACL_OTHER:
-- e += sizeof(ext4_acl_entry_short);
-- break;
--
-- default:
-- goto fail;
-+ switch (acl->a_entries[n].e_tag) {
-+ case ACL_USER:
-+ case ACL_GROUP:
-+ entry->e_id = cpu_to_le32(acl->a_entries[n].e_id);
-+ e += sizeof(ext4_acl_entry);
-+ break;
-+
-+ case ACL_USER_OBJ:
-+ case ACL_GROUP_OBJ:
-+ case ACL_MASK:
-+ case ACL_OTHER:
-+ e += sizeof(ext4_acl_entry_short);
-+ break;
-+
-+ default:
-+ goto fail;
- }
- }
- return (char *)ext_acl;
-@@ -167,23 +167,23 @@ ext4_get_acl(struct inode *inode, int type)
- if (!test_opt(inode->i_sb, POSIX_ACL))
- return NULL;
-
-- switch(type) {
-- case ACL_TYPE_ACCESS:
-- acl = ext4_iget_acl(inode, &ei->i_acl);
-- if (acl != EXT4_ACL_NOT_CACHED)
-- return acl;
-- name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS;
-- break;
--
-- case ACL_TYPE_DEFAULT:
-- acl = ext4_iget_acl(inode, &ei->i_default_acl);
-- if (acl != EXT4_ACL_NOT_CACHED)
-- return acl;
-- name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT;
-- break;
--
-- default:
-- return ERR_PTR(-EINVAL);
-+ switch (type) {
-+ case ACL_TYPE_ACCESS:
-+ acl = ext4_iget_acl(inode, &ei->i_acl);
-+ if (acl != EXT4_ACL_NOT_CACHED)
-+ return acl;
-+ name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS;
-+ break;
-+
-+ case ACL_TYPE_DEFAULT:
-+ acl = ext4_iget_acl(inode, &ei->i_default_acl);
-+ if (acl != EXT4_ACL_NOT_CACHED)
-+ return acl;
-+ name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT;
-+ break;
-+
-+ default:
-+ return ERR_PTR(-EINVAL);
- }
- retval = ext4_xattr_get(inode, name_index, "", NULL, 0);
- if (retval > 0) {
-@@ -201,14 +201,14 @@ ext4_get_acl(struct inode *inode, int type)
- kfree(value);
-
- if (!IS_ERR(acl)) {
-- switch(type) {
-- case ACL_TYPE_ACCESS:
-- ext4_iset_acl(inode, &ei->i_acl, acl);
-- break;
--
-- case ACL_TYPE_DEFAULT:
-- ext4_iset_acl(inode, &ei->i_default_acl, acl);
-- break;
-+ switch (type) {
-+ case ACL_TYPE_ACCESS:
-+ ext4_iset_acl(inode, &ei->i_acl, acl);
-+ break;
-+
-+ case ACL_TYPE_DEFAULT:
-+ ext4_iset_acl(inode, &ei->i_default_acl, acl);
-+ break;
- }
- }
- return acl;
-@@ -232,31 +232,31 @@ ext4_set_acl(handle_t *handle, struct inode *inode, int type,
- if (S_ISLNK(inode->i_mode))
- return -EOPNOTSUPP;
-
-- switch(type) {
-- case ACL_TYPE_ACCESS:
-- name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS;
-- if (acl) {
-- mode_t mode = inode->i_mode;
-- error = posix_acl_equiv_mode(acl, &mode);
-- if (error < 0)
-- return error;
-- else {
-- inode->i_mode = mode;
-- ext4_mark_inode_dirty(handle, inode);
-- if (error == 0)
-- acl = NULL;
-- }
-+ switch (type) {
-+ case ACL_TYPE_ACCESS:
-+ name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS;
-+ if (acl) {
-+ mode_t mode = inode->i_mode;
-+ error = posix_acl_equiv_mode(acl, &mode);
-+ if (error < 0)
-+ return error;
-+ else {
-+ inode->i_mode = mode;
-+ ext4_mark_inode_dirty(handle, inode);
-+ if (error == 0)
-+ acl = NULL;
- }
-- break;
-+ }
-+ break;
-
-- case ACL_TYPE_DEFAULT:
-- name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT;
-- if (!S_ISDIR(inode->i_mode))
-- return acl ? -EACCES : 0;
-- break;
-+ case ACL_TYPE_DEFAULT:
-+ name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT;
-+ if (!S_ISDIR(inode->i_mode))
-+ return acl ? -EACCES : 0;
-+ break;
-
-- default:
-- return -EINVAL;
-+ default:
-+ return -EINVAL;
- }
- if (acl) {
- value = ext4_acl_to_disk(acl, &size);
-@@ -269,14 +269,14 @@ ext4_set_acl(handle_t *handle, struct inode *inode, int type,
-
- kfree(value);
- if (!error) {
-- switch(type) {
-- case ACL_TYPE_ACCESS:
-- ext4_iset_acl(inode, &ei->i_acl, acl);
-- break;
--
-- case ACL_TYPE_DEFAULT:
-- ext4_iset_acl(inode, &ei->i_default_acl, acl);
-- break;
-+ switch (type) {
-+ case ACL_TYPE_ACCESS:
-+ ext4_iset_acl(inode, &ei->i_acl, acl);
-+ break;
+Theodore Ts'o (9):
+ ext4: Add support for non-native signed/unsigned htree hash algorithms
+ ext4: tone down ext4_da_writepages warnings
+ jbd2: Add barrier not supported test to journal_wait_on_commit_record
+ ext4: Add sanity checks for the superblock before mounting the filesystem
+ ext4: only use i_size_high for regular files
+ ext4: Add sanity check to make_indexed_dir
+ ext3: Add sanity check to make_indexed_dir
+ jbd2: On a __journal_expect() assertion failure printk "JBD2", not "EXT3-fs"
+ ext4: Initialize the new group descriptor when resizing the filesystem
+
+Yasunori Goto (1):
+ ext4: Widen type of ext4_sb_info.s_mb_maxs[]
+
+diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c
+index a48e965..83bd869 100644
+--- a/fs/ext3/namei.c
++++ b/fs/ext3/namei.c
+@@ -1357,7 +1357,7 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
+ struct fake_dirent *fde;
+
+ blocksize = dir->i_sb->s_blocksize;
+- dxtrace(printk("Creating index\n"));
++ dxtrace(printk(KERN_DEBUG "Creating index: inode %lu\n", dir->i_ino));
+ retval = ext3_journal_get_write_access(handle, bh);
+ if (retval) {
+ ext3_std_error(dir->i_sb, retval);
+@@ -1366,6 +1366,19 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
+ }
+ root = (struct dx_root *) bh->b_data;
+
++ /* The 0th block becomes the root, move the dirents out */
++ fde = &root->dotdot;
<<Diff was trimmed, longer than 597 lines>>
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/kernel-ext4.patch?r1=1.1&r2=1.1.2.1&f=u
More information about the pld-cvs-commit
mailing list