Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / kernel_patches / patches / ext3-orphan_lock.patch
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
3 @@ -1406,8 +1409,8 @@
4         struct super_block *sb = inode->i_sb;
5         struct ext3_iloc iloc;
6         int err = 0, rc;
7 -       
8 -       lock_super(sb);
9 +
10 +       down(&EXT3_SB(sb)->s_orphan_lock);
11         if (!list_empty(&EXT3_I(inode)->i_orphan))
12                 goto out_unlock;
13  
14 @@ -1455,7 +1458,7 @@
15         jbd_debug(4, "orphan inode %ld will point to %d\n",
16                         inode->i_ino, NEXT_ORPHAN(inode));
17  out_unlock:
18 -       unlock_super(sb);
19 +       up(&EXT3_SB(sb)->s_orphan_lock);
20         ext3_std_error(inode->i_sb, err);
21         return err;
22  }
23 @@ -1468,20 +1471,19 @@
24  {
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;
31         int err = 0;
32  
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);
38                 return 0;
39         }
40  
41         ino_next = NEXT_ORPHAN(inode);
42         prev = ei->i_orphan.prev;
43 -       sbi = EXT3_SB(inode->i_sb);
44  
45         jbd_debug(4, "remove inode %lu from orphan list\n", inode->i_ino);
46  
47 @@ -1525,10 +1527,10 @@
48         if (err)
49                 goto out_brelse;
50  
51 -out_err: 
52 +out_err:
53         ext3_std_error(inode->i_sb, err);
54  out:
55 -       unlock_super(inode->i_sb);
56 +       up(&sbi->s_orphan_lock);
57         return err;
58  
59  out_brelse:
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
62 @@ -1134,6 +1314,7 @@
63          */
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);
67  
68         sb->s_root = 0;
69  
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
72 @@ -67,6 +69,7 @@
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