diff options
author | Chengguang Xu <cgxu519@gmx.com> | 2019-04-30 14:40:10 +0800 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2019-04-30 18:05:55 +0200 |
commit | 632a9f3acd6687376cbb0b178df6048e19cbacc9 (patch) | |
tree | ad979ed85168a32d15ea8d1d8f0c99bdb38a3719 /fs/quota/dquot.c | |
parent | 78bc3334a69ff289dbc973a9db7c52a2d7757e5b (diff) |
quota: check time limit when back out space/inode change
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>
Diffstat (limited to 'fs/quota/dquot.c')
-rw-r--r-- | fs/quota/dquot.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 67e534dbfc0e..9ad72ea7f71f 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; |