1 --- linux/fs/ext3/namei.c.orig Fri Mar 14 14:11:58 2003
2 +++ linux/fs/ext3/namei.c Fri Mar 14 14:39:48 2003
4 struct super_block *sb = inode->i_sb;
10 + down(&EXT3_SB(sb)->s_orphan_lock);
11 if (!list_empty(&EXT3_I(inode)->i_orphan))
15 jbd_debug(4, "orphan inode %ld will point to %d\n",
16 inode->i_ino, NEXT_ORPHAN(inode));
19 + up(&EXT3_SB(sb)->s_orphan_lock);
20 ext3_std_error(inode->i_sb, err);
23 @@ -1468,20 +1471,19 @@
25 struct list_head *prev;
26 struct ext3_inode_info *ei = EXT3_I(inode);
27 - struct ext3_sb_info *sbi;
28 + struct ext3_sb_info *sbi = EXT3_SB(inode->i_sb);
29 unsigned long ino_next;
30 struct ext3_iloc iloc;
33 - lock_super(inode->i_sb);
34 + down(&sbi->s_orphan_lock);
35 if (list_empty(&ei->i_orphan)) {
36 - unlock_super(inode->i_sb);
37 + up(&sbi->s_orphan_lock);
41 ino_next = NEXT_ORPHAN(inode);
42 prev = ei->i_orphan.prev;
43 - sbi = EXT3_SB(inode->i_sb);
45 jbd_debug(4, "remove inode %lu from orphan list\n", inode->i_ino);
47 @@ -1525,10 +1527,10 @@
53 ext3_std_error(inode->i_sb, err);
55 - unlock_super(inode->i_sb);
56 + up(&sbi->s_orphan_lock);
60 --- linux/fs/ext3/super.c.orig Fri Mar 14 14:11:58 2003
61 +++ linux/fs/ext3/super.c Fri Mar 14 14:36:00 2003
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 --- linux/include/linux/ext3_fs_sb.h.orig Tue Feb 11 16:34:33 2003
71 +++ linux/include/linux/ext3_fs_sb.h Fri Mar 14 14:30:11 2003
73 struct inode * s_journal_inode;
74 struct journal_s * s_journal;
75 struct list_head s_orphan;
76 + struct semaphore s_orphan_lock;
77 unsigned long s_commit_interval;
78 struct block_device *journal_bdev;
79 #ifdef CONFIG_JBD_DEBUG