Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
Pull ext4 updates from Ted Ts'o: - further restructure ext4 documentation - fix up ext4's delayed allocation for bigalloc file systems - fix up some syzbot-detected races in EXT4_IOC_MOVE_EXT, EXT4_IOC_SWAP_BOOT, and ext4_remount - ... and a few other miscellaneous bugs and optimizations. * tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (21 commits) ext4: fix use-after-free race in ext4_remount()'s error path ext4: cache NULL when both default_acl and acl are NULL docs: promote the ext4 data structures book to top level docs: move ext4 administrative docs to admin-guide/ jbd2: fix use after free in jbd2_log_do_checkpoint() ext4: propagate error from dquot_initialize() in EXT4_IOC_FSSETXATTR ext4: fix setattr project check in fssetxattr ioctl docs: make ext4 readme tables readable docs: fix ext4 documentation table formatting problems docs: generate a separate ext4 pdf file from the documentation ext4: convert fault handler to use vm_fault_t type ext4: initialize retries variable in ext4_da_write_inline_data_begin() ext4: fix EXT4_IOC_SWAP_BOOT ext4: fix build error when DX_DEBUG is defined ext4: fix argument checking in EXT4_IOC_MOVE_EXT ext4: fix reserved cluster accounting at page invalidation time ext4: adjust reserved cluster count when removing extents ext4: reduce reserved cluster count by number of allocated clusters ext4: fix reserved cluster accounting at delayed write time ext4: add new pending reservation mechanism ...
This commit is contained in:
@@ -17,6 +17,7 @@ struct mpage_da_data;
|
||||
struct ext4_map_blocks;
|
||||
struct extent_status;
|
||||
struct ext4_fsmap;
|
||||
struct partial_cluster;
|
||||
|
||||
#define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode))
|
||||
|
||||
@@ -2035,21 +2036,23 @@ TRACE_EVENT(ext4_ext_show_extent,
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_remove_blocks,
|
||||
TP_PROTO(struct inode *inode, struct ext4_extent *ex,
|
||||
ext4_lblk_t from, ext4_fsblk_t to,
|
||||
long long partial_cluster),
|
||||
TP_PROTO(struct inode *inode, struct ext4_extent *ex,
|
||||
ext4_lblk_t from, ext4_fsblk_t to,
|
||||
struct partial_cluster *pc),
|
||||
|
||||
TP_ARGS(inode, ex, from, to, partial_cluster),
|
||||
TP_ARGS(inode, ex, from, to, pc),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( ext4_lblk_t, from )
|
||||
__field( ext4_lblk_t, to )
|
||||
__field( long long, partial )
|
||||
__field( ext4_fsblk_t, ee_pblk )
|
||||
__field( ext4_lblk_t, ee_lblk )
|
||||
__field( unsigned short, ee_len )
|
||||
__field( ext4_fsblk_t, pc_pclu )
|
||||
__field( ext4_lblk_t, pc_lblk )
|
||||
__field( int, pc_state)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
@@ -2057,14 +2060,16 @@ TRACE_EVENT(ext4_remove_blocks,
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->from = from;
|
||||
__entry->to = to;
|
||||
__entry->partial = partial_cluster;
|
||||
__entry->ee_pblk = ext4_ext_pblock(ex);
|
||||
__entry->ee_lblk = le32_to_cpu(ex->ee_block);
|
||||
__entry->ee_len = ext4_ext_get_actual_len(ex);
|
||||
__entry->pc_pclu = pc->pclu;
|
||||
__entry->pc_lblk = pc->lblk;
|
||||
__entry->pc_state = pc->state;
|
||||
),
|
||||
|
||||
TP_printk("dev %d,%d ino %lu extent [%u(%llu), %u]"
|
||||
"from %u to %u partial_cluster %lld",
|
||||
"from %u to %u partial [pclu %lld lblk %u state %d]",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
(unsigned long) __entry->ino,
|
||||
(unsigned) __entry->ee_lblk,
|
||||
@@ -2072,45 +2077,53 @@ TRACE_EVENT(ext4_remove_blocks,
|
||||
(unsigned short) __entry->ee_len,
|
||||
(unsigned) __entry->from,
|
||||
(unsigned) __entry->to,
|
||||
(long long) __entry->partial)
|
||||
(long long) __entry->pc_pclu,
|
||||
(unsigned int) __entry->pc_lblk,
|
||||
(int) __entry->pc_state)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_ext_rm_leaf,
|
||||
TP_PROTO(struct inode *inode, ext4_lblk_t start,
|
||||
struct ext4_extent *ex,
|
||||
long long partial_cluster),
|
||||
struct partial_cluster *pc),
|
||||
|
||||
TP_ARGS(inode, start, ex, partial_cluster),
|
||||
TP_ARGS(inode, start, ex, pc),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( long long, partial )
|
||||
__field( ext4_lblk_t, start )
|
||||
__field( ext4_lblk_t, ee_lblk )
|
||||
__field( ext4_fsblk_t, ee_pblk )
|
||||
__field( short, ee_len )
|
||||
__field( ext4_fsblk_t, pc_pclu )
|
||||
__field( ext4_lblk_t, pc_lblk )
|
||||
__field( int, pc_state)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->partial = partial_cluster;
|
||||
__entry->start = start;
|
||||
__entry->ee_lblk = le32_to_cpu(ex->ee_block);
|
||||
__entry->ee_pblk = ext4_ext_pblock(ex);
|
||||
__entry->ee_len = ext4_ext_get_actual_len(ex);
|
||||
__entry->pc_pclu = pc->pclu;
|
||||
__entry->pc_lblk = pc->lblk;
|
||||
__entry->pc_state = pc->state;
|
||||
),
|
||||
|
||||
TP_printk("dev %d,%d ino %lu start_lblk %u last_extent [%u(%llu), %u]"
|
||||
"partial_cluster %lld",
|
||||
"partial [pclu %lld lblk %u state %d]",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
(unsigned long) __entry->ino,
|
||||
(unsigned) __entry->start,
|
||||
(unsigned) __entry->ee_lblk,
|
||||
(unsigned long long) __entry->ee_pblk,
|
||||
(unsigned short) __entry->ee_len,
|
||||
(long long) __entry->partial)
|
||||
(long long) __entry->pc_pclu,
|
||||
(unsigned int) __entry->pc_lblk,
|
||||
(int) __entry->pc_state)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_ext_rm_idx,
|
||||
@@ -2168,9 +2181,9 @@ TRACE_EVENT(ext4_ext_remove_space,
|
||||
|
||||
TRACE_EVENT(ext4_ext_remove_space_done,
|
||||
TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t end,
|
||||
int depth, long long partial, __le16 eh_entries),
|
||||
int depth, struct partial_cluster *pc, __le16 eh_entries),
|
||||
|
||||
TP_ARGS(inode, start, end, depth, partial, eh_entries),
|
||||
TP_ARGS(inode, start, end, depth, pc, eh_entries),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
@@ -2178,7 +2191,9 @@ TRACE_EVENT(ext4_ext_remove_space_done,
|
||||
__field( ext4_lblk_t, start )
|
||||
__field( ext4_lblk_t, end )
|
||||
__field( int, depth )
|
||||
__field( long long, partial )
|
||||
__field( ext4_fsblk_t, pc_pclu )
|
||||
__field( ext4_lblk_t, pc_lblk )
|
||||
__field( int, pc_state )
|
||||
__field( unsigned short, eh_entries )
|
||||
),
|
||||
|
||||
@@ -2188,18 +2203,23 @@ TRACE_EVENT(ext4_ext_remove_space_done,
|
||||
__entry->start = start;
|
||||
__entry->end = end;
|
||||
__entry->depth = depth;
|
||||
__entry->partial = partial;
|
||||
__entry->pc_pclu = pc->pclu;
|
||||
__entry->pc_lblk = pc->lblk;
|
||||
__entry->pc_state = pc->state;
|
||||
__entry->eh_entries = le16_to_cpu(eh_entries);
|
||||
),
|
||||
|
||||
TP_printk("dev %d,%d ino %lu since %u end %u depth %d partial %lld "
|
||||
TP_printk("dev %d,%d ino %lu since %u end %u depth %d "
|
||||
"partial [pclu %lld lblk %u state %d] "
|
||||
"remaining_entries %u",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
(unsigned long) __entry->ino,
|
||||
(unsigned) __entry->start,
|
||||
(unsigned) __entry->end,
|
||||
__entry->depth,
|
||||
(long long) __entry->partial,
|
||||
(long long) __entry->pc_pclu,
|
||||
(unsigned int) __entry->pc_lblk,
|
||||
(int) __entry->pc_state,
|
||||
(unsigned short) __entry->eh_entries)
|
||||
);
|
||||
|
||||
@@ -2270,7 +2290,7 @@ TRACE_EVENT(ext4_es_remove_extent,
|
||||
__entry->lblk, __entry->len)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_es_find_delayed_extent_range_enter,
|
||||
TRACE_EVENT(ext4_es_find_extent_range_enter,
|
||||
TP_PROTO(struct inode *inode, ext4_lblk_t lblk),
|
||||
|
||||
TP_ARGS(inode, lblk),
|
||||
@@ -2292,7 +2312,7 @@ TRACE_EVENT(ext4_es_find_delayed_extent_range_enter,
|
||||
(unsigned long) __entry->ino, __entry->lblk)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_es_find_delayed_extent_range_exit,
|
||||
TRACE_EVENT(ext4_es_find_extent_range_exit,
|
||||
TP_PROTO(struct inode *inode, struct extent_status *es),
|
||||
|
||||
TP_ARGS(inode, es),
|
||||
@@ -2512,6 +2532,41 @@ TRACE_EVENT(ext4_es_shrink,
|
||||
__entry->scan_time, __entry->nr_skipped, __entry->retried)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_es_insert_delayed_block,
|
||||
TP_PROTO(struct inode *inode, struct extent_status *es,
|
||||
bool allocated),
|
||||
|
||||
TP_ARGS(inode, es, allocated),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( ext4_lblk_t, lblk )
|
||||
__field( ext4_lblk_t, len )
|
||||
__field( ext4_fsblk_t, pblk )
|
||||
__field( char, status )
|
||||
__field( bool, allocated )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = inode->i_sb->s_dev;
|
||||
__entry->ino = inode->i_ino;
|
||||
__entry->lblk = es->es_lblk;
|
||||
__entry->len = es->es_len;
|
||||
__entry->pblk = ext4_es_pblock(es);
|
||||
__entry->status = ext4_es_status(es);
|
||||
__entry->allocated = allocated;
|
||||
),
|
||||
|
||||
TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %s "
|
||||
"allocated %d",
|
||||
MAJOR(__entry->dev), MINOR(__entry->dev),
|
||||
(unsigned long) __entry->ino,
|
||||
__entry->lblk, __entry->len,
|
||||
__entry->pblk, show_extent_status(__entry->status),
|
||||
__entry->allocated)
|
||||
);
|
||||
|
||||
/* fsmap traces */
|
||||
DECLARE_EVENT_CLASS(ext4_fsmap_class,
|
||||
TP_PROTO(struct super_block *sb, u32 keydev, u32 agno, u64 bno, u64 len,
|
||||
|
Reference in New Issue
Block a user