From 41f5d1be45caa7707a28180855e67958466ba113 Mon Sep 17 00:00:00 2001 From: nikita Date: Wed, 4 Oct 2006 11:38:44 +0000 Subject: [PATCH] ext3_handle_error(): add sump_stack() to track bug 11023 --- .../kernel_patches/patches/ext3-iam-separate.patch | 90 +++++++------- lustre/kernel_patches/patches/ext3-iam-uapi.patch | 22 ++-- .../patches/ext3-orphans-delay.patch | 138 ++++++++++++++++++++- 3 files changed, 190 insertions(+), 60 deletions(-) diff --git a/lustre/kernel_patches/patches/ext3-iam-separate.patch b/lustre/kernel_patches/patches/ext3-iam-separate.patch index de5954c..e7cfaa6 100644 --- a/lustre/kernel_patches/patches/ext3-iam-separate.patch +++ b/lustre/kernel_patches/patches/ext3-iam-separate.patch @@ -1,7 +1,7 @@ Index: iam/fs/ext3/Makefile =================================================================== ---- iam.orig/fs/ext3/Makefile 2006-09-28 22:11:14.000000000 +0400 -+++ iam/fs/ext3/Makefile 2006-10-03 22:00:23.000000000 +0400 +--- iam.orig/fs/ext3/Makefile 2006-10-04 15:05:21.000000000 +0400 ++++ iam/fs/ext3/Makefile 2006-10-04 15:07:04.000000000 +0400 @@ -6,7 +6,7 @@ obj-$(CONFIG_EXT3_FS) += ext3.o ext3-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \ @@ -14,7 +14,7 @@ Index: iam/fs/ext3/Makefile Index: iam/fs/ext3/iam.c =================================================================== --- iam.orig/fs/ext3/iam.c 2004-04-06 17:27:52.000000000 +0400 -+++ iam/fs/ext3/iam.c 2006-10-03 21:15:25.000000000 +0400 ++++ iam/fs/ext3/iam.c 2006-10-04 15:05:22.000000000 +0400 @@ -0,0 +1,1337 @@ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: @@ -1356,7 +1356,7 @@ Index: iam/fs/ext3/iam.c Index: iam/fs/ext3/iam_htree.c =================================================================== --- iam.orig/fs/ext3/iam_htree.c 2004-04-06 17:27:52.000000000 +0400 -+++ iam/fs/ext3/iam_htree.c 2006-10-03 21:14:41.000000000 +0400 ++++ iam/fs/ext3/iam_htree.c 2006-10-04 15:05:22.000000000 +0400 @@ -0,0 +1,668 @@ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: @@ -2029,7 +2029,7 @@ Index: iam/fs/ext3/iam_htree.c Index: iam/fs/ext3/iam_lfix.c =================================================================== --- iam.orig/fs/ext3/iam_lfix.c 2004-04-06 17:27:52.000000000 +0400 -+++ iam/fs/ext3/iam_lfix.c 2006-10-03 21:14:08.000000000 +0400 ++++ iam/fs/ext3/iam_lfix.c 2006-10-04 15:05:22.000000000 +0400 @@ -0,0 +1,675 @@ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: @@ -2709,7 +2709,7 @@ Index: iam/fs/ext3/iam_lfix.c Index: iam/fs/ext3/iam_lvar.c =================================================================== --- iam.orig/fs/ext3/iam_lvar.c 2004-04-06 17:27:52.000000000 +0400 -+++ iam/fs/ext3/iam_lvar.c 2006-10-03 21:14:26.000000000 +0400 ++++ iam/fs/ext3/iam_lvar.c 2006-10-04 15:05:22.000000000 +0400 @@ -0,0 +1,902 @@ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: @@ -3615,8 +3615,8 @@ Index: iam/fs/ext3/iam_lvar.c + Index: iam/fs/ext3/namei.c =================================================================== ---- iam.orig/fs/ext3/namei.c 2006-09-28 22:11:15.000000000 +0400 -+++ iam/fs/ext3/namei.c 2006-10-03 22:00:07.000000000 +0400 +--- iam.orig/fs/ext3/namei.c 2006-10-04 15:05:22.000000000 +0400 ++++ iam/fs/ext3/namei.c 2006-10-04 15:06:20.000000000 +0400 @@ -24,81 +24,6 @@ * Theodore Ts'o, 2002 */ @@ -4153,13 +4153,15 @@ Index: iam/fs/ext3/namei.c } -static inline unsigned dx_root_limit(struct iam_path *p) --{ ++int dx_index_is_compat(struct iam_path *path) + { - struct iam_descr *param = path_descr(p); - unsigned entry_space = path_obj(p)->i_sb->s_blocksize - - param->id_root_gap; - return entry_space / (param->id_key_size + param->id_ptr_size); --} -- ++ return iam_path_descr(path) == &iam_htree_compat_param; + } + -static inline unsigned dx_node_limit(struct iam_path *p) -{ - struct iam_descr *param = path_descr(p); @@ -4169,12 +4171,10 @@ Index: iam/fs/ext3/namei.c -} - -static inline int dx_index_is_compat(struct iam_path *path) -+int dx_index_is_compat(struct iam_path *path) - { +-{ - return path_descr(path) == &htree_compat_param; -+ return iam_path_descr(path) == &iam_htree_compat_param; - } - +-} +- -static struct iam_entry *dx_get_entries(struct iam_path *path, void *data, - int root) -{ @@ -4321,10 +4321,13 @@ Index: iam/fs/ext3/namei.c } /* -@@ -800,598 +232,116 @@ struct stats dx_show_entries(struct dx_h - } - #endif /* DX_DEBUG */ - +@@ -797,601 +229,119 @@ struct stats dx_show_entries(struct dx_h + printk("%snames %u, fullness %u (%u%%)\n", levels?"":" ", + names, space/bcount,(space/bcount)*100/blocksize); + return (struct stats) { names, space, bcount}; +-} +-#endif /* DX_DEBUG */ +- -static int dx_lookup(struct iam_path *path) -{ - u32 ptr; @@ -4685,8 +4688,7 @@ Index: iam/fs/ext3/namei.c -} - -static int split_leaf_node(handle_t *handle, struct iam_path *path) -+int dx_lookup(struct iam_path *path) - { +-{ - struct inode *dir = path_obj(path); - unsigned continued = 0; - struct buffer_head *bh2; @@ -4754,7 +4756,11 @@ Index: iam/fs/ext3/namei.c - */ -int iam_insert(handle_t *handle, struct iam_container *c, struct iam_key *k, - struct iam_rec *r) --{ ++} ++#endif /* DX_DEBUG */ ++ ++int dx_lookup(struct iam_path *path) + { - struct dx_hash_info hinfo; - struct iam_path_compat cpath; - struct iam_path *path = &cpath.ipc_path; @@ -5273,7 +5279,7 @@ Index: iam/fs/ext3/namei.c err = ext3_journal_dirty_metadata (handle, bh2); if (err) goto journal_error; -@@ -2175,6 +1172,67 @@ errout: +@@ -2175,6 +1172,63 @@ errout: } #endif @@ -5294,14 +5300,10 @@ Index: iam/fs/ext3/namei.c + offset = 0; + while ((char *) de <= top) { + if (!ext3_check_dir_entry("ext3_add_entry", -+ dir, de, bh, offset)) { -+ brelse(bh); ++ dir, de, bh, offset)) + return ERR_PTR(-EIO); -+ } -+ if (ext3_match(namelen, name, de)) { -+ brelse(bh); ++ if (ext3_match(namelen, name, de)) + return ERR_PTR(-EEXIST); -+ } + nlen = EXT3_DIR_REC_LEN(de->name_len); + rlen = le16_to_cpu(de->rec_len); + if ((de->inode? rlen - nlen: rlen) >= reclen) @@ -5341,7 +5343,7 @@ Index: iam/fs/ext3/namei.c /* * Add a new entry into a directory (leaf) block. If de is non-NULL, -@@ -2194,34 +1252,16 @@ static int add_dirent_to_buf(handle_t *h +@@ -2194,34 +1248,16 @@ static int add_dirent_to_buf(handle_t *h struct inode *dir = dentry->d_parent->d_inode; const char *name = dentry->d_name.name; int namelen = dentry->d_name.len; @@ -5383,7 +5385,7 @@ Index: iam/fs/ext3/namei.c } BUFFER_TRACE(bh, "get_write_access"); err = ext3_journal_get_write_access(handle, bh); -@@ -2232,22 +1272,9 @@ static int add_dirent_to_buf(handle_t *h +@@ -2232,22 +1268,9 @@ static int add_dirent_to_buf(handle_t *h } /* By now the buffer is marked for journaling */ @@ -5409,7 +5411,7 @@ Index: iam/fs/ext3/namei.c /* * XXX shouldn't update any times until successful * completion of syscall, but too many callers depend -@@ -2423,19 +1450,58 @@ static int ext3_add_entry (handle_t *han +@@ -2423,19 +1446,58 @@ static int ext3_add_entry (handle_t *han return add_dirent_to_buf(handle, dentry, inode, de, bh); } @@ -5471,7 +5473,7 @@ Index: iam/fs/ext3/namei.c frame = path->ip_frame; entries = frame->entries; -@@ -2474,7 +1540,8 @@ static int split_index_node(handle_t *ha +@@ -2474,7 +1536,8 @@ static int split_index_node(handle_t *ha for (frame = safe + 1, i = 0; i < nr_splet; ++i, ++frame) { bh_new[i] = ext3_append (handle, dir, &newblock[i], &err); if (!bh_new[i] || @@ -5481,7 +5483,7 @@ Index: iam/fs/ext3/namei.c goto cleanup; BUFFER_TRACE(frame->bh, "get_write_access"); err = ext3_journal_get_write_access(handle, frame->bh); -@@ -2493,6 +1560,7 @@ static int split_index_node(handle_t *ha +@@ -2493,6 +1556,7 @@ static int split_index_node(handle_t *ha unsigned count; int idx; struct buffer_head *bh2; @@ -5489,7 +5491,7 @@ Index: iam/fs/ext3/namei.c entries = frame->entries; count = dx_get_count(entries); -@@ -2501,6 +1569,7 @@ static int split_index_node(handle_t *ha +@@ -2501,6 +1565,7 @@ static int split_index_node(handle_t *ha bh2 = bh_new[i]; entries2 = dx_get_entries(path, bh2->b_data, 0); @@ -5497,7 +5499,7 @@ Index: iam/fs/ext3/namei.c if (frame == path->ip_frames) { /* splitting root node. Tricky point: * -@@ -2512,22 +1581,20 @@ static int split_index_node(handle_t *ha +@@ -2512,22 +1577,20 @@ static int split_index_node(handle_t *ha * capacity of the root node is smaller than that of * non-root one. */ @@ -5526,7 +5528,7 @@ Index: iam/fs/ext3/namei.c /* Shift frames in the path */ memmove(frames + 2, frames + 1, -@@ -2536,49 +1603,61 @@ static int split_index_node(handle_t *ha +@@ -2536,49 +1599,61 @@ static int split_index_node(handle_t *ha frames[1].at = iam_entry_shift(path, entries2, idx); frames[1].entries = entries = entries2; frames[1].bh = bh2; @@ -5611,7 +5613,7 @@ Index: iam/fs/ext3/namei.c } goto cleanup; journal_error: -@@ -2610,7 +1689,7 @@ static int ext3_dx_add_entry(handle_t *h +@@ -2610,7 +1685,7 @@ static int ext3_dx_add_entry(handle_t *h size_t isize; iam_path_compat_init(&cpath, dir); @@ -5620,7 +5622,7 @@ Index: iam/fs/ext3/namei.c err = dx_probe(dentry, NULL, &hinfo, path); if (err != 0) -@@ -2620,8 +1699,9 @@ static int ext3_dx_add_entry(handle_t *h +@@ -2620,8 +1695,9 @@ static int ext3_dx_add_entry(handle_t *h /* XXX nikita: global serialization! */ isize = dir->i_size; @@ -5632,7 +5634,7 @@ Index: iam/fs/ext3/namei.c if (err != 0) goto cleanup; -@@ -2641,11 +1721,11 @@ static int ext3_dx_add_entry(handle_t *h +@@ -2641,11 +1717,11 @@ static int ext3_dx_add_entry(handle_t *h goto cleanup; /*copy split inode too*/ @@ -5646,7 +5648,7 @@ Index: iam/fs/ext3/namei.c err = add_dirent_to_buf(handle, dentry, inode, de, bh); goto cleanup2; -@@ -2758,12 +1838,12 @@ static struct inode * ext3_new_inode_wan +@@ -2758,12 +1834,12 @@ static struct inode * ext3_new_inode_wan * is so far negative - it has no inode. * * If the create succeeds, we fill in the inode information @@ -5663,8 +5665,8 @@ Index: iam/fs/ext3/namei.c Index: iam/include/linux/lustre_iam.h =================================================================== ---- iam.orig/include/linux/lustre_iam.h 2006-09-28 22:11:15.000000000 +0400 -+++ iam/include/linux/lustre_iam.h 2006-10-03 22:00:23.000000000 +0400 +--- iam.orig/include/linux/lustre_iam.h 2006-10-04 15:05:22.000000000 +0400 ++++ iam/include/linux/lustre_iam.h 2006-10-04 15:07:04.000000000 +0400 @@ -1,9 +1,68 @@ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: diff --git a/lustre/kernel_patches/patches/ext3-iam-uapi.patch b/lustre/kernel_patches/patches/ext3-iam-uapi.patch index bdaafec..b8801af 100644 --- a/lustre/kernel_patches/patches/ext3-iam-uapi.patch +++ b/lustre/kernel_patches/patches/ext3-iam-uapi.patch @@ -1,7 +1,7 @@ Index: iam/fs/ext3/Makefile =================================================================== ---- iam.orig/fs/ext3/Makefile 2006-10-03 22:00:23.000000000 +0400 -+++ iam/fs/ext3/Makefile 2006-10-03 22:00:24.000000000 +0400 +--- iam.orig/fs/ext3/Makefile 2006-10-04 15:07:04.000000000 +0400 ++++ iam/fs/ext3/Makefile 2006-10-04 15:07:05.000000000 +0400 @@ -6,7 +6,7 @@ obj-$(CONFIG_EXT3_FS) += ext3.o ext3-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o iopen.o \ @@ -13,8 +13,8 @@ Index: iam/fs/ext3/Makefile ext3-$(CONFIG_EXT3_FS_POSIX_ACL) += acl.o Index: iam/fs/ext3/dir.c =================================================================== ---- iam.orig/fs/ext3/dir.c 2006-10-03 22:00:23.000000000 +0400 -+++ iam/fs/ext3/dir.c 2006-10-03 22:00:24.000000000 +0400 +--- iam.orig/fs/ext3/dir.c 2006-10-04 15:07:04.000000000 +0400 ++++ iam/fs/ext3/dir.c 2006-10-04 15:07:05.000000000 +0400 @@ -28,6 +28,7 @@ #include #include @@ -112,8 +112,8 @@ Index: iam/fs/ext3/dir.c (filp->f_version != inode->i_version)) { Index: iam/fs/ext3/file.c =================================================================== ---- iam.orig/fs/ext3/file.c 2006-10-03 22:00:23.000000000 +0400 -+++ iam/fs/ext3/file.c 2006-10-03 22:00:24.000000000 +0400 +--- iam.orig/fs/ext3/file.c 2006-10-04 15:07:04.000000000 +0400 ++++ iam/fs/ext3/file.c 2006-10-04 15:07:05.000000000 +0400 @@ -23,6 +23,7 @@ #include #include @@ -156,7 +156,7 @@ Index: iam/fs/ext3/file.c Index: iam/fs/ext3/iam-uapi.c =================================================================== --- iam.orig/fs/ext3/iam-uapi.c 2004-04-06 17:27:52.000000000 +0400 -+++ iam/fs/ext3/iam-uapi.c 2006-10-03 22:00:24.000000000 +0400 ++++ iam/fs/ext3/iam-uapi.c 2006-10-04 15:07:05.000000000 +0400 @@ -0,0 +1,368 @@ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: @@ -528,8 +528,8 @@ Index: iam/fs/ext3/iam-uapi.c +} Index: iam/fs/ext3/ioctl.c =================================================================== ---- iam.orig/fs/ext3/ioctl.c 2006-10-03 22:00:23.000000000 +0400 -+++ iam/fs/ext3/ioctl.c 2006-10-03 22:00:24.000000000 +0400 +--- iam.orig/fs/ext3/ioctl.c 2006-10-04 15:07:04.000000000 +0400 ++++ iam/fs/ext3/ioctl.c 2006-10-04 15:07:05.000000000 +0400 @@ -250,6 +250,6 @@ flags_err: @@ -540,8 +540,8 @@ Index: iam/fs/ext3/ioctl.c } Index: iam/include/linux/lustre_iam.h =================================================================== ---- iam.orig/include/linux/lustre_iam.h 2006-10-03 22:00:23.000000000 +0400 -+++ iam/include/linux/lustre_iam.h 2006-10-03 22:00:24.000000000 +0400 +--- iam.orig/include/linux/lustre_iam.h 2006-10-04 15:07:04.000000000 +0400 ++++ iam/include/linux/lustre_iam.h 2006-10-04 15:07:05.000000000 +0400 @@ -30,9 +30,6 @@ #ifndef __LINUX_LUSTRE_IAM_H__ #define __LINUX_LUSTRE_IAM_H__ diff --git a/lustre/kernel_patches/patches/ext3-orphans-delay.patch b/lustre/kernel_patches/patches/ext3-orphans-delay.patch index f3c68d4..2b3a55ec 100644 --- a/lustre/kernel_patches/patches/ext3-orphans-delay.patch +++ b/lustre/kernel_patches/patches/ext3-orphans-delay.patch @@ -1,8 +1,83 @@ Index: iam/fs/ext3/super.c =================================================================== ---- iam.orig/fs/ext3/super.c 2006-10-03 22:00:23.000000000 +0400 -+++ iam/fs/ext3/super.c 2006-10-03 22:00:24.000000000 +0400 -@@ -1168,8 +1168,8 @@ static int ext3_check_descriptors (struc +--- iam.orig/fs/ext3/super.c 2006-10-04 15:07:04.000000000 +0400 ++++ iam/fs/ext3/super.c 2006-10-04 15:07:05.000000000 +0400 +@@ -51,13 +51,13 @@ static void ext3_clear_journal_err(struc + struct ext3_super_block * es); + static int ext3_sync_fs(struct super_block *sb, int wait); + +-/* ++/* + * Wrappers for journal_start/end. + * + * The only special thing we need to do here is to make sure that all + * journal_end calls result in the superblock being marked dirty, so + * that sync() will call the filesystem's write_super callback if +- * appropriate. ++ * appropriate. + */ + handle_t *ext3_journal_start_sb(struct super_block *sb, int nblocks) + { +@@ -79,11 +79,11 @@ handle_t *ext3_journal_start_sb(struct s + return journal_start(journal, nblocks); + } + +-/* ++/* + * The only special thing we need to do here is to make sure that all + * journal_stop calls result in the superblock being marked dirty, so + * that sync() will call the filesystem's write_super callback if +- * appropriate. ++ * appropriate. + */ + int __ext3_journal_stop(const char *where, handle_t *handle) + { +@@ -117,7 +117,7 @@ void ext3_journal_abort_handle(const cha + if (is_handle_aborted(handle)) + return; + +- printk(KERN_ERR "%s: aborting transaction: %s in %s\n", ++ printk(KERN_ERR "%s: aborting transaction: %s in %s\n", + caller, errstr, err_fn); + + journal_abort_handle(handle); +@@ -147,6 +147,8 @@ static void ext3_handle_error(struct sup + EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS; + es->s_state |= cpu_to_le16(EXT3_ERROR_FS); + ++ dump_stack(); ++ + if (sb->s_flags & MS_RDONLY) + return; + +@@ -374,7 +376,7 @@ static void dump_orphan_list(struct supe + { + struct list_head *l; + +- printk(KERN_ERR "sb orphan head is %d\n", ++ printk(KERN_ERR "sb orphan head is %d\n", + le32_to_cpu(sbi->s_es->s_last_orphan)); + + printk(KERN_ERR "sb_info orphan list:\n"); +@@ -383,7 +385,7 @@ static void dump_orphan_list(struct supe + printk(KERN_ERR " " + "inode %s:%ld at %p: mode %o, nlink %d, next %d\n", + inode->i_sb->s_id, inode->i_ino, inode, +- inode->i_mode, inode->i_nlink, ++ inode->i_mode, inode->i_nlink, + NEXT_ORPHAN(inode)); + } + } +@@ -486,7 +488,7 @@ static void init_once(void * foo, kmem_c + inode_init_once(&ei->vfs_inode); + } + } +- ++ + static int init_inodecache(void) + { + ext3_inode_cachep = kmem_cache_create("ext3_inode_cache", +@@ -1168,8 +1170,8 @@ static int ext3_check_descriptors (struc * e2fsck was run on this filesystem, and it must have already done the orphan * inode cleanup for us, so we can safely abort without any further action. */ @@ -13,7 +88,7 @@ Index: iam/fs/ext3/super.c { unsigned int s_flags = sb->s_flags; int nr_orphans = 0, nr_truncates = 0; -@@ -1256,7 +1256,9 @@ static void ext3_orphan_cleanup (struct +@@ -1256,7 +1258,9 @@ static void ext3_orphan_cleanup (struct } #endif sb->s_flags = s_flags; /* Restore MS_RDONLY status */ @@ -23,7 +98,51 @@ Index: iam/fs/ext3/super.c #define log2(n) ffz(~(n)) -@@ -1682,9 +1684,8 @@ static int ext3_fill_super (struct super +@@ -1362,7 +1366,7 @@ static int ext3_fill_super (struct super + sb->s_magic = le16_to_cpu(es->s_magic); + if (sb->s_magic != EXT3_SUPER_MAGIC) { + if (!silent) +- printk(KERN_ERR ++ printk(KERN_ERR + "VFS: Can't find ext3 filesystem on dev %s.\n", + sb->s_id); + goto failed_mount; +@@ -1408,7 +1412,7 @@ static int ext3_fill_super (struct super + (EXT3_HAS_COMPAT_FEATURE(sb, ~0U) || + EXT3_HAS_RO_COMPAT_FEATURE(sb, ~0U) || + EXT3_HAS_INCOMPAT_FEATURE(sb, ~0U))) +- printk(KERN_WARNING ++ printk(KERN_WARNING + "EXT3-fs warning: feature flags set on rev 0 fs, " + "running e2fsck is recommended\n"); + /* +@@ -1434,7 +1438,7 @@ static int ext3_fill_super (struct super + + if (blocksize < EXT3_MIN_BLOCK_SIZE || + blocksize > EXT3_MAX_BLOCK_SIZE) { +- printk(KERN_ERR ++ printk(KERN_ERR + "EXT3-fs: Unsupported filesystem blocksize %d on %s.\n", + blocksize, sb->s_id); + goto failed_mount; +@@ -1458,14 +1462,14 @@ static int ext3_fill_super (struct super + offset = (sb_block * EXT3_MIN_BLOCK_SIZE) % blocksize; + bh = sb_bread(sb, logic_sb_block); + if (!bh) { +- printk(KERN_ERR ++ printk(KERN_ERR + "EXT3-fs: Can't read superblock on 2nd try.\n"); + goto failed_mount; + } + es = (struct ext3_super_block *)(((char *)bh->b_data) + offset); + sbi->s_es = es; + if (es->s_magic != cpu_to_le16(EXT3_SUPER_MAGIC)) { +- printk (KERN_ERR ++ printk (KERN_ERR + "EXT3-fs: Magic mismatch, very weird !\n"); + goto failed_mount; + } +@@ -1682,9 +1686,8 @@ static int ext3_fill_super (struct super * superblock lock. */ EXT3_SB(sb)->s_mount_state |= EXT3_ORPHAN_FS; @@ -35,3 +154,12 @@ Index: iam/fs/ext3/super.c printk (KERN_INFO "EXT3-fs: recovery complete.\n"); ext3_mark_recovery_complete(sb, es); printk (KERN_INFO "EXT3-fs: mounted filesystem with %s data mode.\n", +@@ -1728,7 +1731,7 @@ out_fail: + /* + * Setup any per-fs journal parameters now. We'll do this both on + * initial mount, once the journal has been initialised but before we've +- * done any recovery; and again on any subsequent remount. ++ * done any recovery; and again on any subsequent remount. + */ + static void ext3_init_journal_params(struct super_block *sb, journal_t *journal) + { -- 1.8.3.1