quota: fix potential infinite loop
In dquot_writeback_dquots(), we write back dquot from dirty dquots list. There is a potential infinite loop if ->write_dquot() failure and forget remove dquot from the list. This patch clear dirty bit anyway to avoid it. Signed-off-by: zhangyi (F) <yi.zhang@huawei.com> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
cb91775711
commit
dd5f627973
@ -644,8 +644,15 @@ int dquot_writeback_dquots(struct super_block *sb, int type)
|
||||
spin_unlock(&dq_list_lock);
|
||||
dqstats_inc(DQST_LOOKUPS);
|
||||
err = sb->dq_op->write_dquot(dquot);
|
||||
if (!ret && err)
|
||||
ret = err;
|
||||
if (err) {
|
||||
/*
|
||||
* Clear dirty bit anyway to avoid infinite
|
||||
* loop here.
|
||||
*/
|
||||
clear_dquot_dirty(dquot);
|
||||
if (!ret)
|
||||
ret = err;
|
||||
}
|
||||
dqput(dquot);
|
||||
spin_lock(&dq_list_lock);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user