diff options
| author | Andrew Morton <akpm@digeo.com> | 2003-05-12 09:11:23 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2003-05-12 09:11:23 -0700 |
| commit | ed0994daf813d8d3bbef70ab7fb231294c17469e (patch) | |
| tree | 60584027d72e3ab3b3820f2a19df5da35b7f24e8 | |
| parent | c47b79715dba151cfe016f3c138269df86a69e21 (diff) | |
[PATCH] dquot_transfer() fix
From: Jan Kara <jack@suse.cz>
I'm sending a fix which fixes potential problems (dropping references which
were not acquired) when dquot_transfer() fails.
| -rw-r--r-- | fs/dquot.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/dquot.c b/fs/dquot.c index f3c0f63265c3..edda8c2009d6 100644 --- a/fs/dquot.c +++ b/fs/dquot.c @@ -1011,9 +1011,12 @@ warn_put_all: spin_unlock(&dq_data_lock); flush_warnings(transfer_to, warntype); - for (cnt = 0; cnt < MAXQUOTAS; cnt++) - if (transfer_from[cnt] != NODQUOT) + for (cnt = 0; cnt < MAXQUOTAS; cnt++) { + if (ret == QUOTA_OK && transfer_from[cnt] != NODQUOT) dqput(transfer_from[cnt]); + if (ret == NO_QUOTA && transfer_to[cnt] != NODQUOT) + dqput(transfer_to[cnt]); + } up_write(&sb_dqopt(inode->i_sb)->dqptr_sem); return ret; } |
