diff options
-rw-r--r-- | fs/fs-writeback.c | 10 | ||||
-rw-r--r-- | fs/ntfs/super.c | 4 | ||||
-rw-r--r-- | include/linux/fs.h | 1 |
3 files changed, 12 insertions, 3 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 1f22fb5217c0..414df43706c7 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c | |||
@@ -199,6 +199,14 @@ static void queue_io(struct super_block *sb, | |||
199 | move_expired_inodes(&sb->s_dirty, &sb->s_io, older_than_this); | 199 | move_expired_inodes(&sb->s_dirty, &sb->s_io, older_than_this); |
200 | } | 200 | } |
201 | 201 | ||
202 | int sb_has_dirty_inodes(struct super_block *sb) | ||
203 | { | ||
204 | return !list_empty(&sb->s_dirty) || | ||
205 | !list_empty(&sb->s_io) || | ||
206 | !list_empty(&sb->s_more_io); | ||
207 | } | ||
208 | EXPORT_SYMBOL(sb_has_dirty_inodes); | ||
209 | |||
202 | /* | 210 | /* |
203 | * Write a single inode's dirty pages and inode data out to disk. | 211 | * Write a single inode's dirty pages and inode data out to disk. |
204 | * If `wait' is set, wait on the writeout. | 212 | * If `wait' is set, wait on the writeout. |
@@ -497,7 +505,7 @@ writeback_inodes(struct writeback_control *wbc) | |||
497 | restart: | 505 | restart: |
498 | sb = sb_entry(super_blocks.prev); | 506 | sb = sb_entry(super_blocks.prev); |
499 | for (; sb != sb_entry(&super_blocks); sb = sb_entry(sb->s_list.prev)) { | 507 | for (; sb != sb_entry(&super_blocks); sb = sb_entry(sb->s_list.prev)) { |
500 | if (!list_empty(&sb->s_dirty) || !list_empty(&sb->s_io)) { | 508 | if (sb_has_dirty_inodes(sb)) { |
501 | /* we're making our own get_super here */ | 509 | /* we're making our own get_super here */ |
502 | sb->s_count++; | 510 | sb->s_count++; |
503 | spin_unlock(&sb_lock); | 511 | spin_unlock(&sb_lock); |
diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c index ad2124573024..3e76f3b216bc 100644 --- a/fs/ntfs/super.c +++ b/fs/ntfs/super.c | |||
@@ -2381,14 +2381,14 @@ static void ntfs_put_super(struct super_block *sb) | |||
2381 | */ | 2381 | */ |
2382 | ntfs_commit_inode(vol->mft_ino); | 2382 | ntfs_commit_inode(vol->mft_ino); |
2383 | write_inode_now(vol->mft_ino, 1); | 2383 | write_inode_now(vol->mft_ino, 1); |
2384 | if (!list_empty(&sb->s_dirty)) { | 2384 | if (sb_has_dirty_inodes(sb)) { |
2385 | const char *s1, *s2; | 2385 | const char *s1, *s2; |
2386 | 2386 | ||
2387 | mutex_lock(&vol->mft_ino->i_mutex); | 2387 | mutex_lock(&vol->mft_ino->i_mutex); |
2388 | truncate_inode_pages(vol->mft_ino->i_mapping, 0); | 2388 | truncate_inode_pages(vol->mft_ino->i_mapping, 0); |
2389 | mutex_unlock(&vol->mft_ino->i_mutex); | 2389 | mutex_unlock(&vol->mft_ino->i_mutex); |
2390 | write_inode_now(vol->mft_ino, 1); | 2390 | write_inode_now(vol->mft_ino, 1); |
2391 | if (!list_empty(&sb->s_dirty)) { | 2391 | if (sb_has_dirty_inodes(sb)) { |
2392 | static const char *_s1 = "inodes"; | 2392 | static const char *_s1 = "inodes"; |
2393 | static const char *_s2 = ""; | 2393 | static const char *_s2 = ""; |
2394 | s1 = _s1; | 2394 | s1 = _s1; |
diff --git a/include/linux/fs.h b/include/linux/fs.h index 0b38a897c114..b70331f9f5b7 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -1729,6 +1729,7 @@ extern int bdev_read_only(struct block_device *); | |||
1729 | extern int set_blocksize(struct block_device *, int); | 1729 | extern int set_blocksize(struct block_device *, int); |
1730 | extern int sb_set_blocksize(struct super_block *, int); | 1730 | extern int sb_set_blocksize(struct super_block *, int); |
1731 | extern int sb_min_blocksize(struct super_block *, int); | 1731 | extern int sb_min_blocksize(struct super_block *, int); |
1732 | extern int sb_has_dirty_inodes(struct super_block *); | ||
1732 | 1733 | ||
1733 | extern int generic_file_mmap(struct file *, struct vm_area_struct *); | 1734 | extern int generic_file_mmap(struct file *, struct vm_area_struct *); |
1734 | extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *); | 1735 | extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *); |