| .. | .. |
|---|
| 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; |
|---|