From cc212be717ba15355c367a764ecd7b8930aeb54b Mon Sep 17 00:00:00 2001 From: Fengguang Wu Date: Tue, 16 Oct 2007 23:30:39 -0700 Subject: [PATCH] --- yaml --- r: 70733 b: refs/heads/master c: 08d8e9749e7f0435ba4683b620e8d30d59276b4c h: refs/heads/master i: 70731: de7dab7f6d88e24617b665f45fc05a86c434a1a5 v: v3 --- [refs] | 2 +- trunk/fs/fs-writeback.c | 10 +++++++++- trunk/fs/ntfs/super.c | 4 ++-- trunk/include/linux/fs.h | 1 + 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index f2a1f2b0ffbe..2469bf720fa3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2c1365791048e8aff42138ed5f6040b3c7824a69 +refs/heads/master: 08d8e9749e7f0435ba4683b620e8d30d59276b4c diff --git a/trunk/fs/fs-writeback.c b/trunk/fs/fs-writeback.c index 1f22fb5217c0..414df43706c7 100644 --- a/trunk/fs/fs-writeback.c +++ b/trunk/fs/fs-writeback.c @@ -199,6 +199,14 @@ static void queue_io(struct super_block *sb, move_expired_inodes(&sb->s_dirty, &sb->s_io, older_than_this); } +int sb_has_dirty_inodes(struct super_block *sb) +{ + return !list_empty(&sb->s_dirty) || + !list_empty(&sb->s_io) || + !list_empty(&sb->s_more_io); +} +EXPORT_SYMBOL(sb_has_dirty_inodes); + /* * Write a single inode's dirty pages and inode data out to disk. * If `wait' is set, wait on the writeout. @@ -497,7 +505,7 @@ writeback_inodes(struct writeback_control *wbc) restart: sb = sb_entry(super_blocks.prev); for (; sb != sb_entry(&super_blocks); sb = sb_entry(sb->s_list.prev)) { - if (!list_empty(&sb->s_dirty) || !list_empty(&sb->s_io)) { + if (sb_has_dirty_inodes(sb)) { /* we're making our own get_super here */ sb->s_count++; spin_unlock(&sb_lock); diff --git a/trunk/fs/ntfs/super.c b/trunk/fs/ntfs/super.c index ad2124573024..3e76f3b216bc 100644 --- a/trunk/fs/ntfs/super.c +++ b/trunk/fs/ntfs/super.c @@ -2381,14 +2381,14 @@ static void ntfs_put_super(struct super_block *sb) */ ntfs_commit_inode(vol->mft_ino); write_inode_now(vol->mft_ino, 1); - if (!list_empty(&sb->s_dirty)) { + if (sb_has_dirty_inodes(sb)) { const char *s1, *s2; mutex_lock(&vol->mft_ino->i_mutex); truncate_inode_pages(vol->mft_ino->i_mapping, 0); mutex_unlock(&vol->mft_ino->i_mutex); write_inode_now(vol->mft_ino, 1); - if (!list_empty(&sb->s_dirty)) { + if (sb_has_dirty_inodes(sb)) { static const char *_s1 = "inodes"; static const char *_s2 = ""; s1 = _s1; diff --git a/trunk/include/linux/fs.h b/trunk/include/linux/fs.h index 0b38a897c114..b70331f9f5b7 100644 --- a/trunk/include/linux/fs.h +++ b/trunk/include/linux/fs.h @@ -1729,6 +1729,7 @@ extern int bdev_read_only(struct block_device *); extern int set_blocksize(struct block_device *, int); extern int sb_set_blocksize(struct super_block *, int); extern int sb_min_blocksize(struct super_block *, int); +extern int sb_has_dirty_inodes(struct super_block *); extern int generic_file_mmap(struct file *, struct vm_area_struct *); extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *);