summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Morton <akpm@digeo.com>2003-05-12 09:11:23 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2003-05-12 09:11:23 -0700
commited0994daf813d8d3bbef70ab7fb231294c17469e (patch)
tree60584027d72e3ab3b3820f2a19df5da35b7f24e8
parentc47b79715dba151cfe016f3c138269df86a69e21 (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.c7
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;
}