Merge tag 'for-f2fs-3.14' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs
Pull f2fs updates from Jaegeuk Kim: "In this round, a couple of sysfs entries were introduced to tune the f2fs at runtime. In addition, f2fs starts to support inline_data and improves the read/write performance in some workloads by refactoring bio-related flows. This patch-set includes the following major enhancement patches. - support inline_data - refactor bio operations such as merge operations and rw type assignment - enhance the direct IO path - enhance bio operations - truncate a node page when it becomes obsolete - add sysfs entries: small_discards, max_victim_search, and in-place-update - add a sysfs entry to control max_victim_search The other bug fixes are as follows. - fix a bug in truncate_partial_nodes - avoid warnings during sparse and build process - fix error handling flows - fix potential bit overflows And, there are a bunch of cleanups" * tag 'for-f2fs-3.14' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs: (95 commits) f2fs: drop obsolete node page when it is truncated f2fs: introduce NODE_MAPPING for code consistency f2fs: remove the orphan block page array f2fs: add help function META_MAPPING f2fs: move a branch for code redability f2fs: call mark_inode_dirty to flush dirty pages f2fs: clean checkpatch warnings f2fs: missing REQ_META and REQ_PRIO when sync_meta_pages(META_FLUSH) f2fs: avoid f2fs_balance_fs call during pageout f2fs: add delimiter to seperate name and value in debug phrase f2fs: use spinlock rather than mutex for better speed f2fs: move alloc new orphan node out of lock protection region f2fs: move grabing orphan pages out of protection region f2fs: remove the needless parameter of f2fs_wait_on_page_writeback f2fs: update documents and a MAINTAINERS entry f2fs: add a sysfs entry to control max_victim_search f2fs: improve write performance under frequent fsync calls f2fs: avoid to read inline data except first page f2fs: avoid to left uninitialized data in page when read inline data f2fs: fix truncate_partial_nodes bug ...
This commit is contained in:
@@ -16,15 +16,28 @@
|
||||
{ META, "META" }, \
|
||||
{ META_FLUSH, "META_FLUSH" })
|
||||
|
||||
#define show_bio_type(type) \
|
||||
__print_symbolic(type, \
|
||||
{ READ, "READ" }, \
|
||||
{ READA, "READAHEAD" }, \
|
||||
{ READ_SYNC, "READ_SYNC" }, \
|
||||
{ WRITE, "WRITE" }, \
|
||||
{ WRITE_SYNC, "WRITE_SYNC" }, \
|
||||
{ WRITE_FLUSH, "WRITE_FLUSH" }, \
|
||||
{ WRITE_FUA, "WRITE_FUA" })
|
||||
#define F2FS_BIO_MASK(t) (t & (READA | WRITE_FLUSH_FUA))
|
||||
#define F2FS_BIO_EXTRA_MASK(t) (t & (REQ_META | REQ_PRIO))
|
||||
|
||||
#define show_bio_type(type) show_bio_base(type), show_bio_extra(type)
|
||||
|
||||
#define show_bio_base(type) \
|
||||
__print_symbolic(F2FS_BIO_MASK(type), \
|
||||
{ READ, "READ" }, \
|
||||
{ READA, "READAHEAD" }, \
|
||||
{ READ_SYNC, "READ_SYNC" }, \
|
||||
{ WRITE, "WRITE" }, \
|
||||
{ WRITE_SYNC, "WRITE_SYNC" }, \
|
||||
{ WRITE_FLUSH, "WRITE_FLUSH" }, \
|
||||
{ WRITE_FUA, "WRITE_FUA" }, \
|
||||
{ WRITE_FLUSH_FUA, "WRITE_FLUSH_FUA" })
|
||||
|
||||
#define show_bio_extra(type) \
|
||||
__print_symbolic(F2FS_BIO_EXTRA_MASK(type), \
|
||||
{ REQ_META, "(M)" }, \
|
||||
{ REQ_PRIO, "(P)" }, \
|
||||
{ REQ_META | REQ_PRIO, "(MP)" }, \
|
||||
{ 0, " \b" })
|
||||
|
||||
#define show_data_type(type) \
|
||||
__print_symbolic(type, \
|
||||
@@ -421,7 +434,7 @@ TRACE_EVENT(f2fs_truncate_partial_nodes,
|
||||
__entry->err)
|
||||
);
|
||||
|
||||
TRACE_EVENT_CONDITION(f2fs_readpage,
|
||||
TRACE_EVENT_CONDITION(f2fs_submit_page_bio,
|
||||
|
||||
TP_PROTO(struct page *page, sector_t blkaddr, int type),
|
||||
|
||||
@@ -446,7 +459,7 @@ TRACE_EVENT_CONDITION(f2fs_readpage,
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), ino = %lu, page_index = 0x%lx, "
|
||||
"blkaddr = 0x%llx, bio_type = %s",
|
||||
"blkaddr = 0x%llx, bio_type = %s%s",
|
||||
show_dev_ino(__entry),
|
||||
(unsigned long)__entry->index,
|
||||
(unsigned long long)__entry->blkaddr,
|
||||
@@ -598,36 +611,54 @@ TRACE_EVENT(f2fs_reserve_new_block,
|
||||
__entry->ofs_in_node)
|
||||
);
|
||||
|
||||
TRACE_EVENT(f2fs_do_submit_bio,
|
||||
DECLARE_EVENT_CLASS(f2fs__submit_bio,
|
||||
|
||||
TP_PROTO(struct super_block *sb, int btype, bool sync, struct bio *bio),
|
||||
TP_PROTO(struct super_block *sb, int rw, int type, struct bio *bio),
|
||||
|
||||
TP_ARGS(sb, btype, sync, bio),
|
||||
TP_ARGS(sb, rw, type, bio),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
__field(int, btype)
|
||||
__field(bool, sync)
|
||||
__field(int, rw)
|
||||
__field(int, type)
|
||||
__field(sector_t, sector)
|
||||
__field(unsigned int, size)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = sb->s_dev;
|
||||
__entry->btype = btype;
|
||||
__entry->sync = sync;
|
||||
__entry->rw = rw;
|
||||
__entry->type = type;
|
||||
__entry->sector = bio->bi_sector;
|
||||
__entry->size = bio->bi_size;
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), type = %s, io = %s, sector = %lld, size = %u",
|
||||
TP_printk("dev = (%d,%d), %s%s, %s, sector = %lld, size = %u",
|
||||
show_dev(__entry),
|
||||
show_block_type(__entry->btype),
|
||||
__entry->sync ? "sync" : "no sync",
|
||||
show_bio_type(__entry->rw),
|
||||
show_block_type(__entry->type),
|
||||
(unsigned long long)__entry->sector,
|
||||
__entry->size)
|
||||
);
|
||||
|
||||
DEFINE_EVENT_CONDITION(f2fs__submit_bio, f2fs_submit_write_bio,
|
||||
|
||||
TP_PROTO(struct super_block *sb, int rw, int type, struct bio *bio),
|
||||
|
||||
TP_ARGS(sb, rw, type, bio),
|
||||
|
||||
TP_CONDITION(bio)
|
||||
);
|
||||
|
||||
DEFINE_EVENT_CONDITION(f2fs__submit_bio, f2fs_submit_read_bio,
|
||||
|
||||
TP_PROTO(struct super_block *sb, int rw, int type, struct bio *bio),
|
||||
|
||||
TP_ARGS(sb, rw, type, bio),
|
||||
|
||||
TP_CONDITION(bio)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(f2fs__page,
|
||||
|
||||
TP_PROTO(struct page *page, int type),
|
||||
@@ -674,15 +705,16 @@ DEFINE_EVENT(f2fs__page, f2fs_vm_page_mkwrite,
|
||||
TP_ARGS(page, type)
|
||||
);
|
||||
|
||||
TRACE_EVENT(f2fs_submit_write_page,
|
||||
TRACE_EVENT(f2fs_submit_page_mbio,
|
||||
|
||||
TP_PROTO(struct page *page, block_t blk_addr, int type),
|
||||
TP_PROTO(struct page *page, int rw, int type, block_t blk_addr),
|
||||
|
||||
TP_ARGS(page, blk_addr, type),
|
||||
TP_ARGS(page, rw, type, blk_addr),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
__field(ino_t, ino)
|
||||
__field(int, rw)
|
||||
__field(int, type)
|
||||
__field(pgoff_t, index)
|
||||
__field(block_t, block)
|
||||
@@ -691,13 +723,15 @@ TRACE_EVENT(f2fs_submit_write_page,
|
||||
TP_fast_assign(
|
||||
__entry->dev = page->mapping->host->i_sb->s_dev;
|
||||
__entry->ino = page->mapping->host->i_ino;
|
||||
__entry->rw = rw;
|
||||
__entry->type = type;
|
||||
__entry->index = page->index;
|
||||
__entry->block = blk_addr;
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), ino = %lu, %s, index = %lu, blkaddr = 0x%llx",
|
||||
TP_printk("dev = (%d,%d), ino = %lu, %s%s, %s, index = %lu, blkaddr = 0x%llx",
|
||||
show_dev_ino(__entry),
|
||||
show_bio_type(__entry->rw),
|
||||
show_block_type(__entry->type),
|
||||
(unsigned long)__entry->index,
|
||||
(unsigned long long)__entry->block)
|
||||
@@ -727,6 +761,29 @@ TRACE_EVENT(f2fs_write_checkpoint,
|
||||
__entry->msg)
|
||||
);
|
||||
|
||||
TRACE_EVENT(f2fs_issue_discard,
|
||||
|
||||
TP_PROTO(struct super_block *sb, block_t blkstart, block_t blklen),
|
||||
|
||||
TP_ARGS(sb, blkstart, blklen),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
__field(block_t, blkstart)
|
||||
__field(block_t, blklen)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = sb->s_dev;
|
||||
__entry->blkstart = blkstart;
|
||||
__entry->blklen = blklen;
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), blkstart = 0x%llx, blklen = 0x%llx",
|
||||
show_dev(__entry),
|
||||
(unsigned long long)__entry->blkstart,
|
||||
(unsigned long long)__entry->blklen)
|
||||
);
|
||||
#endif /* _TRACE_F2FS_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
Reference in New Issue
Block a user