Re: [PATCH] possible bug in quota format v2 support

From: Jan Kara
Date: Thu Mar 31 2005 - 09:23:36 EST


Hello,

> I'm afraid that there is a bug in quota format v2 delete qentry.
> (The root block shouldn't be put into free blk list even if there isn't
> any entry in quota file, right?)
>
> This one line patch may fix it.
Such case should not actually occur in normal operation but I agree
that with your patch the code will handle errors more gracefuly. Your
patch seems to have wrapped lines and substituted tabs for spaces
(please try to persuade your mail agent not to wrap lines and substitute
tabs next time or just send the patch as an attachment) so I rediffed it
- the result is attached. Andrew please apply the attached patch.

Thanks for spotting it
Honza

--
Jan Kara <jack@xxxxxxx>
SuSE CR Labs
Don't put root block of quota tree to the free list (when quota file is completely
empty). That should not actually happen anyway (somebody should get accounted for
the filesystem root and so quota file should never be empty) but better prevent it
here than solve magical quota file corruption...

From: Niu YaWei <niu@xxxxxxxxxxxxx>
Signed-off-by: Jan Kara <jack@xxxxxxx>

diff -rupX /home/jack/.kerndiffexclude linux-2.6.11/fs/quota_v2.c linux-2.6.11-v2fix/fs/quota_v2.c
--- linux-2.6.11/fs/quota_v2.c 2005-03-03 18:58:30.000000000 +0100
+++ linux-2.6.11-v2fix/fs/quota_v2.c 2005-03-31 15:51:51.000000000 +0200
@@ -503,7 +503,8 @@ static int remove_tree(struct dquot *dqu
int i;
ref[GETIDINDEX(dquot->dq_id, depth)] = cpu_to_le32(0);
for (i = 0; i < V2_DQBLKSIZE && !buf[i]; i++); /* Block got empty? */
- if (i == V2_DQBLKSIZE) {
+ /* Don't put the root block into the free block list */
+ if (i == V2_DQBLKSIZE && *blk != V2_DQTREEOFF) {
put_free_dqblk(sb, type, buf, *blk);
*blk = 0;
}