diff options
| author | Yongqiang Yang <xiaoqiangnk@gmail.com> | 2011-04-10 22:06:07 -0400 | 
|---|---|---|
| committer | Theodore Ts'o <tytso@mit.edu> | 2011-04-10 22:06:07 -0400 | 
| commit | be4f27d324e8ddd57cc0d4d604fe85ee0425cba9 (patch) | |
| tree | e4262a9e1ade9095e1bf937dc4b9d56a08824eda /Documentation/filesystems/configfs/configfs_example_explicit.c | |
| parent | 0893ed458b4b1d7c7667ca7ffb8b11febe7e7e6c (diff) | |
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 'Documentation/filesystems/configfs/configfs_example_explicit.c')
0 files changed, 0 insertions, 0 deletions
