Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a007427 authored by Peng Zhou's avatar Peng Zhou Committed by Alistair Strachan
Browse files

ANDROID: f2fs: Complement "android_fs" tracepoint of read path



It's only in DIO before, complement for BIO.

Bug: 120445624
Change-Id: I90b6fb15e355978da8805ed6306c595819be989d
Signed-off-by: default avatarPeng Zhou <peng.zhou@mediatek.com>
parent da2880fa
Loading
Loading
Loading
Loading
+40 −5
Original line number Diff line number Diff line
@@ -143,6 +143,8 @@ static bool f2fs_bio_post_read_required(struct bio *bio)

static void f2fs_read_end_io(struct bio *bio)
{
	struct page *first_page = bio->bi_io_vec[0].bv_page;

	if (time_to_inject(F2FS_P_SB(bio->bi_io_vec->bv_page), FAULT_READ_IO)) {
		f2fs_show_injection_info(FAULT_READ_IO);
		bio->bi_status = BLK_STS_IOERR;
@@ -156,6 +158,13 @@ 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);
	}

	__read_end_io(bio);
}

@@ -323,6 +332,32 @@ 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);
}

static void __submit_merged_bio(struct f2fs_bio_info *io)
{
	struct f2fs_io_info *fio = &io->fio;
@@ -470,7 +505,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));

	__submit_bio(fio->sbi, bio, fio->type);
	__f2fs_submit_read_bio(fio->sbi, bio, fio->type);
	return 0;
}

@@ -600,7 +635,7 @@ static int f2fs_submit_page_read(struct inode *inode, struct page *page,
	}
	ClearPageError(page);
	inc_page_count(F2FS_I_SB(inode), F2FS_RD_DATA);
	__submit_bio(F2FS_I_SB(inode), bio, DATA);
	__f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA);
	return 0;
}

@@ -1600,7 +1635,7 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
		if (bio && (last_block_in_bio != block_nr - 1 ||
			!__same_bdev(F2FS_I_SB(inode), block_nr, bio))) {
submit_and_realloc:
			__submit_bio(F2FS_I_SB(inode), bio, DATA);
			__f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA);
			bio = NULL;
		}
		if (bio == NULL) {
@@ -1632,7 +1667,7 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
		goto next_page;
confused:
		if (bio) {
			__submit_bio(F2FS_I_SB(inode), bio, DATA);
			__f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA);
			bio = NULL;
		}
		unlock_page(page);
@@ -1642,7 +1677,7 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
	}
	BUG_ON(pages && !list_empty(pages));
	if (bio)
		__submit_bio(F2FS_I_SB(inode), bio, DATA);
		__f2fs_submit_read_bio(F2FS_I_SB(inode), bio, DATA);
	return 0;
}