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:
@@ -153,6 +153,13 @@ struct f2fs_extent {
|
||||
#define NODE_DIND_BLOCK (DEF_ADDRS_PER_INODE + 5)
|
||||
|
||||
#define F2FS_INLINE_XATTR 0x01 /* file inline xattr flag */
|
||||
#define F2FS_INLINE_DATA 0x02 /* file inline data flag */
|
||||
|
||||
#define MAX_INLINE_DATA (sizeof(__le32) * (DEF_ADDRS_PER_INODE - \
|
||||
F2FS_INLINE_XATTR_ADDRS - 1))
|
||||
|
||||
#define INLINE_DATA_OFFSET (PAGE_CACHE_SIZE - sizeof(struct node_footer) \
|
||||
- sizeof(__le32) * (DEF_ADDRS_PER_INODE + 5 - 1))
|
||||
|
||||
struct f2fs_inode {
|
||||
__le16 i_mode; /* file mode */
|
||||
|
||||
+82
-25
@@ -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