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>
                        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);
                }