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