Commit 08d8e9749e7f0435ba4683b620e8d30d59276b4c
Committed by
Linus Torvalds
1 parent
2c13657910
Exists in
master
and in
39 other branches
writeback: fix ntfs with sb_has_dirty_inodes()
NTFS's if-condition on dirty inodes is not complete. Fix it with sb_has_dirty_inodes(). Cc: Anton Altaparmakov <aia21@cantab.net> Cc: Ken Chen <kenchen@google.com> Signed-off-by: Fengguang Wu <wfg@mail.ustc.edu.cn> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 3 changed files with 12 additions and 3 deletions Side-by-side Diff
fs/fs-writeback.c
... | ... | @@ -199,6 +199,14 @@ |
199 | 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 | 211 | * Write a single inode's dirty pages and inode data out to disk. |
204 | 212 | * If `wait' is set, wait on the writeout. |
... | ... | @@ -497,7 +505,7 @@ |
497 | 505 | restart: |
498 | 506 | sb = sb_entry(super_blocks.prev); |
499 | 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 | 509 | /* we're making our own get_super here */ |
502 | 510 | sb->s_count++; |
503 | 511 | spin_unlock(&sb_lock); |
fs/ntfs/super.c
... | ... | @@ -2381,14 +2381,14 @@ |
2381 | 2381 | */ |
2382 | 2382 | ntfs_commit_inode(vol->mft_ino); |
2383 | 2383 | write_inode_now(vol->mft_ino, 1); |
2384 | - if (!list_empty(&sb->s_dirty)) { | |
2384 | + if (sb_has_dirty_inodes(sb)) { | |
2385 | 2385 | const char *s1, *s2; |
2386 | 2386 | |
2387 | 2387 | mutex_lock(&vol->mft_ino->i_mutex); |
2388 | 2388 | truncate_inode_pages(vol->mft_ino->i_mapping, 0); |
2389 | 2389 | mutex_unlock(&vol->mft_ino->i_mutex); |
2390 | 2390 | write_inode_now(vol->mft_ino, 1); |
2391 | - if (!list_empty(&sb->s_dirty)) { | |
2391 | + if (sb_has_dirty_inodes(sb)) { | |
2392 | 2392 | static const char *_s1 = "inodes"; |
2393 | 2393 | static const char *_s2 = ""; |
2394 | 2394 | s1 = _s1; |
include/linux/fs.h
... | ... | @@ -1729,6 +1729,7 @@ |
1729 | 1729 | extern int set_blocksize(struct block_device *, int); |
1730 | 1730 | extern int sb_set_blocksize(struct super_block *, int); |
1731 | 1731 | extern int sb_min_blocksize(struct super_block *, int); |
1732 | +extern int sb_has_dirty_inodes(struct super_block *); | |
1732 | 1733 | |
1733 | 1734 | extern int generic_file_mmap(struct file *, struct vm_area_struct *); |
1734 | 1735 | extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *); |