diff options
author | Oleg Nesterov <oleg@redhat.com> | 2015-07-19 17:48:20 -0400 |
---|---|---|
committer | Oleg Nesterov <oleg@redhat.com> | 2015-08-15 07:52:08 -0400 |
commit | bee9182d955227f01ff3b80c4cb6acca9bb40b11 (patch) | |
tree | 3237b122991b6f44913f47561e52c344d7725fb1 | |
parent | 45e38cff4fce8d6871b5fa5e734e4dc9814d6056 (diff) |
introduce __sb_writers_{acquired,release}() helpers
Preparation to hide the sb->s_writers internals from xfs and btrfs.
Add 2 trivial define's they can use rather than play with ->s_writers
directly. No changes in btrfs/transaction.o and xfs/xfs_aops.o.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Reviewed-by: Jan Kara <jack@suse.com>
-rw-r--r-- | fs/btrfs/transaction.c | 8 | ||||
-rw-r--r-- | fs/xfs/xfs_aops.c | 6 | ||||
-rw-r--r-- | include/linux/fs.h | 5 |
3 files changed, 9 insertions, 10 deletions
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c index f5021fcb154e..a8ab8f5ef38e 100644 --- a/fs/btrfs/transaction.c +++ b/fs/btrfs/transaction.c | |||
@@ -1638,9 +1638,7 @@ static void do_async_commit(struct work_struct *work) | |||
1638 | * Tell lockdep about it. | 1638 | * Tell lockdep about it. |
1639 | */ | 1639 | */ |
1640 | if (ac->newtrans->type & __TRANS_FREEZABLE) | 1640 | if (ac->newtrans->type & __TRANS_FREEZABLE) |
1641 | rwsem_acquire_read( | 1641 | __sb_writers_acquired(ac->root->fs_info->sb, SB_FREEZE_FS); |
1642 | &ac->root->fs_info->sb->s_writers.lock_map[SB_FREEZE_FS-1], | ||
1643 | 0, 1, _THIS_IP_); | ||
1644 | 1642 | ||
1645 | current->journal_info = ac->newtrans; | 1643 | current->journal_info = ac->newtrans; |
1646 | 1644 | ||
@@ -1679,9 +1677,7 @@ int btrfs_commit_transaction_async(struct btrfs_trans_handle *trans, | |||
1679 | * async commit thread will be the one to unlock it. | 1677 | * async commit thread will be the one to unlock it. |
1680 | */ | 1678 | */ |
1681 | if (ac->newtrans->type & __TRANS_FREEZABLE) | 1679 | if (ac->newtrans->type & __TRANS_FREEZABLE) |
1682 | rwsem_release( | 1680 | __sb_writers_release(root->fs_info->sb, SB_FREEZE_FS); |
1683 | &root->fs_info->sb->s_writers.lock_map[SB_FREEZE_FS-1], | ||
1684 | 1, _THIS_IP_); | ||
1685 | 1681 | ||
1686 | schedule_work(&ac->work); | 1682 | schedule_work(&ac->work); |
1687 | 1683 | ||
diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c index 3859f5e27a4d..9bbb3507376a 100644 --- a/fs/xfs/xfs_aops.c +++ b/fs/xfs/xfs_aops.c | |||
@@ -119,8 +119,7 @@ xfs_setfilesize_trans_alloc( | |||
119 | * We may pass freeze protection with a transaction. So tell lockdep | 119 | * We may pass freeze protection with a transaction. So tell lockdep |
120 | * we released it. | 120 | * we released it. |
121 | */ | 121 | */ |
122 | rwsem_release(&ioend->io_inode->i_sb->s_writers.lock_map[SB_FREEZE_FS-1], | 122 | __sb_writers_release(ioend->io_inode->i_sb, SB_FREEZE_FS); |
123 | 1, _THIS_IP_); | ||
124 | /* | 123 | /* |
125 | * We hand off the transaction to the completion thread now, so | 124 | * We hand off the transaction to the completion thread now, so |
126 | * clear the flag here. | 125 | * clear the flag here. |
@@ -171,8 +170,7 @@ xfs_setfilesize_ioend( | |||
171 | * Similarly for freeze protection. | 170 | * Similarly for freeze protection. |
172 | */ | 171 | */ |
173 | current_set_flags_nested(&tp->t_pflags, PF_FSTRANS); | 172 | current_set_flags_nested(&tp->t_pflags, PF_FSTRANS); |
174 | rwsem_acquire_read(&VFS_I(ip)->i_sb->s_writers.lock_map[SB_FREEZE_FS-1], | 173 | __sb_writers_acquired(VFS_I(ip)->i_sb, SB_FREEZE_FS); |
175 | 0, 1, _THIS_IP_); | ||
176 | 174 | ||
177 | return xfs_setfilesize(ip, tp, ioend->io_offset, ioend->io_size); | 175 | return xfs_setfilesize(ip, tp, ioend->io_offset, ioend->io_size); |
178 | } | 176 | } |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 84b783f277f7..acb7cad84edd 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1391,6 +1391,11 @@ extern struct timespec current_fs_time(struct super_block *sb); | |||
1391 | void __sb_end_write(struct super_block *sb, int level); | 1391 | void __sb_end_write(struct super_block *sb, int level); |
1392 | int __sb_start_write(struct super_block *sb, int level, bool wait); | 1392 | int __sb_start_write(struct super_block *sb, int level, bool wait); |
1393 | 1393 | ||
1394 | #define __sb_writers_acquired(sb, lev) \ | ||
1395 | rwsem_acquire_read(&(sb)->s_writers.lock_map[(lev)-1], 0, 1, _THIS_IP_) | ||
1396 | #define __sb_writers_release(sb, lev) \ | ||
1397 | rwsem_release(&(sb)->s_writers.lock_map[(lev)-1], 1, _THIS_IP_) | ||
1398 | |||
1394 | /** | 1399 | /** |
1395 | * sb_end_write - drop write access to a superblock | 1400 | * sb_end_write - drop write access to a superblock |
1396 | * @sb: the super we wrote to | 1401 | * @sb: the super we wrote to |