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 <cgxu...@gmx.com>

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 <j...@suse.com>
SUSE Labs, CR

Reply via email to