ocfs2: Fix possible deadlock in ocfs2_write_dquot()
It could happen that some limit has been set via quotactl() and in parallel ->mark_dirty() is called from another thread doing e.g. dquot_alloc_space(). In such case ocfs2_write_dquot() must not try to sync the dquot because that needs global quota lock but that ranks above transaction start. Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Mark Fasheh <mfasheh@suse.com>
This commit is contained in:
Родитель
ea455f8ab6
Коммит
f8afead716
|
@ -754,7 +754,9 @@ static int ocfs2_mark_dquot_dirty(struct dquot *dquot)
|
|||
if (dquot->dq_flags & mask)
|
||||
sync = 1;
|
||||
spin_unlock(&dq_data_lock);
|
||||
if (!sync) {
|
||||
/* This is a slight hack but we can't afford getting global quota
|
||||
* lock if we already have a transaction started. */
|
||||
if (!sync || journal_current_handle()) {
|
||||
status = ocfs2_write_dquot(dquot);
|
||||
goto out;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче