diff options
author | Yongqiang Yang | 2011-04-11 04:06:07 +0200 |
---|---|---|
committer | Theodore Ts'o | 2011-04-11 04:06:07 +0200 |
commit | be4f27d324e8ddd57cc0d4d604fe85ee0425cba9 (patch) | |
tree | e4262a9e1ade9095e1bf937dc4b9d56a08824eda /fs/partitions/check.h | |
parent | ext4: sync the directory inode in ext4_sync_parent() (diff) | |
download | kernel-qcow2-linux-be4f27d324e8ddd57cc0d4d604fe85ee0425cba9.tar.gz kernel-qcow2-linux-be4f27d324e8ddd57cc0d4d604fe85ee0425cba9.tar.xz kernel-qcow2-linux-be4f27d324e8ddd57cc0d4d604fe85ee0425cba9.zip |
ext4: allow an active handle to be started when freezing
ext4_journal_start_sb() should not prevent an active handle from being
started due to s_frozen. Otherwise, deadlock is easy to happen, below
is a situation.
================================================
freeze | truncate
================================================
| ext4_ext_truncate()
freeze_super() | starts a handle
sets s_frozen |
| ext4_ext_truncate()
| holds i_data_sem
ext4_freeze() |
waits for updates |
| ext4_free_blocks()
| calls dquot_free_block()
|
| dquot_free_blocks()
| calls ext4_dirty_inode()
|
| ext4_dirty_inode()
| trys to start an active
| handle
|
| block due to s_frozen
================================================
Signed-off-by: Yongqiang Yang <xiaoqiangnk@gmail.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Reported-by: Amir Goldstein <amir73il@users.sf.net>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Andreas Dilger <adilger@dilger.ca>
Diffstat (limited to 'fs/partitions/check.h')
0 files changed, 0 insertions, 0 deletions