Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
879c5e6b
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
879c5e6b
编写于
6月 17, 2009
作者:
T
Theodore Ts'o
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
jbd2: convert instrumentation from markers to tracepoints
Signed-off-by:
N
"Theodore Ts'o"
<
tytso@mit.edu
>
上级
65795efb
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
252 addition
and
9 deletion
+252
-9
fs/jbd2/checkpoint.c
fs/jbd2/checkpoint.c
+2
-3
fs/jbd2/commit.c
fs/jbd2/commit.c
+7
-6
fs/jbd2/journal.c
fs/jbd2/journal.c
+69
-0
include/linux/jbd2.h
include/linux/jbd2.h
+6
-0
include/trace/events/jbd2.h
include/trace/events/jbd2.h
+168
-0
未找到文件。
fs/jbd2/checkpoint.c
浏览文件 @
879c5e6b
...
@@ -20,9 +20,9 @@
...
@@ -20,9 +20,9 @@
#include <linux/time.h>
#include <linux/time.h>
#include <linux/fs.h>
#include <linux/fs.h>
#include <linux/jbd2.h>
#include <linux/jbd2.h>
#include <linux/marker.h>
#include <linux/errno.h>
#include <linux/errno.h>
#include <linux/slab.h>
#include <linux/slab.h>
#include <trace/events/jbd2.h>
/*
/*
* Unlink a buffer from a transaction checkpoint list.
* Unlink a buffer from a transaction checkpoint list.
...
@@ -358,8 +358,7 @@ int jbd2_log_do_checkpoint(journal_t *journal)
...
@@ -358,8 +358,7 @@ int jbd2_log_do_checkpoint(journal_t *journal)
* journal straight away.
* journal straight away.
*/
*/
result
=
jbd2_cleanup_journal_tail
(
journal
);
result
=
jbd2_cleanup_journal_tail
(
journal
);
trace_mark
(
jbd2_checkpoint
,
"dev %s need_checkpoint %d"
,
trace_jbd2_checkpoint
(
journal
,
result
);
journal
->
j_devname
,
result
);
jbd_debug
(
1
,
"cleanup_journal_tail returned %d
\n
"
,
result
);
jbd_debug
(
1
,
"cleanup_journal_tail returned %d
\n
"
,
result
);
if
(
result
<=
0
)
if
(
result
<=
0
)
return
result
;
return
result
;
...
...
fs/jbd2/commit.c
浏览文件 @
879c5e6b
...
@@ -16,7 +16,6 @@
...
@@ -16,7 +16,6 @@
#include <linux/time.h>
#include <linux/time.h>
#include <linux/fs.h>
#include <linux/fs.h>
#include <linux/jbd2.h>
#include <linux/jbd2.h>
#include <linux/marker.h>
#include <linux/errno.h>
#include <linux/errno.h>
#include <linux/slab.h>
#include <linux/slab.h>
#include <linux/mm.h>
#include <linux/mm.h>
...
@@ -26,6 +25,7 @@
...
@@ -26,6 +25,7 @@
#include <linux/writeback.h>
#include <linux/writeback.h>
#include <linux/backing-dev.h>
#include <linux/backing-dev.h>
#include <linux/bio.h>
#include <linux/bio.h>
#include <trace/events/jbd2.h>
/*
/*
* Default IO end handler for temporary BJ_IO buffer_heads.
* Default IO end handler for temporary BJ_IO buffer_heads.
...
@@ -253,6 +253,7 @@ static int journal_submit_data_buffers(journal_t *journal,
...
@@ -253,6 +253,7 @@ static int journal_submit_data_buffers(journal_t *journal,
* block allocation with delalloc. We need to write
* block allocation with delalloc. We need to write
* only allocated blocks here.
* only allocated blocks here.
*/
*/
trace_jbd2_submit_inode_data
(
jinode
->
i_vfs_inode
);
err
=
journal_submit_inode_data_buffers
(
mapping
);
err
=
journal_submit_inode_data_buffers
(
mapping
);
if
(
!
ret
)
if
(
!
ret
)
ret
=
err
;
ret
=
err
;
...
@@ -394,8 +395,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
...
@@ -394,8 +395,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
commit_transaction
=
journal
->
j_running_transaction
;
commit_transaction
=
journal
->
j_running_transaction
;
J_ASSERT
(
commit_transaction
->
t_state
==
T_RUNNING
);
J_ASSERT
(
commit_transaction
->
t_state
==
T_RUNNING
);
trace_mark
(
jbd2_start_commit
,
"dev %s transaction %d"
,
trace_jbd2_start_commit
(
journal
,
commit_transaction
);
journal
->
j_devname
,
commit_transaction
->
t_tid
);
jbd_debug
(
1
,
"JBD: starting commit of transaction %d
\n
"
,
jbd_debug
(
1
,
"JBD: starting commit of transaction %d
\n
"
,
commit_transaction
->
t_tid
);
commit_transaction
->
t_tid
);
...
@@ -409,6 +409,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
...
@@ -409,6 +409,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
*/
*/
if
(
commit_transaction
->
t_synchronous_commit
)
if
(
commit_transaction
->
t_synchronous_commit
)
write_op
=
WRITE_SYNC_PLUG
;
write_op
=
WRITE_SYNC_PLUG
;
trace_jbd2_commit_locking
(
journal
,
commit_transaction
);
stats
.
u
.
run
.
rs_wait
=
commit_transaction
->
t_max_wait
;
stats
.
u
.
run
.
rs_wait
=
commit_transaction
->
t_max_wait
;
stats
.
u
.
run
.
rs_locked
=
jiffies
;
stats
.
u
.
run
.
rs_locked
=
jiffies
;
stats
.
u
.
run
.
rs_running
=
jbd2_time_diff
(
commit_transaction
->
t_start
,
stats
.
u
.
run
.
rs_running
=
jbd2_time_diff
(
commit_transaction
->
t_start
,
...
@@ -484,6 +485,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
...
@@ -484,6 +485,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
*/
*/
jbd2_journal_switch_revoke_table
(
journal
);
jbd2_journal_switch_revoke_table
(
journal
);
trace_jbd2_commit_flushing
(
journal
,
commit_transaction
);
stats
.
u
.
run
.
rs_flushing
=
jiffies
;
stats
.
u
.
run
.
rs_flushing
=
jiffies
;
stats
.
u
.
run
.
rs_locked
=
jbd2_time_diff
(
stats
.
u
.
run
.
rs_locked
,
stats
.
u
.
run
.
rs_locked
=
jbd2_time_diff
(
stats
.
u
.
run
.
rs_locked
,
stats
.
u
.
run
.
rs_flushing
);
stats
.
u
.
run
.
rs_flushing
);
...
@@ -520,6 +522,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
...
@@ -520,6 +522,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
commit_transaction
->
t_state
=
T_COMMIT
;
commit_transaction
->
t_state
=
T_COMMIT
;
spin_unlock
(
&
journal
->
j_state_lock
);
spin_unlock
(
&
journal
->
j_state_lock
);
trace_jbd2_commit_logging
(
journal
,
commit_transaction
);
stats
.
u
.
run
.
rs_logging
=
jiffies
;
stats
.
u
.
run
.
rs_logging
=
jiffies
;
stats
.
u
.
run
.
rs_flushing
=
jbd2_time_diff
(
stats
.
u
.
run
.
rs_flushing
,
stats
.
u
.
run
.
rs_flushing
=
jbd2_time_diff
(
stats
.
u
.
run
.
rs_flushing
,
stats
.
u
.
run
.
rs_logging
);
stats
.
u
.
run
.
rs_logging
);
...
@@ -1054,9 +1057,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
...
@@ -1054,9 +1057,7 @@ void jbd2_journal_commit_transaction(journal_t *journal)
if
(
journal
->
j_commit_callback
)
if
(
journal
->
j_commit_callback
)
journal
->
j_commit_callback
(
journal
,
commit_transaction
);
journal
->
j_commit_callback
(
journal
,
commit_transaction
);
trace_mark
(
jbd2_end_commit
,
"dev %s transaction %d head %d"
,
trace_jbd2_end_commit
(
journal
,
commit_transaction
);
journal
->
j_devname
,
commit_transaction
->
t_tid
,
journal
->
j_tail_sequence
);
jbd_debug
(
1
,
"JBD: commit %d complete, head %d
\n
"
,
jbd_debug
(
1
,
"JBD: commit %d complete, head %d
\n
"
,
journal
->
j_commit_sequence
,
journal
->
j_tail_sequence
);
journal
->
j_commit_sequence
,
journal
->
j_tail_sequence
);
if
(
to_free
)
if
(
to_free
)
...
...
fs/jbd2/journal.c
浏览文件 @
879c5e6b
...
@@ -38,6 +38,10 @@
...
@@ -38,6 +38,10 @@
#include <linux/debugfs.h>
#include <linux/debugfs.h>
#include <linux/seq_file.h>
#include <linux/seq_file.h>
#include <linux/math64.h>
#include <linux/math64.h>
#include <linux/hash.h>
#define CREATE_TRACE_POINTS
#include <trace/events/jbd2.h>
#include <asm/uaccess.h>
#include <asm/uaccess.h>
#include <asm/page.h>
#include <asm/page.h>
...
@@ -2377,6 +2381,71 @@ static void __exit journal_exit(void)
...
@@ -2377,6 +2381,71 @@ static void __exit journal_exit(void)
jbd2_journal_destroy_caches
();
jbd2_journal_destroy_caches
();
}
}
/*
* jbd2_dev_to_name is a utility function used by the jbd2 and ext4
* tracing infrastructure to map a dev_t to a device name.
*
* The caller should use rcu_read_lock() in order to make sure the
* device name stays valid until its done with it. We use
* rcu_read_lock() as well to make sure we're safe in case the caller
* gets sloppy, and because rcu_read_lock() is cheap and can be safely
* nested.
*/
struct
devname_cache
{
struct
rcu_head
rcu
;
dev_t
device
;
char
devname
[
BDEVNAME_SIZE
];
};
#define CACHE_SIZE_BITS 6
static
struct
devname_cache
*
devcache
[
1
<<
CACHE_SIZE_BITS
];
static
DEFINE_SPINLOCK
(
devname_cache_lock
);
static
void
free_devcache
(
struct
rcu_head
*
rcu
)
{
kfree
(
rcu
);
}
const
char
*
jbd2_dev_to_name
(
dev_t
device
)
{
int
i
=
hash_32
(
device
,
CACHE_SIZE_BITS
);
char
*
ret
;
struct
block_device
*
bd
;
rcu_read_lock
();
if
(
devcache
[
i
]
&&
devcache
[
i
]
->
device
==
device
)
{
ret
=
devcache
[
i
]
->
devname
;
rcu_read_unlock
();
return
ret
;
}
rcu_read_unlock
();
spin_lock
(
&
devname_cache_lock
);
if
(
devcache
[
i
])
{
if
(
devcache
[
i
]
->
device
==
device
)
{
ret
=
devcache
[
i
]
->
devname
;
spin_unlock
(
&
devname_cache_lock
);
return
ret
;
}
call_rcu
(
&
devcache
[
i
]
->
rcu
,
free_devcache
);
}
devcache
[
i
]
=
kmalloc
(
sizeof
(
struct
devname_cache
),
GFP_KERNEL
);
if
(
!
devcache
[
i
])
{
spin_unlock
(
&
devname_cache_lock
);
return
"NODEV-ALLOCFAILURE"
;
/* Something non-NULL */
}
devcache
[
i
]
->
device
=
device
;
bd
=
bdget
(
device
);
if
(
bd
)
{
bdevname
(
bd
,
devcache
[
i
]
->
devname
);
bdput
(
bd
);
}
else
__bdevname
(
device
,
devcache
[
i
]
->
devname
);
ret
=
devcache
[
i
]
->
devname
;
spin_unlock
(
&
devname_cache_lock
);
return
ret
;
}
EXPORT_SYMBOL
(
jbd2_dev_to_name
);
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
module_init
(
journal_init
);
module_init
(
journal_init
);
module_exit
(
journal_exit
);
module_exit
(
journal_exit
);
...
...
include/linux/jbd2.h
浏览文件 @
879c5e6b
...
@@ -1315,6 +1315,12 @@ extern int jbd_blocks_per_page(struct inode *inode);
...
@@ -1315,6 +1315,12 @@ extern int jbd_blocks_per_page(struct inode *inode);
#define BUFFER_TRACE2(bh, bh2, info) do {} while (0)
#define BUFFER_TRACE2(bh, bh2, info) do {} while (0)
#define JBUFFER_TRACE(jh, info) do {} while (0)
#define JBUFFER_TRACE(jh, info) do {} while (0)
/*
* jbd2_dev_to_name is a utility function used by the jbd2 and ext4
* tracing infrastructure to map a dev_t to a device name.
*/
extern
const
char
*
jbd2_dev_to_name
(
dev_t
device
);
#endif
/* __KERNEL__ */
#endif
/* __KERNEL__ */
#endif
/* _LINUX_JBD2_H */
#endif
/* _LINUX_JBD2_H */
include/trace/events/jbd2.h
0 → 100644
浏览文件 @
879c5e6b
#if !defined(_TRACE_JBD2_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_JBD2_H
#include <linux/jbd2.h>
#include <linux/tracepoint.h>
#undef TRACE_SYSTEM
#define TRACE_SYSTEM jbd2
TRACE_EVENT
(
jbd2_checkpoint
,
TP_PROTO
(
journal_t
*
journal
,
int
result
),
TP_ARGS
(
journal
,
result
),
TP_STRUCT__entry
(
__field
(
dev_t
,
dev
)
__field
(
int
,
result
)
),
TP_fast_assign
(
__entry
->
dev
=
journal
->
j_fs_dev
->
bd_dev
;
__entry
->
result
=
result
;
),
TP_printk
(
"dev %s result %d"
,
jbd2_dev_to_name
(
__entry
->
dev
),
__entry
->
result
)
);
TRACE_EVENT
(
jbd2_start_commit
,
TP_PROTO
(
journal_t
*
journal
,
transaction_t
*
commit_transaction
),
TP_ARGS
(
journal
,
commit_transaction
),
TP_STRUCT__entry
(
__field
(
dev_t
,
dev
)
__field
(
char
,
sync_commit
)
__field
(
int
,
transaction
)
),
TP_fast_assign
(
__entry
->
dev
=
journal
->
j_fs_dev
->
bd_dev
;
__entry
->
sync_commit
=
commit_transaction
->
t_synchronous_commit
;
__entry
->
transaction
=
commit_transaction
->
t_tid
;
),
TP_printk
(
"dev %s transaction %d sync %d"
,
jbd2_dev_to_name
(
__entry
->
dev
),
__entry
->
transaction
,
__entry
->
sync_commit
)
);
TRACE_EVENT
(
jbd2_commit_locking
,
TP_PROTO
(
journal_t
*
journal
,
transaction_t
*
commit_transaction
),
TP_ARGS
(
journal
,
commit_transaction
),
TP_STRUCT__entry
(
__field
(
dev_t
,
dev
)
__field
(
char
,
sync_commit
)
__field
(
int
,
transaction
)
),
TP_fast_assign
(
__entry
->
dev
=
journal
->
j_fs_dev
->
bd_dev
;
__entry
->
sync_commit
=
commit_transaction
->
t_synchronous_commit
;
__entry
->
transaction
=
commit_transaction
->
t_tid
;
),
TP_printk
(
"dev %s transaction %d sync %d"
,
jbd2_dev_to_name
(
__entry
->
dev
),
__entry
->
transaction
,
__entry
->
sync_commit
)
);
TRACE_EVENT
(
jbd2_commit_flushing
,
TP_PROTO
(
journal_t
*
journal
,
transaction_t
*
commit_transaction
),
TP_ARGS
(
journal
,
commit_transaction
),
TP_STRUCT__entry
(
__field
(
dev_t
,
dev
)
__field
(
char
,
sync_commit
)
__field
(
int
,
transaction
)
),
TP_fast_assign
(
__entry
->
dev
=
journal
->
j_fs_dev
->
bd_dev
;
__entry
->
sync_commit
=
commit_transaction
->
t_synchronous_commit
;
__entry
->
transaction
=
commit_transaction
->
t_tid
;
),
TP_printk
(
"dev %s transaction %d sync %d"
,
jbd2_dev_to_name
(
__entry
->
dev
),
__entry
->
transaction
,
__entry
->
sync_commit
)
);
TRACE_EVENT
(
jbd2_commit_logging
,
TP_PROTO
(
journal_t
*
journal
,
transaction_t
*
commit_transaction
),
TP_ARGS
(
journal
,
commit_transaction
),
TP_STRUCT__entry
(
__field
(
dev_t
,
dev
)
__field
(
char
,
sync_commit
)
__field
(
int
,
transaction
)
),
TP_fast_assign
(
__entry
->
dev
=
journal
->
j_fs_dev
->
bd_dev
;
__entry
->
sync_commit
=
commit_transaction
->
t_synchronous_commit
;
__entry
->
transaction
=
commit_transaction
->
t_tid
;
),
TP_printk
(
"dev %s transaction %d sync %d"
,
jbd2_dev_to_name
(
__entry
->
dev
),
__entry
->
transaction
,
__entry
->
sync_commit
)
);
TRACE_EVENT
(
jbd2_end_commit
,
TP_PROTO
(
journal_t
*
journal
,
transaction_t
*
commit_transaction
),
TP_ARGS
(
journal
,
commit_transaction
),
TP_STRUCT__entry
(
__field
(
dev_t
,
dev
)
__field
(
char
,
sync_commit
)
__field
(
int
,
transaction
)
__field
(
int
,
head
)
),
TP_fast_assign
(
__entry
->
dev
=
journal
->
j_fs_dev
->
bd_dev
;
__entry
->
sync_commit
=
commit_transaction
->
t_synchronous_commit
;
__entry
->
transaction
=
commit_transaction
->
t_tid
;
__entry
->
head
=
journal
->
j_tail_sequence
;
),
TP_printk
(
"dev %s transaction %d sync %d head %d"
,
jbd2_dev_to_name
(
__entry
->
dev
),
__entry
->
transaction
,
__entry
->
sync_commit
,
__entry
->
head
)
);
TRACE_EVENT
(
jbd2_submit_inode_data
,
TP_PROTO
(
struct
inode
*
inode
),
TP_ARGS
(
inode
),
TP_STRUCT__entry
(
__field
(
dev_t
,
dev
)
__field
(
ino_t
,
ino
)
),
TP_fast_assign
(
__entry
->
dev
=
inode
->
i_sb
->
s_dev
;
__entry
->
ino
=
inode
->
i_ino
;
),
TP_printk
(
"dev %s ino %lu"
,
jbd2_dev_to_name
(
__entry
->
dev
),
__entry
->
ino
)
);
#endif
/* _TRACE_JBD2_H */
/* This part must be outside protection */
#include <trace/define_trace.h>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录