Re: [PATCH] quota: check time limit when back out space/inode change

From: Jan Kara
Date: Tue Apr 30 2019 - 12:06:32 EST


On Tue 30-04-19 14:40:10, Chengguang Xu wrote:
> When we fail from allocating inode/space, we back out
> the change we already did. In a special case which has
> exceeded soft limit by the change, we should also check
> time limit and reset it properly.
>
> Signed-off-by: Chengguang Xu <cgxu519@xxxxxxx>

Good catch. Thanks for fixing this. I've added the patch to my tree.

Honza

> ---
> fs/quota/dquot.c | 14 ++++++--------
> 1 file changed, 6 insertions(+), 8 deletions(-)
>
> diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
> index 9d7dfc47c854..58f15a083dd1 100644
> --- a/fs/quota/dquot.c
> +++ b/fs/quota/dquot.c
> @@ -1681,13 +1681,11 @@ int __dquot_alloc_space(struct inode *inode, qsize_t number, int flags)
> if (!dquots[cnt])
> continue;
> spin_lock(&dquots[cnt]->dq_dqb_lock);
> - if (reserve) {
> - dquots[cnt]->dq_dqb.dqb_rsvspace -=
> - number;
> - } else {
> - dquots[cnt]->dq_dqb.dqb_curspace -=
> - number;
> - }
> + if (reserve)
> + dquot_free_reserved_space(dquots[cnt],
> + number);
> + else
> + dquot_decr_space(dquots[cnt], number);
> spin_unlock(&dquots[cnt]->dq_dqb_lock);
> }
> spin_unlock(&inode->i_lock);
> @@ -1738,7 +1736,7 @@ int dquot_alloc_inode(struct inode *inode)
> continue;
> /* Back out changes we already did */
> spin_lock(&dquots[cnt]->dq_dqb_lock);
> - dquots[cnt]->dq_dqb.dqb_curinodes--;
> + dquot_decr_inodes(dquots[cnt], 1);
> spin_unlock(&dquots[cnt]->dq_dqb_lock);
> }
> goto warn_put_all;
> --
> 2.20.1
>
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR