diff options
author | Brian Foster <bfoster@redhat.com> | 2016-07-26 18:21:53 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-07-26 19:19:19 -0400 |
commit | 9a46b04f16a032c26bbf0ece61d6cd1e7ba9f627 (patch) | |
tree | cbada1a63f5655cfeb77cb540cdd2236475090d3 /fs/fs-writeback.c | |
parent | 6c60d2b5746cf23025ffe71bd7ff9075048fc90c (diff) |
fs/fs-writeback.c: inode writeback list tracking tracepoints
The per-sb inode writeback list tracks inodes currently under writeback
to facilitate efficient sync processing. In particular, it ensures that
sync only needs to walk through a list of inodes that were cleaned by
the sync.
Add a couple tracepoints to help identify when inodes are added/removed
to and from the writeback lists. Piggyback off of the writeback
lazytime tracepoint template as it already tracks the relevant inode
information.
Link: http://lkml.kernel.org/r/1466594593-6757-3-git-send-email-bfoster@redhat.com
Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Cc: Dave Chinner <dchinner@redhat.com>
cc: Josef Bacik <jbacik@fb.com>
Cc: Holger Hoffstätte <holger.hoffstaette@applied-asynchrony.com>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/fs-writeback.c')
-rw-r--r-- | fs/fs-writeback.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 1fcce8345da3..6f9c9f6f5157 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c | |||
@@ -990,8 +990,10 @@ void sb_mark_inode_writeback(struct inode *inode) | |||
990 | 990 | ||
991 | if (list_empty(&inode->i_wb_list)) { | 991 | if (list_empty(&inode->i_wb_list)) { |
992 | spin_lock_irqsave(&sb->s_inode_wblist_lock, flags); | 992 | spin_lock_irqsave(&sb->s_inode_wblist_lock, flags); |
993 | if (list_empty(&inode->i_wb_list)) | 993 | if (list_empty(&inode->i_wb_list)) { |
994 | list_add_tail(&inode->i_wb_list, &sb->s_inodes_wb); | 994 | list_add_tail(&inode->i_wb_list, &sb->s_inodes_wb); |
995 | trace_sb_mark_inode_writeback(inode); | ||
996 | } | ||
995 | spin_unlock_irqrestore(&sb->s_inode_wblist_lock, flags); | 997 | spin_unlock_irqrestore(&sb->s_inode_wblist_lock, flags); |
996 | } | 998 | } |
997 | } | 999 | } |
@@ -1006,7 +1008,10 @@ void sb_clear_inode_writeback(struct inode *inode) | |||
1006 | 1008 | ||
1007 | if (!list_empty(&inode->i_wb_list)) { | 1009 | if (!list_empty(&inode->i_wb_list)) { |
1008 | spin_lock_irqsave(&sb->s_inode_wblist_lock, flags); | 1010 | spin_lock_irqsave(&sb->s_inode_wblist_lock, flags); |
1009 | list_del_init(&inode->i_wb_list); | 1011 | if (!list_empty(&inode->i_wb_list)) { |
1012 | list_del_init(&inode->i_wb_list); | ||
1013 | trace_sb_clear_inode_writeback(inode); | ||
1014 | } | ||
1010 | spin_unlock_irqrestore(&sb->s_inode_wblist_lock, flags); | 1015 | spin_unlock_irqrestore(&sb->s_inode_wblist_lock, flags); |
1011 | } | 1016 | } |
1012 | } | 1017 | } |