Revert "ANDROID: fs: FS tracepoints to track IO."
5.18-rc1 has many merge issues and the block io path has been rewritten, so the tracepoints added here do not work properly anymore (and break the build.) If this is really still needed (hint, I strongly doubt it), it can be redesigned and added back after 5.18-rc1 is released. Cc: Mohan Srinivasan <srmohan@google.com> Cc: Amit Pundir <amit.pundir@linaro.org> Cc: Alistair Strachan <astrachan@google.com> Fixes: f2fe7bac26dc ("ANDROID: fs: FS tracepoints to track IO.") Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> [Jaegeuk Kim: remove fsync tracepoints as well] Change-Id: I64981f2f692a434b976e50677d3414037d5ee409
This commit is contained in:
committed by
Atakan
parent
fd85679d76
commit
977fbf2621
@@ -12,7 +12,6 @@
|
||||
#include "ext4.h"
|
||||
#include "xattr.h"
|
||||
#include "truncate.h"
|
||||
#include <trace/events/android_fs.h>
|
||||
|
||||
#define EXT4_XATTR_SYSTEM_DATA "data"
|
||||
#define EXT4_MIN_INLINE_DATA_SIZE ((sizeof(__le32) * EXT4_N_BLOCKS))
|
||||
@@ -518,17 +517,6 @@ int ext4_readpage_inline(struct inode *inode, struct page *page)
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
if (trace_android_fs_dataread_start_enabled()) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN,
|
||||
inode);
|
||||
trace_android_fs_dataread_start(inode, page_offset(page),
|
||||
PAGE_SIZE, current->pid,
|
||||
path, current->comm);
|
||||
}
|
||||
|
||||
/*
|
||||
* Current inline data can only exist in the 1st page,
|
||||
* So for all the other pages, just set them uptodate.
|
||||
@@ -540,8 +528,6 @@ int ext4_readpage_inline(struct inode *inode, struct page *page)
|
||||
SetPageUptodate(page);
|
||||
}
|
||||
|
||||
trace_android_fs_dataread_end(inode, page_offset(page), PAGE_SIZE);
|
||||
|
||||
up_read(&EXT4_I(inode)->xattr_sem);
|
||||
|
||||
unlock_page(page);
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
#include "truncate.h"
|
||||
|
||||
#include <trace/events/ext4.h>
|
||||
#include <trace/events/android_fs.h>
|
||||
|
||||
#define MPAGE_DA_EXTENT_TAIL 0x01
|
||||
|
||||
@@ -1271,16 +1270,6 @@ static int ext4_write_begin(struct file *file, struct address_space *mapping,
|
||||
if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
|
||||
return -EIO;
|
||||
|
||||
if (trace_android_fs_datawrite_start_enabled()) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN,
|
||||
inode);
|
||||
trace_android_fs_datawrite_start(inode, pos, len,
|
||||
current->pid, path,
|
||||
current->comm);
|
||||
}
|
||||
trace_ext4_write_begin(inode, pos, len, flags);
|
||||
/*
|
||||
* Reserve one block more for addition to orphan list in case
|
||||
@@ -1430,7 +1419,6 @@ static int ext4_write_end(struct file *file,
|
||||
int inline_data = ext4_has_inline_data(inode);
|
||||
bool verity = ext4_verity_in_progress(inode);
|
||||
|
||||
trace_android_fs_datawrite_end(inode, pos, len);
|
||||
trace_ext4_write_end(inode, pos, len, copied);
|
||||
if (inline_data &&
|
||||
ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) {
|
||||
@@ -1542,7 +1530,6 @@ static int ext4_journalled_write_end(struct file *file,
|
||||
int inline_data = ext4_has_inline_data(inode);
|
||||
bool verity = ext4_verity_in_progress(inode);
|
||||
|
||||
trace_android_fs_datawrite_end(inode, pos, len);
|
||||
trace_ext4_journalled_write_end(inode, pos, len, copied);
|
||||
from = pos & (PAGE_SIZE - 1);
|
||||
to = from + len;
|
||||
@@ -3110,16 +3097,6 @@ static int ext4_da_write_begin(struct file *file, struct address_space *mapping,
|
||||
len, flags, pagep, fsdata);
|
||||
}
|
||||
*fsdata = (void *)0;
|
||||
if (trace_android_fs_datawrite_start_enabled()) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN,
|
||||
inode);
|
||||
trace_android_fs_datawrite_start(inode, pos, len,
|
||||
current->pid,
|
||||
path, current->comm);
|
||||
}
|
||||
trace_ext4_da_write_begin(inode, pos, len, flags);
|
||||
|
||||
if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) {
|
||||
@@ -3238,7 +3215,6 @@ static int ext4_da_write_end(struct file *file,
|
||||
return ext4_write_end(file, mapping, pos,
|
||||
len, copied, page, fsdata);
|
||||
|
||||
trace_android_fs_datawrite_end(inode, pos, len);
|
||||
trace_ext4_da_write_end(inode, pos, len, copied);
|
||||
start = pos & (PAGE_SIZE - 1);
|
||||
end = start + copied - 1;
|
||||
@@ -3962,7 +3938,6 @@ static ssize_t ext4_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
|
||||
size_t count = iov_iter_count(iter);
|
||||
loff_t offset = iocb->ki_pos;
|
||||
ssize_t ret;
|
||||
int rw = iov_iter_rw(iter);
|
||||
|
||||
if (!fscrypt_dio_supported(iocb, iter))
|
||||
return 0;
|
||||
@@ -3980,28 +3955,6 @@ static ssize_t ext4_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
|
||||
if (ext4_has_inline_data(inode))
|
||||
return 0;
|
||||
|
||||
if (trace_android_fs_dataread_start_enabled() &&
|
||||
(rw == READ)) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN,
|
||||
inode);
|
||||
trace_android_fs_dataread_start(inode, offset, count,
|
||||
current->pid, path,
|
||||
current->comm);
|
||||
}
|
||||
if (trace_android_fs_datawrite_start_enabled() &&
|
||||
(rw == WRITE)) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN,
|
||||
inode);
|
||||
trace_android_fs_datawrite_start(inode, offset, count,
|
||||
current->pid, path,
|
||||
current->comm);
|
||||
}
|
||||
trace_ext4_direct_IO_enter(inode, offset, count, iov_iter_rw(iter));
|
||||
if (iov_iter_rw(iter) == READ)
|
||||
ret = ext4_direct_IO_read(iocb, iter);
|
||||
@@ -4009,13 +3962,6 @@ static ssize_t ext4_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
|
||||
ret = ext4_direct_IO_write(iocb, iter);
|
||||
trace_ext4_direct_IO_exit(inode, offset, count, iov_iter_rw(iter), ret);
|
||||
|
||||
if (trace_android_fs_dataread_start_enabled() &&
|
||||
(rw == READ))
|
||||
trace_android_fs_dataread_end(inode, offset, count);
|
||||
if (trace_android_fs_datawrite_start_enabled() &&
|
||||
(rw == WRITE))
|
||||
trace_android_fs_datawrite_end(inode, offset, count);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
#include <linux/cleancache.h>
|
||||
|
||||
#include "ext4.h"
|
||||
#include <trace/events/android_fs.h>
|
||||
|
||||
#define NUM_PREALLOC_POST_READ_CTXS 128
|
||||
|
||||
@@ -147,17 +146,6 @@ static bool bio_post_read_required(struct bio *bio)
|
||||
return bio->bi_private && !bio->bi_status;
|
||||
}
|
||||
|
||||
static void
|
||||
ext4_trace_read_completion(struct bio *bio)
|
||||
{
|
||||
struct page *first_page = bio->bi_io_vec[0].bv_page;
|
||||
|
||||
if (first_page != NULL)
|
||||
trace_android_fs_dataread_end(first_page->mapping->host,
|
||||
page_offset(first_page),
|
||||
bio->bi_iter.bi_size);
|
||||
}
|
||||
|
||||
/*
|
||||
* I/O completion handler for multipage BIOs.
|
||||
*
|
||||
@@ -172,9 +160,6 @@ ext4_trace_read_completion(struct bio *bio)
|
||||
*/
|
||||
static void mpage_end_io(struct bio *bio)
|
||||
{
|
||||
if (trace_android_fs_dataread_start_enabled())
|
||||
ext4_trace_read_completion(bio);
|
||||
|
||||
if (bio_post_read_required(bio)) {
|
||||
struct bio_post_read_ctx *ctx = bio->bi_private;
|
||||
|
||||
@@ -224,30 +209,6 @@ static inline loff_t ext4_readpage_limit(struct inode *inode)
|
||||
return i_size_read(inode);
|
||||
}
|
||||
|
||||
static void
|
||||
ext4_submit_bio_read(struct bio *bio)
|
||||
{
|
||||
if (trace_android_fs_dataread_start_enabled()) {
|
||||
struct page *first_page = bio->bi_io_vec[0].bv_page;
|
||||
|
||||
if (first_page != NULL) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN,
|
||||
first_page->mapping->host);
|
||||
trace_android_fs_dataread_start(
|
||||
first_page->mapping->host,
|
||||
page_offset(first_page),
|
||||
bio->bi_iter.bi_size,
|
||||
current->pid,
|
||||
path,
|
||||
current->comm);
|
||||
}
|
||||
}
|
||||
submit_bio(bio);
|
||||
}
|
||||
|
||||
int ext4_mpage_readpages(struct address_space *mapping,
|
||||
struct list_head *pages, struct page *page,
|
||||
unsigned nr_pages, bool is_readahead)
|
||||
@@ -395,7 +356,7 @@ int ext4_mpage_readpages(struct address_space *mapping,
|
||||
if (bio && (last_block_in_bio != blocks[0] - 1 ||
|
||||
!fscrypt_mergeable_bio(bio, inode, next_block))) {
|
||||
submit_and_realloc:
|
||||
ext4_submit_bio_read(bio);
|
||||
submit_bio(bio);
|
||||
bio = NULL;
|
||||
}
|
||||
if (bio == NULL) {
|
||||
@@ -428,14 +389,14 @@ int ext4_mpage_readpages(struct address_space *mapping,
|
||||
if (((map.m_flags & EXT4_MAP_BOUNDARY) &&
|
||||
(relative_block == map.m_len)) ||
|
||||
(first_hole != blocks_per_page)) {
|
||||
ext4_submit_bio_read(bio);
|
||||
submit_bio(bio);
|
||||
bio = NULL;
|
||||
} else
|
||||
last_block_in_bio = blocks[blocks_per_page - 1];
|
||||
goto next_page;
|
||||
confused:
|
||||
if (bio) {
|
||||
ext4_submit_bio_read(bio);
|
||||
submit_bio(bio);
|
||||
bio = NULL;
|
||||
}
|
||||
if (!PageUptodate(page))
|
||||
@@ -448,7 +409,7 @@ int ext4_mpage_readpages(struct address_space *mapping,
|
||||
}
|
||||
BUG_ON(pages && !list_empty(pages));
|
||||
if (bio)
|
||||
ext4_submit_bio_read(bio);
|
||||
submit_bio(bio);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include "segment.h"
|
||||
#include "iostat.h"
|
||||
#include <trace/events/f2fs.h>
|
||||
#include <trace/events/android_fs.h>
|
||||
|
||||
#define NUM_PREALLOC_POST_READ_CTXS 128
|
||||
|
||||
@@ -268,7 +267,6 @@ static void f2fs_post_read_work(struct work_struct *work)
|
||||
|
||||
static void f2fs_read_end_io(struct bio *bio)
|
||||
{
|
||||
struct page *first_page = bio->bi_io_vec[0].bv_page;
|
||||
struct f2fs_sb_info *sbi = F2FS_P_SB(bio_first_page_all(bio));
|
||||
struct bio_post_read_ctx *ctx;
|
||||
bool intask = in_task();
|
||||
@@ -286,13 +284,6 @@ static void f2fs_read_end_io(struct bio *bio)
|
||||
return;
|
||||
}
|
||||
|
||||
if (first_page != NULL &&
|
||||
__read_io_type(first_page) == F2FS_RD_DATA) {
|
||||
trace_android_fs_dataread_end(first_page->mapping->host,
|
||||
page_offset(first_page),
|
||||
bio->bi_iter.bi_size);
|
||||
}
|
||||
|
||||
if (ctx) {
|
||||
unsigned int enabled_steps = ctx->enabled_steps &
|
||||
(STEP_DECRYPT | STEP_DECOMPRESS);
|
||||
@@ -562,32 +553,6 @@ static inline void __submit_bio(struct f2fs_sb_info *sbi,
|
||||
submit_bio(bio);
|
||||
}
|
||||
|
||||
static void __f2fs_submit_read_bio(struct f2fs_sb_info *sbi,
|
||||
struct bio *bio, enum page_type type)
|
||||
{
|
||||
if (trace_android_fs_dataread_start_enabled() && (type == DATA)) {
|
||||
struct page *first_page = bio->bi_io_vec[0].bv_page;
|
||||
|
||||
if (first_page != NULL &&
|
||||
__read_io_type(first_page) == F2FS_RD_DATA) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN,
|
||||
first_page->mapping->host);
|
||||
|
||||
trace_android_fs_dataread_start(
|
||||
first_page->mapping->host,
|
||||
page_offset(first_page),
|
||||
bio->bi_iter.bi_size,
|
||||
current->pid,
|
||||
path,
|
||||
current->comm);
|
||||
}
|
||||
}
|
||||
__submit_bio(sbi, bio, type);
|
||||
}
|
||||
|
||||
void f2fs_submit_bio(struct f2fs_sb_info *sbi,
|
||||
struct bio *bio, enum page_type type)
|
||||
{
|
||||
@@ -774,10 +739,7 @@ int f2fs_submit_page_bio(struct f2fs_io_info *fio)
|
||||
inc_page_count(fio->sbi, is_read_io(fio->op) ?
|
||||
__read_io_type(page) : WB_DATA_TYPE(fio->page));
|
||||
|
||||
if (is_read_io(fio->op))
|
||||
__f2fs_submit_read_bio(fio->sbi, bio, fio->type);
|
||||
else
|
||||
__submit_bio(fio->sbi, bio, fio->type);
|
||||
__submit_bio(fio->sbi, bio, fio->type);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1140,7 +1102,7 @@ static int f2fs_submit_page_read(struct inode *inode, struct page *page,
|
||||
ClearPageError(page);
|
||||
inc_page_count(sbi, F2FS_RD_DATA);
|
||||
f2fs_update_iostat(sbi, FS_DATA_READ_IO, F2FS_BLKSIZE);
|
||||
__f2fs_submit_read_bio(sbi, bio, DATA);
|
||||
__submit_bio(sbi, bio, DATA);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2228,7 +2190,7 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
|
||||
*last_block_in_bio, block_nr) ||
|
||||
!f2fs_crypt_mergeable_bio(bio, inode, page->index, NULL))) {
|
||||
submit_and_realloc:
|
||||
__f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA);
|
||||
__submit_bio(F2FS_I_SB(inode), bio, DATA);
|
||||
bio = NULL;
|
||||
}
|
||||
|
||||
@@ -2259,7 +2221,7 @@ static int f2fs_read_single_page(struct inode *inode, struct page *page,
|
||||
goto out;
|
||||
confused:
|
||||
if (bio) {
|
||||
__f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA);
|
||||
__submit_bio(F2FS_I_SB(inode), bio, DATA);
|
||||
bio = NULL;
|
||||
}
|
||||
unlock_page(page);
|
||||
@@ -2576,7 +2538,7 @@ int f2fs_mpage_readpages(struct address_space *mapping,
|
||||
}
|
||||
BUG_ON(pages && !list_empty(pages));
|
||||
if (bio)
|
||||
__f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA);
|
||||
__submit_bio(F2FS_I_SB(inode), bio, DATA);
|
||||
|
||||
if (pages && is_readahead && !drop_ra)
|
||||
WRITE_ONCE(F2FS_I(inode)->ra_offset, -1);
|
||||
@@ -3649,16 +3611,6 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping,
|
||||
block_t blkaddr = NULL_ADDR;
|
||||
int err = 0;
|
||||
|
||||
if (trace_android_fs_datawrite_start_enabled()) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN,
|
||||
inode);
|
||||
trace_android_fs_datawrite_start(inode, pos, len,
|
||||
current->pid, path,
|
||||
current->comm);
|
||||
}
|
||||
trace_f2fs_write_begin(inode, pos, len, flags);
|
||||
|
||||
if (!f2fs_is_checkpoint_ready(sbi)) {
|
||||
@@ -3784,7 +3736,6 @@ static int f2fs_write_end(struct file *file,
|
||||
{
|
||||
struct inode *inode = page->mapping->host;
|
||||
|
||||
trace_android_fs_datawrite_end(inode, pos, len);
|
||||
trace_f2fs_write_end(inode, pos, len, copied);
|
||||
|
||||
/*
|
||||
@@ -3920,29 +3871,6 @@ static ssize_t f2fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
|
||||
|
||||
trace_f2fs_direct_IO_enter(inode, offset, count, rw);
|
||||
|
||||
if (trace_android_fs_dataread_start_enabled() &&
|
||||
(rw == READ)) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN,
|
||||
inode);
|
||||
trace_android_fs_dataread_start(inode, offset,
|
||||
count, current->pid, path,
|
||||
current->comm);
|
||||
}
|
||||
if (trace_android_fs_datawrite_start_enabled() &&
|
||||
(rw == WRITE)) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN,
|
||||
inode);
|
||||
trace_android_fs_datawrite_start(inode, offset, count,
|
||||
current->pid, path,
|
||||
current->comm);
|
||||
}
|
||||
|
||||
if (iocb->ki_flags & IOCB_NOWAIT) {
|
||||
if (!f2fs_down_read_trylock(&fi->i_gc_rwsem[rw])) {
|
||||
err = -EAGAIN;
|
||||
@@ -3991,13 +3919,6 @@ static ssize_t f2fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
|
||||
}
|
||||
|
||||
out:
|
||||
if (trace_android_fs_dataread_start_enabled() &&
|
||||
(rw == READ))
|
||||
trace_android_fs_dataread_end(inode, offset, count);
|
||||
if (trace_android_fs_datawrite_start_enabled() &&
|
||||
(rw == WRITE))
|
||||
trace_android_fs_datawrite_end(inode, offset, count);
|
||||
|
||||
trace_f2fs_direct_IO_exit(inode, offset, count, rw, err);
|
||||
|
||||
return err;
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#include "gc.h"
|
||||
#include "iostat.h"
|
||||
#include <trace/events/f2fs.h>
|
||||
#include <trace/events/android_fs.h>
|
||||
#include <uapi/linux/f2fs.h>
|
||||
|
||||
static vm_fault_t f2fs_filemap_fault(struct vm_fault *vmf)
|
||||
@@ -273,15 +272,6 @@ static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,
|
||||
|
||||
trace_f2fs_sync_file_enter(inode);
|
||||
|
||||
if (trace_android_fs_fsync_start_enabled()) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN, inode);
|
||||
trace_android_fs_fsync_start(inode,
|
||||
current->pid, path, current->comm);
|
||||
}
|
||||
|
||||
if (S_ISDIR(inode->i_mode))
|
||||
goto go_write;
|
||||
|
||||
@@ -399,7 +389,6 @@ static int f2fs_do_sync_file(struct file *file, loff_t start, loff_t end,
|
||||
f2fs_update_time(sbi, REQ_TIME);
|
||||
out:
|
||||
trace_f2fs_sync_file_exit(inode, cp_reason, datasync, ret);
|
||||
trace_android_fs_fsync_end(inode, start, end - start);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
#include "f2fs.h"
|
||||
#include "node.h"
|
||||
#include <trace/events/f2fs.h>
|
||||
#include <trace/events/android_fs.h>
|
||||
|
||||
static bool support_inline_data(struct inode *inode)
|
||||
{
|
||||
@@ -105,29 +104,14 @@ int f2fs_read_inline_data(struct inode *inode, struct page *page)
|
||||
{
|
||||
struct page *ipage;
|
||||
|
||||
if (trace_android_fs_dataread_start_enabled()) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN,
|
||||
inode);
|
||||
trace_android_fs_dataread_start(inode, page_offset(page),
|
||||
PAGE_SIZE, current->pid,
|
||||
path, current->comm);
|
||||
}
|
||||
|
||||
ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino);
|
||||
if (IS_ERR(ipage)) {
|
||||
trace_android_fs_dataread_end(inode, page_offset(page),
|
||||
PAGE_SIZE);
|
||||
unlock_page(page);
|
||||
return PTR_ERR(ipage);
|
||||
}
|
||||
|
||||
if (!f2fs_has_inline_data(inode)) {
|
||||
f2fs_put_page(ipage, 1);
|
||||
trace_android_fs_dataread_end(inode, page_offset(page),
|
||||
PAGE_SIZE);
|
||||
return -EAGAIN;
|
||||
}
|
||||
|
||||
@@ -139,8 +123,6 @@ int f2fs_read_inline_data(struct inode *inode, struct page *page)
|
||||
if (!PageUptodate(page))
|
||||
SetPageUptodate(page);
|
||||
f2fs_put_page(ipage, 1);
|
||||
trace_android_fs_dataread_end(inode, page_offset(page),
|
||||
PAGE_SIZE);
|
||||
unlock_page(page);
|
||||
return 0;
|
||||
}
|
||||
|
||||
38
fs/mpage.c
38
fs/mpage.c
@@ -32,16 +32,6 @@
|
||||
#include <linux/cleancache.h>
|
||||
#include "internal.h"
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/android_fs.h>
|
||||
|
||||
EXPORT_TRACEPOINT_SYMBOL(android_fs_datawrite_start);
|
||||
EXPORT_TRACEPOINT_SYMBOL(android_fs_datawrite_end);
|
||||
EXPORT_TRACEPOINT_SYMBOL(android_fs_dataread_start);
|
||||
EXPORT_TRACEPOINT_SYMBOL(android_fs_dataread_end);
|
||||
EXPORT_TRACEPOINT_SYMBOL(android_fs_fsync_start);
|
||||
EXPORT_TRACEPOINT_SYMBOL(android_fs_fsync_end);
|
||||
|
||||
/*
|
||||
* I/O completion handler for multipage BIOs.
|
||||
*
|
||||
@@ -59,16 +49,6 @@ static void mpage_end_io(struct bio *bio)
|
||||
struct bio_vec *bv;
|
||||
int i;
|
||||
|
||||
if (trace_android_fs_dataread_end_enabled() &&
|
||||
(bio_data_dir(bio) == READ)) {
|
||||
struct page *first_page = bio->bi_io_vec[0].bv_page;
|
||||
|
||||
if (first_page != NULL)
|
||||
trace_android_fs_dataread_end(first_page->mapping->host,
|
||||
page_offset(first_page),
|
||||
bio->bi_iter.bi_size);
|
||||
}
|
||||
|
||||
bio_for_each_segment_all(bv, bio, i) {
|
||||
struct page *page = bv->bv_page;
|
||||
page_endio(page, bio_op(bio),
|
||||
@@ -80,24 +60,6 @@ static void mpage_end_io(struct bio *bio)
|
||||
|
||||
static struct bio *mpage_bio_submit(int op, int op_flags, struct bio *bio)
|
||||
{
|
||||
if (trace_android_fs_dataread_start_enabled() && (op == REQ_OP_READ)) {
|
||||
struct page *first_page = bio->bi_io_vec[0].bv_page;
|
||||
|
||||
if (first_page != NULL) {
|
||||
char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
|
||||
|
||||
path = android_fstrace_get_pathname(pathbuf,
|
||||
MAX_TRACE_PATHBUF_LEN,
|
||||
first_page->mapping->host);
|
||||
trace_android_fs_dataread_start(
|
||||
first_page->mapping->host,
|
||||
page_offset(first_page),
|
||||
bio->bi_iter.bi_size,
|
||||
current->pid,
|
||||
path,
|
||||
current->comm);
|
||||
}
|
||||
}
|
||||
bio->bi_end_io = mpage_end_io;
|
||||
bio_set_op_attrs(bio, op, op_flags);
|
||||
guard_bio_eod(op, bio);
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM android_fs
|
||||
|
||||
#if !defined(_TRACE_ANDROID_FS_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_ANDROID_FS_H
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
#include <trace/events/android_fs_template.h>
|
||||
|
||||
DEFINE_EVENT(android_fs_data_start_template, android_fs_dataread_start,
|
||||
TP_PROTO(struct inode *inode, loff_t offset, int bytes,
|
||||
pid_t pid, char *pathname, char *command),
|
||||
TP_ARGS(inode, offset, bytes, pid, pathname, command));
|
||||
|
||||
DEFINE_EVENT(android_fs_data_end_template, android_fs_dataread_end,
|
||||
TP_PROTO(struct inode *inode, loff_t offset, int bytes),
|
||||
TP_ARGS(inode, offset, bytes));
|
||||
|
||||
DEFINE_EVENT(android_fs_data_start_template, android_fs_datawrite_start,
|
||||
TP_PROTO(struct inode *inode, loff_t offset, int bytes,
|
||||
pid_t pid, char *pathname, char *command),
|
||||
TP_ARGS(inode, offset, bytes, pid, pathname, command));
|
||||
|
||||
DEFINE_EVENT(android_fs_data_end_template, android_fs_datawrite_end,
|
||||
TP_PROTO(struct inode *inode, loff_t offset, int bytes),
|
||||
TP_ARGS(inode, offset, bytes));
|
||||
|
||||
DEFINE_EVENT(android_fs_fsync_start_template, android_fs_fsync_start,
|
||||
TP_PROTO(struct inode *inode,
|
||||
pid_t pid, char *pathname, char *command),
|
||||
TP_ARGS(inode, pid, pathname, command));
|
||||
|
||||
DEFINE_EVENT(android_fs_data_end_template, android_fs_fsync_end,
|
||||
TP_PROTO(struct inode *inode, loff_t offset, int bytes),
|
||||
TP_ARGS(inode, offset, bytes));
|
||||
|
||||
#endif /* _TRACE_ANDROID_FS_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
||||
|
||||
#ifndef ANDROID_FSTRACE_GET_PATHNAME
|
||||
#define ANDROID_FSTRACE_GET_PATHNAME
|
||||
|
||||
/* Sizes an on-stack array, so careful if sizing this up ! */
|
||||
#define MAX_TRACE_PATHBUF_LEN 256
|
||||
|
||||
static inline char *
|
||||
android_fstrace_get_pathname(char *buf, int buflen, struct inode *inode)
|
||||
{
|
||||
char *path;
|
||||
struct dentry *d;
|
||||
|
||||
/*
|
||||
* d_obtain_alias() will either iput() if it locates an existing
|
||||
* dentry or transfer the reference to the new dentry created.
|
||||
* So get an extra reference here.
|
||||
*/
|
||||
ihold(inode);
|
||||
d = d_obtain_alias(inode);
|
||||
if (likely(!IS_ERR(d))) {
|
||||
path = dentry_path_raw(d, buf, buflen);
|
||||
if (unlikely(IS_ERR(path))) {
|
||||
strcpy(buf, "ERROR");
|
||||
path = buf;
|
||||
}
|
||||
dput(d);
|
||||
} else {
|
||||
strcpy(buf, "ERROR");
|
||||
path = buf;
|
||||
}
|
||||
return path;
|
||||
}
|
||||
#endif
|
||||
@@ -1,98 +0,0 @@
|
||||
#if !defined(_TRACE_ANDROID_FS_TEMPLATE_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_ANDROID_FS_TEMPLATE_H
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
DECLARE_EVENT_CLASS(android_fs_data_start_template,
|
||||
TP_PROTO(struct inode *inode, loff_t offset, int bytes,
|
||||
pid_t pid, char *pathname, char *command),
|
||||
TP_ARGS(inode, offset, bytes, pid, pathname, command),
|
||||
TP_STRUCT__entry(
|
||||
__string(pathbuf, pathname);
|
||||
__field(loff_t, offset);
|
||||
__field(int, bytes);
|
||||
__field(loff_t, i_size);
|
||||
__string(cmdline, command);
|
||||
__field(pid_t, pid);
|
||||
__field(ino_t, ino);
|
||||
),
|
||||
TP_fast_assign(
|
||||
{
|
||||
/*
|
||||
* Replace the spaces in filenames and cmdlines
|
||||
* because this screws up the tooling that parses
|
||||
* the traces.
|
||||
*/
|
||||
__assign_str(pathbuf, pathname);
|
||||
(void)strreplace(__get_str(pathbuf), ' ', '_');
|
||||
__entry->offset = offset;
|
||||
__entry->bytes = bytes;
|
||||
__entry->i_size = i_size_read(inode);
|
||||
__assign_str(cmdline, command);
|
||||
(void)strreplace(__get_str(cmdline), ' ', '_');
|
||||
__entry->pid = pid;
|
||||
__entry->ino = inode->i_ino;
|
||||
}
|
||||
),
|
||||
TP_printk("entry_name %s, offset %llu, bytes %d, cmdline %s,"
|
||||
" pid %d, i_size %llu, ino %lu",
|
||||
__get_str(pathbuf), __entry->offset, __entry->bytes,
|
||||
__get_str(cmdline), __entry->pid, __entry->i_size,
|
||||
(unsigned long) __entry->ino)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(android_fs_data_end_template,
|
||||
TP_PROTO(struct inode *inode, loff_t offset, int bytes),
|
||||
TP_ARGS(inode, offset, bytes),
|
||||
TP_STRUCT__entry(
|
||||
__field(ino_t, ino);
|
||||
__field(loff_t, offset);
|
||||
__field(int, bytes);
|
||||
),
|
||||
TP_fast_assign(
|
||||
{
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->offset = offset;
|
||||
__entry->bytes = bytes;
|
||||
}
|
||||
),
|
||||
TP_printk("ino %lu, offset %llu, bytes %d",
|
||||
(unsigned long) __entry->ino,
|
||||
__entry->offset, __entry->bytes)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(android_fs_fsync_start_template,
|
||||
TP_PROTO(struct inode *inode,
|
||||
pid_t pid, char *pathname, char *command),
|
||||
TP_ARGS(inode, pid, pathname, command),
|
||||
TP_STRUCT__entry(
|
||||
__string(pathbuf, pathname);
|
||||
__field(loff_t, i_size);
|
||||
__string(cmdline, command);
|
||||
__field(pid_t, pid);
|
||||
__field(ino_t, ino);
|
||||
),
|
||||
TP_fast_assign(
|
||||
{
|
||||
/*
|
||||
* Replace the spaces in filenames and cmdlines
|
||||
* because this screws up the tooling that parses
|
||||
* the traces.
|
||||
*/
|
||||
__assign_str(pathbuf, pathname);
|
||||
(void)strreplace(__get_str(pathbuf), ' ', '_');
|
||||
__entry->i_size = i_size_read(inode);
|
||||
__assign_str(cmdline, command);
|
||||
(void)strreplace(__get_str(cmdline), ' ', '_');
|
||||
__entry->pid = pid;
|
||||
__entry->ino = inode->i_ino;
|
||||
}
|
||||
),
|
||||
TP_printk("entry_name %s, cmdline %s,"
|
||||
" pid %d, i_size %llu, ino %lu",
|
||||
__get_str(pathbuf),
|
||||
__get_str(cmdline), __entry->pid, __entry->i_size,
|
||||
(unsigned long) __entry->ino)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_ANDROID_FS_TEMPLATE_H */
|
||||
Reference in New Issue
Block a user