【发布时间】:2018-06-28 12:14:00
【问题描述】:
我正在研究 EXT4 (JBD2) 中使用的日志层,并添加了一些 printk 以查看被调用的 ext4_journal_start 和 ext4_journal_stop 函数的行为。
这是程序:
我首先使用以下格式格式化给定的分区:
sudo mke2fs -t ext4 /dev/vdb
(我正在使用 QEMU 来运行这个实验)
然后我挂载它:
sudo mount /dev/vdb /mnt/mydisk
这是正常的挂载过程,但是当我挂载它时,由于我在两个ext4_journal_start/stop 中都有printk's 函数,dmesg 显示很多对journal_stop 的调用而没有任何journal_start。
P.S.:我猜应该是EXT4的一些背景行为什么的,但我不知道是什么。
这是dmesg 的输出:
* Restoring resolver state... [ OK ]
* Stopping System V runlevel compatibility [ OK ]
[ 124.648904] JOURNAL STOP
[ 124.778691] JOURNAL STOP
...
[... ] # it is called maybe more than 40 times
...
[ 129.641895] jbd2_journal_commit_transaction
[ 129.769132] JOURNAL STOP
...
[... ] # it is called maybe more than 40 times
...
[ 134.766164] jbd2_journal_commit_transaction
134 秒后,它会停止这些消息,然后我尝试将一些文件写入该挂载点,它的行为符合预期。
[ 624.995549] JOURNAL START
[ 624.996849] JOURNAL STOP
[ 625.000676] JOURNAL START
[ 625.001757] JOURNAL START
[ 625.002822] JOURNAL STOP
[ 625.003773] JOURNAL STOP
[ 631.004110] jbd2_journal_commit_transaction
所以,奇怪的是,在挂载之后,即使我什么也没做,这些函数也被多次调用(journal_stop),此外,在两次提交之后(函数调用jbd2_journal_commit_transaction)dmesg变得稳定,然后它遵循预期的行为。
为了清楚起见,我的问题是:是什么原因导致这几个电话无缘无故(ext4_journal_stop)?
【问题讨论】:
标签: c linux-kernel ext4