- 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;
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)
*/
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;
}
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
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
#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
#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: