diff options
author | Jiaying Zhang <jiayingz@google.com> | 2011-03-21 21:38:05 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2011-03-21 21:38:05 -0400 |
commit | 0562e0bad483d10e9651fbb8f21dc3d0bad57374 (patch) | |
tree | 19f6597f92c028badcb6df360ccac22240378e25 /fs | |
parent | 4596fe07679ff0fae904515691ea747467614871 (diff) |
ext4: add more tracepoints and use dev_t in the trace buffer
- Add more ext4 tracepoints.
- Change ext4 tracepoints to use dev_t field with MAJOR/MINOR macros
so that we can save 4 bytes in the ring buffer on some platforms.
- Add sync_mode to ext4_da_writepages, ext4_da_write_pages, and
ext4_da_writepages_result tracepoints. Also remove for_reclaim
field from ext4_da_writepages since it is usually not very useful.
Signed-off-by: Jiaying Zhang <jiayingz@google.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ext4/balloc.c | 3 | ||||
-rw-r--r-- | fs/ext4/extents.c | 13 | ||||
-rw-r--r-- | fs/ext4/fsync.c | 14 | ||||
-rw-r--r-- | fs/ext4/ialloc.c | 1 | ||||
-rw-r--r-- | fs/ext4/inode.c | 24 | ||||
-rw-r--r-- | fs/ext4/namei.c | 3 |
6 files changed, 49 insertions, 9 deletions
diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index adf96b822781..97b970e7dd13 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c | |||
@@ -21,6 +21,8 @@ | |||
21 | #include "ext4_jbd2.h" | 21 | #include "ext4_jbd2.h" |
22 | #include "mballoc.h" | 22 | #include "mballoc.h" |
23 | 23 | ||
24 | #include <trace/events/ext4.h> | ||
25 | |||
24 | /* | 26 | /* |
25 | * balloc.c contains the blocks allocation and deallocation routines | 27 | * balloc.c contains the blocks allocation and deallocation routines |
26 | */ | 28 | */ |
@@ -342,6 +344,7 @@ ext4_read_block_bitmap(struct super_block *sb, ext4_group_t block_group) | |||
342 | * We do it here so the bitmap uptodate bit | 344 | * We do it here so the bitmap uptodate bit |
343 | * get set with buffer lock held. | 345 | * get set with buffer lock held. |
344 | */ | 346 | */ |
347 | trace_ext4_read_block_bitmap_load(sb, block_group); | ||
345 | set_bitmap_uptodate(bh); | 348 | set_bitmap_uptodate(bh); |
346 | if (bh_submit_read(bh) < 0) { | 349 | if (bh_submit_read(bh) < 0) { |
347 | put_bh(bh); | 350 | put_bh(bh); |
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 9ea1bc64ca6d..f46f6e3c02d7 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c | |||
@@ -44,6 +44,8 @@ | |||
44 | #include "ext4_jbd2.h" | 44 | #include "ext4_jbd2.h" |
45 | #include "ext4_extents.h" | 45 | #include "ext4_extents.h" |
46 | 46 | ||
47 | #include <trace/events/ext4.h> | ||
48 | |||
47 | static int ext4_ext_truncate_extend_restart(handle_t *handle, | 49 | static int ext4_ext_truncate_extend_restart(handle_t *handle, |
48 | struct inode *inode, | 50 | struct inode *inode, |
49 | int needed) | 51 | int needed) |
@@ -664,6 +666,8 @@ ext4_ext_find_extent(struct inode *inode, ext4_lblk_t block, | |||
664 | if (unlikely(!bh)) | 666 | if (unlikely(!bh)) |
665 | goto err; | 667 | goto err; |
666 | if (!bh_uptodate_or_lock(bh)) { | 668 | if (!bh_uptodate_or_lock(bh)) { |
669 | trace_ext4_ext_load_extent(inode, block, | ||
670 | path[ppos].p_block); | ||
667 | if (bh_submit_read(bh) < 0) { | 671 | if (bh_submit_read(bh) < 0) { |
668 | put_bh(bh); | 672 | put_bh(bh); |
669 | goto err; | 673 | goto err; |
@@ -3297,7 +3301,7 @@ int ext4_ext_map_blocks(handle_t *handle, struct inode *inode, | |||
3297 | struct ext4_ext_path *path = NULL; | 3301 | struct ext4_ext_path *path = NULL; |
3298 | struct ext4_extent_header *eh; | 3302 | struct ext4_extent_header *eh; |
3299 | struct ext4_extent newex, *ex; | 3303 | struct ext4_extent newex, *ex; |
3300 | ext4_fsblk_t newblock; | 3304 | ext4_fsblk_t newblock = 0; |
3301 | int err = 0, depth, ret; | 3305 | int err = 0, depth, ret; |
3302 | unsigned int allocated = 0; | 3306 | unsigned int allocated = 0; |
3303 | struct ext4_allocation_request ar; | 3307 | struct ext4_allocation_request ar; |
@@ -3305,6 +3309,7 @@ int ext4_ext_map_blocks(handle_t *handle, struct inode *inode, | |||
3305 | 3309 | ||
3306 | ext_debug("blocks %u/%u requested for inode %lu\n", | 3310 | ext_debug("blocks %u/%u requested for inode %lu\n", |
3307 | map->m_lblk, map->m_len, inode->i_ino); | 3311 | map->m_lblk, map->m_len, inode->i_ino); |
3312 | trace_ext4_ext_map_blocks_enter(inode, map->m_lblk, map->m_len, flags); | ||
3308 | 3313 | ||
3309 | /* check in cache */ | 3314 | /* check in cache */ |
3310 | if (ext4_ext_in_cache(inode, map->m_lblk, &newex)) { | 3315 | if (ext4_ext_in_cache(inode, map->m_lblk, &newex)) { |
@@ -3525,6 +3530,8 @@ out2: | |||
3525 | ext4_ext_drop_refs(path); | 3530 | ext4_ext_drop_refs(path); |
3526 | kfree(path); | 3531 | kfree(path); |
3527 | } | 3532 | } |
3533 | trace_ext4_ext_map_blocks_exit(inode, map->m_lblk, | ||
3534 | newblock, map->m_len, err ? err : allocated); | ||
3528 | return err ? err : allocated; | 3535 | return err ? err : allocated; |
3529 | } | 3536 | } |
3530 | 3537 | ||
@@ -3658,6 +3665,7 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len) | |||
3658 | if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) | 3665 | if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) |
3659 | return -EOPNOTSUPP; | 3666 | return -EOPNOTSUPP; |
3660 | 3667 | ||
3668 | trace_ext4_fallocate_enter(inode, offset, len, mode); | ||
3661 | map.m_lblk = offset >> blkbits; | 3669 | map.m_lblk = offset >> blkbits; |
3662 | /* | 3670 | /* |
3663 | * We can't just convert len to max_blocks because | 3671 | * We can't just convert len to max_blocks because |
@@ -3673,6 +3681,7 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len) | |||
3673 | ret = inode_newsize_ok(inode, (len + offset)); | 3681 | ret = inode_newsize_ok(inode, (len + offset)); |
3674 | if (ret) { | 3682 | if (ret) { |
3675 | mutex_unlock(&inode->i_mutex); | 3683 | mutex_unlock(&inode->i_mutex); |
3684 | trace_ext4_fallocate_exit(inode, offset, max_blocks, ret); | ||
3676 | return ret; | 3685 | return ret; |
3677 | } | 3686 | } |
3678 | retry: | 3687 | retry: |
@@ -3717,6 +3726,8 @@ retry: | |||
3717 | goto retry; | 3726 | goto retry; |
3718 | } | 3727 | } |
3719 | mutex_unlock(&inode->i_mutex); | 3728 | mutex_unlock(&inode->i_mutex); |
3729 | trace_ext4_fallocate_exit(inode, offset, max_blocks, | ||
3730 | ret > 0 ? ret2 : ret); | ||
3720 | return ret > 0 ? ret2 : ret; | 3731 | return ret > 0 ? ret2 : ret; |
3721 | } | 3732 | } |
3722 | 3733 | ||
diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c index 7829b287822a..7f74019d6d77 100644 --- a/fs/ext4/fsync.c +++ b/fs/ext4/fsync.c | |||
@@ -164,20 +164,20 @@ int ext4_sync_file(struct file *file, int datasync) | |||
164 | 164 | ||
165 | J_ASSERT(ext4_journal_current_handle() == NULL); | 165 | J_ASSERT(ext4_journal_current_handle() == NULL); |
166 | 166 | ||
167 | trace_ext4_sync_file(file, datasync); | 167 | trace_ext4_sync_file_enter(file, datasync); |
168 | 168 | ||
169 | if (inode->i_sb->s_flags & MS_RDONLY) | 169 | if (inode->i_sb->s_flags & MS_RDONLY) |
170 | return 0; | 170 | return 0; |
171 | 171 | ||
172 | ret = ext4_flush_completed_IO(inode); | 172 | ret = ext4_flush_completed_IO(inode); |
173 | if (ret < 0) | 173 | if (ret < 0) |
174 | return ret; | 174 | goto out; |
175 | 175 | ||
176 | if (!journal) { | 176 | if (!journal) { |
177 | ret = generic_file_fsync(file, datasync); | 177 | ret = generic_file_fsync(file, datasync); |
178 | if (!ret && !list_empty(&inode->i_dentry)) | 178 | if (!ret && !list_empty(&inode->i_dentry)) |
179 | ext4_sync_parent(inode); | 179 | ext4_sync_parent(inode); |
180 | return ret; | 180 | goto out; |
181 | } | 181 | } |
182 | 182 | ||
183 | /* | 183 | /* |
@@ -194,8 +194,10 @@ int ext4_sync_file(struct file *file, int datasync) | |||
194 | * (they were dirtied by commit). But that's OK - the blocks are | 194 | * (they were dirtied by commit). But that's OK - the blocks are |
195 | * safe in-journal, which is all fsync() needs to ensure. | 195 | * safe in-journal, which is all fsync() needs to ensure. |
196 | */ | 196 | */ |
197 | if (ext4_should_journal_data(inode)) | 197 | if (ext4_should_journal_data(inode)) { |
198 | return ext4_force_commit(inode->i_sb); | 198 | ret = ext4_force_commit(inode->i_sb); |
199 | goto out; | ||
200 | } | ||
199 | 201 | ||
200 | commit_tid = datasync ? ei->i_datasync_tid : ei->i_sync_tid; | 202 | commit_tid = datasync ? ei->i_datasync_tid : ei->i_sync_tid; |
201 | if (jbd2_log_start_commit(journal, commit_tid)) { | 203 | if (jbd2_log_start_commit(journal, commit_tid)) { |
@@ -215,5 +217,7 @@ int ext4_sync_file(struct file *file, int datasync) | |||
215 | ret = jbd2_log_wait_commit(journal, commit_tid); | 217 | ret = jbd2_log_wait_commit(journal, commit_tid); |
216 | } else if (journal->j_flags & JBD2_BARRIER) | 218 | } else if (journal->j_flags & JBD2_BARRIER) |
217 | blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL); | 219 | blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL); |
220 | out: | ||
221 | trace_ext4_sync_file_exit(inode, ret); | ||
218 | return ret; | 222 | return ret; |
219 | } | 223 | } |
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index a679a482c986..254e6b98b5b4 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c | |||
@@ -152,6 +152,7 @@ ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group) | |||
152 | * We do it here so the bitmap uptodate bit | 152 | * We do it here so the bitmap uptodate bit |
153 | * get set with buffer lock held. | 153 | * get set with buffer lock held. |
154 | */ | 154 | */ |
155 | trace_ext4_load_inode_bitmap(sb, block_group); | ||
155 | set_bitmap_uptodate(bh); | 156 | set_bitmap_uptodate(bh); |
156 | if (bh_submit_read(bh) < 0) { | 157 | if (bh_submit_read(bh) < 0) { |
157 | put_bh(bh); | 158 | put_bh(bh); |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index fc8c0ce84315..f44307a21136 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -973,6 +973,7 @@ static int ext4_ind_map_blocks(handle_t *handle, struct inode *inode, | |||
973 | int count = 0; | 973 | int count = 0; |
974 | ext4_fsblk_t first_block = 0; | 974 | ext4_fsblk_t first_block = 0; |
975 | 975 | ||
976 | trace_ext4_ind_map_blocks_enter(inode, map->m_lblk, map->m_len, flags); | ||
976 | J_ASSERT(!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))); | 977 | J_ASSERT(!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))); |
977 | J_ASSERT(handle != NULL || (flags & EXT4_GET_BLOCKS_CREATE) == 0); | 978 | J_ASSERT(handle != NULL || (flags & EXT4_GET_BLOCKS_CREATE) == 0); |
978 | depth = ext4_block_to_path(inode, map->m_lblk, offsets, | 979 | depth = ext4_block_to_path(inode, map->m_lblk, offsets, |
@@ -1058,6 +1059,8 @@ cleanup: | |||
1058 | partial--; | 1059 | partial--; |
1059 | } | 1060 | } |
1060 | out: | 1061 | out: |
1062 | trace_ext4_ind_map_blocks_exit(inode, map->m_lblk, | ||
1063 | map->m_pblk, map->m_len, err); | ||
1061 | return err; | 1064 | return err; |
1062 | } | 1065 | } |
1063 | 1066 | ||
@@ -3379,6 +3382,7 @@ static sector_t ext4_bmap(struct address_space *mapping, sector_t block) | |||
3379 | 3382 | ||
3380 | static int ext4_readpage(struct file *file, struct page *page) | 3383 | static int ext4_readpage(struct file *file, struct page *page) |
3381 | { | 3384 | { |
3385 | trace_ext4_readpage(page); | ||
3382 | return mpage_readpage(page, ext4_get_block); | 3386 | return mpage_readpage(page, ext4_get_block); |
3383 | } | 3387 | } |
3384 | 3388 | ||
@@ -3413,6 +3417,8 @@ static void ext4_invalidatepage(struct page *page, unsigned long offset) | |||
3413 | { | 3417 | { |
3414 | journal_t *journal = EXT4_JOURNAL(page->mapping->host); | 3418 | journal_t *journal = EXT4_JOURNAL(page->mapping->host); |
3415 | 3419 | ||
3420 | trace_ext4_invalidatepage(page, offset); | ||
3421 | |||
3416 | /* | 3422 | /* |
3417 | * free any io_end structure allocated for buffers to be discarded | 3423 | * free any io_end structure allocated for buffers to be discarded |
3418 | */ | 3424 | */ |
@@ -3434,6 +3440,8 @@ static int ext4_releasepage(struct page *page, gfp_t wait) | |||
3434 | { | 3440 | { |
3435 | journal_t *journal = EXT4_JOURNAL(page->mapping->host); | 3441 | journal_t *journal = EXT4_JOURNAL(page->mapping->host); |
3436 | 3442 | ||
3443 | trace_ext4_releasepage(page); | ||
3444 | |||
3437 | WARN_ON(PageChecked(page)); | 3445 | WARN_ON(PageChecked(page)); |
3438 | if (!page_has_buffers(page)) | 3446 | if (!page_has_buffers(page)) |
3439 | return 0; | 3447 | return 0; |
@@ -3792,11 +3800,16 @@ static ssize_t ext4_direct_IO(int rw, struct kiocb *iocb, | |||
3792 | { | 3800 | { |
3793 | struct file *file = iocb->ki_filp; | 3801 | struct file *file = iocb->ki_filp; |
3794 | struct inode *inode = file->f_mapping->host; | 3802 | struct inode *inode = file->f_mapping->host; |
3803 | ssize_t ret; | ||
3795 | 3804 | ||
3805 | trace_ext4_direct_IO_enter(inode, offset, iov_length(iov, nr_segs), rw); | ||
3796 | if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) | 3806 | if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) |
3797 | return ext4_ext_direct_IO(rw, iocb, iov, offset, nr_segs); | 3807 | ret = ext4_ext_direct_IO(rw, iocb, iov, offset, nr_segs); |
3798 | 3808 | else | |
3799 | return ext4_ind_direct_IO(rw, iocb, iov, offset, nr_segs); | 3809 | ret = ext4_ind_direct_IO(rw, iocb, iov, offset, nr_segs); |
3810 | trace_ext4_direct_IO_exit(inode, offset, | ||
3811 | iov_length(iov, nr_segs), rw, ret); | ||
3812 | return ret; | ||
3800 | } | 3813 | } |
3801 | 3814 | ||
3802 | /* | 3815 | /* |
@@ -4425,6 +4438,8 @@ void ext4_truncate(struct inode *inode) | |||
4425 | ext4_lblk_t last_block; | 4438 | ext4_lblk_t last_block; |
4426 | unsigned blocksize = inode->i_sb->s_blocksize; | 4439 | unsigned blocksize = inode->i_sb->s_blocksize; |
4427 | 4440 | ||
4441 | trace_ext4_truncate_enter(inode); | ||
4442 | |||
4428 | if (!ext4_can_truncate(inode)) | 4443 | if (!ext4_can_truncate(inode)) |
4429 | return; | 4444 | return; |
4430 | 4445 | ||
@@ -4435,6 +4450,7 @@ void ext4_truncate(struct inode *inode) | |||
4435 | 4450 | ||
4436 | if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { | 4451 | if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { |
4437 | ext4_ext_truncate(inode); | 4452 | ext4_ext_truncate(inode); |
4453 | trace_ext4_truncate_exit(inode); | ||
4438 | return; | 4454 | return; |
4439 | } | 4455 | } |
4440 | 4456 | ||
@@ -4564,6 +4580,7 @@ out_stop: | |||
4564 | ext4_orphan_del(handle, inode); | 4580 | ext4_orphan_del(handle, inode); |
4565 | 4581 | ||
4566 | ext4_journal_stop(handle); | 4582 | ext4_journal_stop(handle); |
4583 | trace_ext4_truncate_exit(inode); | ||
4567 | } | 4584 | } |
4568 | 4585 | ||
4569 | /* | 4586 | /* |
@@ -4695,6 +4712,7 @@ make_io: | |||
4695 | * has in-inode xattrs, or we don't have this inode in memory. | 4712 | * has in-inode xattrs, or we don't have this inode in memory. |
4696 | * Read the block from disk. | 4713 | * Read the block from disk. |
4697 | */ | 4714 | */ |
4715 | trace_ext4_load_inode(inode); | ||
4698 | get_bh(bh); | 4716 | get_bh(bh); |
4699 | bh->b_end_io = end_buffer_read_sync; | 4717 | bh->b_end_io = end_buffer_read_sync; |
4700 | submit_bh(READ_META, bh); | 4718 | submit_bh(READ_META, bh); |
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index ad87584aa8d2..f9f83878843a 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c | |||
@@ -40,6 +40,7 @@ | |||
40 | #include "xattr.h" | 40 | #include "xattr.h" |
41 | #include "acl.h" | 41 | #include "acl.h" |
42 | 42 | ||
43 | #include <trace/events/ext4.h> | ||
43 | /* | 44 | /* |
44 | * define how far ahead to read directories while searching them. | 45 | * define how far ahead to read directories while searching them. |
45 | */ | 46 | */ |
@@ -2183,6 +2184,7 @@ static int ext4_unlink(struct inode *dir, struct dentry *dentry) | |||
2183 | struct ext4_dir_entry_2 *de; | 2184 | struct ext4_dir_entry_2 *de; |
2184 | handle_t *handle; | 2185 | handle_t *handle; |
2185 | 2186 | ||
2187 | trace_ext4_unlink_enter(dir, dentry); | ||
2186 | /* Initialize quotas before so that eventual writes go | 2188 | /* Initialize quotas before so that eventual writes go |
2187 | * in separate transaction */ | 2189 | * in separate transaction */ |
2188 | dquot_initialize(dir); | 2190 | dquot_initialize(dir); |
@@ -2228,6 +2230,7 @@ static int ext4_unlink(struct inode *dir, struct dentry *dentry) | |||
2228 | end_unlink: | 2230 | end_unlink: |
2229 | ext4_journal_stop(handle); | 2231 | ext4_journal_stop(handle); |
2230 | brelse(bh); | 2232 | brelse(bh); |
2233 | trace_ext4_unlink_exit(dentry, retval); | ||
2231 | return retval; | 2234 | return retval; |
2232 | } | 2235 | } |
2233 | 2236 | ||