From ec6a34e4fbd96c0d0c15f3e87d436346902b171d Mon Sep 17 00:00:00 2001 From: alex Date: Tue, 2 Sep 2003 07:45:41 +0000 Subject: [PATCH] - ext3 mount option 'pdirops' added - uninitialized i_rename_sem bug fixed --- .../patches/ext3-pdirops-2.4.18-chaos.patch | 54 +++++++++++++++------- 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/lustre/kernel_patches/patches/ext3-pdirops-2.4.18-chaos.patch b/lustre/kernel_patches/patches/ext3-pdirops-2.4.18-chaos.patch index 82097e7..1d6be03 100644 --- a/lustre/kernel_patches/patches/ext3-pdirops-2.4.18-chaos.patch +++ b/lustre/kernel_patches/patches/ext3-pdirops-2.4.18-chaos.patch @@ -1,13 +1,13 @@ - fs/ext3/ialloc.c | 2 - fs/ext3/inode.c | 2 - fs/ext3/namei.c | 580 +++++++++++++++++++++++++++++++++++++--------- - fs/ext3/super.c | 6 + fs/ext3/ialloc.c | 3 + fs/ext3/inode.c | 3 + fs/ext3/namei.c | 582 +++++++++++++++++++++++++++++++++++++--------- + fs/ext3/super.c | 11 include/linux/ext3_fs.h | 1 include/linux/ext3_fs_i.h | 6 - 6 files changed, 489 insertions(+), 108 deletions(-) + 6 files changed, 497 insertions(+), 109 deletions(-) --- linux-2.4.18/fs/ext3/namei.c~ext3-pdirops-2.4.18-chaos 2003-09-01 14:58:06.000000000 +0400 -+++ linux-2.4.18-alexey/fs/ext3/namei.c 2003-09-01 17:52:47.000000000 +0400 ++++ linux-2.4.18-alexey/fs/ext3/namei.c 2003-09-02 10:40:18.000000000 +0400 @@ -52,6 +52,9 @@ static struct buffer_head *ext3_append(h { struct buffer_head *bh; @@ -748,10 +748,11 @@ struct super_block * sb = dir->i_sb; struct ext3_dir_entry_2 *de; int err; +- +- frame = dx_probe(dentry, 0, &hinfo, frames, &err); + int curidx; + void *idx_lock, *leaf_lock, *newleaf_lock; - -- frame = dx_probe(dentry, 0, &hinfo, frames, &err); ++ +repeat: + frame = dx_probe(&dentry->d_name, dir, &hinfo, frames, &err); if (!frame) @@ -1134,7 +1135,7 @@ */ struct inode_operations ext3_dir_inode_operations = { --- linux-2.4.18/fs/ext3/super.c~ext3-pdirops-2.4.18-chaos 2003-09-01 16:33:25.000000000 +0400 -+++ linux-2.4.18-alexey/fs/ext3/super.c 2003-09-01 16:36:16.000000000 +0400 ++++ linux-2.4.18-alexey/fs/ext3/super.c 2003-09-02 11:18:00.000000000 +0400 @@ -786,6 +786,8 @@ static int parse_options (char * options return 0; } @@ -1144,7 +1145,17 @@ else if (!strcmp (this_char, "grpid") || !strcmp (this_char, "bsdgroups")) set_opt (*mount_options, GRPID); -@@ -969,6 +971,10 @@ static int ext3_setup_super(struct super +@@ -812,6 +814,9 @@ static int parse_options (char * options + if (want_numeric(value, "sb", sb_block)) + return 0; + } ++ else if (!strcmp (this_char, "pdirops")) { ++ set_opt (sbi->s_mount_opt, PDIROPS); ++ } + #ifdef CONFIG_JBD_DEBUG + else if (!strcmp (this_char, "ro-after")) { + unsigned long v; +@@ -969,6 +974,10 @@ static int ext3_setup_super(struct super ext3_check_inodes_bitmap (sb); } #endif @@ -1155,8 +1166,17 @@ setup_ro_after(sb); return res; } +@@ -1463,6 +1472,8 @@ struct super_block * ext3_read_super (st + test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered": + "writeback"); + ++ if (test_opt(sb, PDIROPS)) ++ sb->s_flags |= S_PDIROPS; + return sb; + + failed_mount3: --- linux-2.4.18/include/linux/ext3_fs.h~ext3-pdirops-2.4.18-chaos 2003-09-01 14:58:06.000000000 +0400 -+++ linux-2.4.18-alexey/include/linux/ext3_fs.h 2003-09-01 16:36:16.000000000 +0400 ++++ linux-2.4.18-alexey/include/linux/ext3_fs.h 2003-09-01 17:56:13.000000000 +0400 @@ -310,6 +310,7 @@ struct ext3_inode { /* * Mount flags @@ -1166,7 +1186,7 @@ #define EXT3_MOUNT_GRPID 0x0004 /* Create files with directory's group */ #define EXT3_MOUNT_DEBUG 0x0008 /* Some debugging messages */ --- linux-2.4.18/include/linux/ext3_fs_i.h~ext3-pdirops-2.4.18-chaos 2003-08-29 11:57:30.000000000 +0400 -+++ linux-2.4.18-alexey/include/linux/ext3_fs_i.h 2003-09-01 16:36:16.000000000 +0400 ++++ linux-2.4.18-alexey/include/linux/ext3_fs_i.h 2003-09-01 17:56:13.000000000 +0400 @@ -17,6 +17,7 @@ #define _LINUX_EXT3_FS_I @@ -1188,24 +1208,26 @@ #endif /* _LINUX_EXT3_FS_I */ --- linux-2.4.18/fs/ext3/inode.c~ext3-pdirops-2.4.18-chaos 2003-09-01 16:33:25.000000000 +0400 -+++ linux-2.4.18-alexey/fs/ext3/inode.c 2003-09-01 17:53:33.000000000 +0400 -@@ -2454,6 +2454,8 @@ void ext3_read_inode(struct inode * inod ++++ linux-2.4.18-alexey/fs/ext3/inode.c 2003-09-02 10:39:36.000000000 +0400 +@@ -2454,6 +2454,9 @@ void ext3_read_inode(struct inode * inod } else if (S_ISDIR(inode->i_mode)) { inode->i_op = &ext3_dir_inode_operations; inode->i_fop = &ext3_dir_operations; + dynlock_init(&EXT3_I(inode)->i_htree_lock); + sema_init(&EXT3_I(inode)->i_rename_sem, 1); ++ sema_init(&EXT3_I(inode)->i_append_sem, 1); } else if (S_ISLNK(inode->i_mode)) { if (ext3_inode_is_fast_symlink(inode)) inode->i_op = &ext3_fast_symlink_inode_operations; --- linux-2.4.18/fs/ext3/ialloc.c~ext3-pdirops-2.4.18-chaos 2003-09-01 14:58:05.000000000 +0400 -+++ linux-2.4.18-alexey/fs/ext3/ialloc.c 2003-09-01 17:55:45.000000000 +0400 -@@ -601,6 +601,8 @@ repeat: ++++ linux-2.4.18-alexey/fs/ext3/ialloc.c 2003-09-02 10:39:50.000000000 +0400 +@@ -601,6 +601,9 @@ repeat: return ERR_PTR(-EDQUOT); } ext3_debug ("allocating inode %lu\n", inode->i_ino); + dynlock_init(&EXT3_I(inode)->i_htree_lock); + sema_init(&EXT3_I(inode)->i_rename_sem, 1); ++ sema_init(&EXT3_I(inode)->i_append_sem, 1); return inode; fail: -- 1.8.3.1