diff options
author | Christoph Hellwig <hch@lst.de> | 2009-05-11 17:35:03 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2009-06-11 21:36:09 -0400 |
commit | ebc1ac164560a241d9bf1b7519062910c3f90a01 (patch) | |
tree | db17fd3043b15f8269cce2c2d00213814022fc30 /fs/sync.c | |
parent | 01ba687577647beef6c5f2ea59bfb56fac9fcde2 (diff) |
->write_super lock_super pushdown
Push down lock_super into ->write_super instances and remove it from the
caller.
Following filesystem don't need ->s_lock in ->write_super and are skipped:
* bfs, nilfs2 - no other uses of s_lock and have internal locks in
->write_super
* ext2 - uses BKL in ext2_write_super and has internal calls without s_lock
* reiserfs - no other uses of s_lock as has reiserfs_write_lock (BKL) in
->write_super
* xfs - no other uses of s_lock and uses internal lock (buffer lock on
superblock buffer) to serialize ->write_super. Also xfs_fs_write_super
is superflous and will go away in the next merge window
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/sync.c')
-rw-r--r-- | fs/sync.c | 4 |
1 files changed, 0 insertions, 4 deletions
@@ -33,10 +33,8 @@ static int __sync_filesystem(struct super_block *sb, int wait) | |||
33 | else | 33 | else |
34 | sync_quota_sb(sb, -1); | 34 | sync_quota_sb(sb, -1); |
35 | sync_inodes_sb(sb, wait); | 35 | sync_inodes_sb(sb, wait); |
36 | lock_super(sb); | ||
37 | if (sb->s_dirt && sb->s_op->write_super) | 36 | if (sb->s_dirt && sb->s_op->write_super) |
38 | sb->s_op->write_super(sb); | 37 | sb->s_op->write_super(sb); |
39 | unlock_super(sb); | ||
40 | if (sb->s_op->sync_fs) | 38 | if (sb->s_op->sync_fs) |
41 | sb->s_op->sync_fs(sb, wait); | 39 | sb->s_op->sync_fs(sb, wait); |
42 | return __sync_blockdev(sb->s_bdev, wait); | 40 | return __sync_blockdev(sb->s_bdev, wait); |
@@ -164,10 +162,8 @@ int file_fsync(struct file *filp, struct dentry *dentry, int datasync) | |||
164 | 162 | ||
165 | /* sync the superblock to buffers */ | 163 | /* sync the superblock to buffers */ |
166 | sb = inode->i_sb; | 164 | sb = inode->i_sb; |
167 | lock_super(sb); | ||
168 | if (sb->s_dirt && sb->s_op->write_super) | 165 | if (sb->s_dirt && sb->s_op->write_super) |
169 | sb->s_op->write_super(sb); | 166 | sb->s_op->write_super(sb); |
170 | unlock_super(sb); | ||
171 | 167 | ||
172 | /* .. finally sync the buffers to disk */ | 168 | /* .. finally sync the buffers to disk */ |
173 | err = sync_blockdev(sb->s_bdev); | 169 | err = sync_blockdev(sb->s_bdev); |