.. | .. |
---|
38 | 38 | |
---|
39 | 39 | BUG_ON(!S_ISREG(inode->i_mode)); |
---|
40 | 40 | |
---|
41 | | - if (atomic_add_unless(&REISERFS_I(inode)->openers, -1, 1)) |
---|
| 41 | + if (!atomic_dec_and_mutex_lock(&REISERFS_I(inode)->openers, |
---|
| 42 | + &REISERFS_I(inode)->tailpack)) |
---|
42 | 43 | return 0; |
---|
43 | | - |
---|
44 | | - mutex_lock(&REISERFS_I(inode)->tailpack); |
---|
45 | | - |
---|
46 | | - if (!atomic_dec_and_test(&REISERFS_I(inode)->openers)) { |
---|
47 | | - mutex_unlock(&REISERFS_I(inode)->tailpack); |
---|
48 | | - return 0; |
---|
49 | | - } |
---|
50 | 44 | |
---|
51 | 45 | /* fast out for when nothing needs to be done */ |
---|
52 | 46 | if ((!(REISERFS_I(inode)->i_flags & i_pack_on_close_mask) || |
---|
.. | .. |
---|
165 | 159 | barrier_done = reiserfs_commit_for_inode(inode); |
---|
166 | 160 | reiserfs_write_unlock(inode->i_sb); |
---|
167 | 161 | if (barrier_done != 1 && reiserfs_barrier_flush(inode->i_sb)) |
---|
168 | | - blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL); |
---|
| 162 | + blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL); |
---|
169 | 163 | inode_unlock(inode); |
---|
170 | 164 | if (barrier_done < 0) |
---|
171 | 165 | return barrier_done; |
---|