1 Index: linux-2.4.21-suse/fs/ext3/namei.c
2 ===================================================================
3 --- linux-2.4.21-suse.orig/fs/ext3/namei.c 2003-10-30 02:17:22.000000000 +0300
4 +++ linux-2.4.21-suse/fs/ext3/namei.c 2003-10-30 02:20:53.000000000 +0300
6 struct super_block *sb = inode->i_sb;
12 + down(&EXT3_SB(sb)->s_orphan_lock);
13 if (!list_empty(&EXT3_I(inode)->i_orphan))
17 jbd_debug(4, "orphan inode %ld will point to %d\n",
18 inode->i_ino, NEXT_ORPHAN(inode));
21 + up(&EXT3_SB(sb)->s_orphan_lock);
22 ext3_std_error(inode->i_sb, err);
25 @@ -1808,20 +1808,19 @@
26 int ext3_orphan_del(handle_t *handle, struct inode *inode)
28 struct list_head *prev;
29 - struct ext3_sb_info *sbi;
30 + struct ext3_sb_info *sbi = EXT3_SB(inode->i_sb);
31 unsigned long ino_next;
32 struct ext3_iloc iloc;
35 - lock_super(inode->i_sb);
36 + down(&sbi->s_orphan_lock);
37 if (list_empty(&inode->u.ext3_i.i_orphan)) {
38 - unlock_super(inode->i_sb);
39 + up(&sbi->s_orphan_lock);
43 ino_next = NEXT_ORPHAN(inode);
44 prev = inode->u.ext3_i.i_orphan.prev;
45 - sbi = EXT3_SB(inode->i_sb);
47 jbd_debug(4, "remove inode %lu from orphan list\n", inode->i_ino);
51 ext3_std_error(inode->i_sb, err);
53 - unlock_super(inode->i_sb);
54 + up(&sbi->s_orphan_lock);
58 Index: linux-2.4.21-suse/fs/ext3/super.c
59 ===================================================================
60 --- linux-2.4.21-suse.orig/fs/ext3/super.c 2003-10-30 02:17:22.000000000 +0300
61 +++ linux-2.4.21-suse/fs/ext3/super.c 2003-10-30 02:17:22.000000000 +0300
64 sb->s_op = &ext3_sops;
65 INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */
66 + sema_init(&sbi->s_orphan_lock, 1);
70 Index: linux-2.4.21-suse/include/linux/ext3_fs_sb.h
71 ===================================================================
72 --- linux-2.4.21-suse.orig/include/linux/ext3_fs_sb.h 2003-10-30 02:17:22.000000000 +0300
73 +++ linux-2.4.21-suse/include/linux/ext3_fs_sb.h 2003-10-30 02:17:22.000000000 +0300
75 struct inode * s_journal_inode;
76 struct journal_s * s_journal;
77 struct list_head s_orphan;
78 + struct semaphore s_orphan_lock;
79 unsigned long s_commit_interval;
80 struct block_device *journal_bdev;
81 #ifdef CONFIG_JBD_DEBUG