mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 01:10:04 +00:00
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
Pull quota fix from Jan Kara: "A fix for a regression in handling of quota grace times and warnings" * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs: quota: Generate warnings for DQUOT_SPACE_NOFAIL allocations
This commit is contained in:
commit
3206e7d5e2
1 changed files with 16 additions and 11 deletions
|
@ -1297,21 +1297,18 @@ static int dquot_add_space(struct dquot *dquot, qsize_t space,
|
|||
spin_lock(&dquot->dq_dqb_lock);
|
||||
if (!sb_has_quota_limits_enabled(sb, dquot->dq_id.type) ||
|
||||
test_bit(DQ_FAKE_B, &dquot->dq_flags))
|
||||
goto add;
|
||||
goto finish;
|
||||
|
||||
tspace = dquot->dq_dqb.dqb_curspace + dquot->dq_dqb.dqb_rsvspace
|
||||
+ space + rsv_space;
|
||||
|
||||
if (flags & DQUOT_SPACE_NOFAIL)
|
||||
goto add;
|
||||
|
||||
if (dquot->dq_dqb.dqb_bhardlimit &&
|
||||
tspace > dquot->dq_dqb.dqb_bhardlimit &&
|
||||
!ignore_hardlimit(dquot)) {
|
||||
if (flags & DQUOT_SPACE_WARN)
|
||||
prepare_warning(warn, dquot, QUOTA_NL_BHARDWARN);
|
||||
ret = -EDQUOT;
|
||||
goto out;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (dquot->dq_dqb.dqb_bsoftlimit &&
|
||||
|
@ -1322,7 +1319,7 @@ static int dquot_add_space(struct dquot *dquot, qsize_t space,
|
|||
if (flags & DQUOT_SPACE_WARN)
|
||||
prepare_warning(warn, dquot, QUOTA_NL_BSOFTLONGWARN);
|
||||
ret = -EDQUOT;
|
||||
goto out;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (dquot->dq_dqb.dqb_bsoftlimit &&
|
||||
|
@ -1338,13 +1335,21 @@ static int dquot_add_space(struct dquot *dquot, qsize_t space,
|
|||
* be always printed
|
||||
*/
|
||||
ret = -EDQUOT;
|
||||
goto out;
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
add:
|
||||
dquot->dq_dqb.dqb_rsvspace += rsv_space;
|
||||
dquot->dq_dqb.dqb_curspace += space;
|
||||
out:
|
||||
finish:
|
||||
/*
|
||||
* We have to be careful and go through warning generation & grace time
|
||||
* setting even if DQUOT_SPACE_NOFAIL is set. That's why we check it
|
||||
* only here...
|
||||
*/
|
||||
if (flags & DQUOT_SPACE_NOFAIL)
|
||||
ret = 0;
|
||||
if (!ret) {
|
||||
dquot->dq_dqb.dqb_rsvspace += rsv_space;
|
||||
dquot->dq_dqb.dqb_curspace += space;
|
||||
}
|
||||
spin_unlock(&dquot->dq_dqb_lock);
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue