-@@ -1381,10 +1388,14 @@
- /* Avoid races with quotaoff() */
- if (!sb_has_quota_active(sb, cnt))
- continue;
-- /* We could race with quotaon or dqget() could have failed */
-- if (!got[cnt])
-- continue;
- if (!inode->i_dquot[cnt]) {
-+ if (dq_get == 0) {
-+ spin_unlock(&inode->i_lock);
-+ goto get_dquots;
-+ }
-+ /* We could race with quotaon or dqget() could have failed */
-+ if (!got[cnt])
-+ continue;
- inode->i_dquot[cnt] = got[cnt];
- got[cnt] = NULL;
- /*
-@@ -1388,7 +1399,7 @@
- * did a write before quota was turned on
- */
- rsv = inode_get_rsv_space(inode);
-- if (unlikely(rsv)) {
-+ if (unlikely(rsv) && likely(inode->i_dquot[cnt])) {
- spin_lock(&dq_data_lock);
- dquot_resv_space(inode->i_dquot[cnt], rsv);
- spin_unlock(&dq_data_lock);
-@@ -1488,7 +1399,8 @@
- spin_unlock(&inode->i_lock);
-
- /* Drop unused references */
-- dqput_all(got);
-+ if (dq_get)
-+ dqput_all(got);
- }
-
- void dquot_initialize(struct inode *inode)