quota: check time limit when back out space/inode change
[ Upstream commit 632a9f3acd6687376cbb0b178df6048e19cbacc9 ] 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@gmx.com> Signed-off-by: Jan Kara <jack@suse.cz> Stable-dep-of: 179b8c97ebf6 ("quota: Fix rcu annotations of inode dquot pointers") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
1974c13019
commit
e87ed533e7
@ -1760,13 +1760,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);
|
||||
@ -1817,7 +1815,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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user