lkml.org 
[lkml]   [2005]   [Jan]   [24]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
/
DateMon, 24 Jan 2005 11:14:54 +0100
FromJan Kara <>
SubjectRe: 2.6.11-rc2/ext3 quota allocation bug on error path ...
> 
> looking at ext3_xattr_block_set() [fs/ext3/xattr.c] ...
> I see that 
> 
>                                 error = -EDQUOT;
>                                 if (DQUOT_ALLOC_BLOCK(inode, 1))
>                                         goto cleanup;
> 
> allocates a quota block, but right after that several
> error echecks happen ...
> 
>                                 if (error)
>                                         goto cleanup;
> 
> and I don't see any DQUOT_FREE_BLOCK() in the errorpath
> 
> cleanup:
>         if (ce)
>                 mb_cache_entry_release(ce);
>         brelse(new_bh); 
>         if (!(bs->bh && s->base == bs->bh->b_data))
>                 kfree(s->base);
> 
>         return error;
> 
> I'd suggest the attached fix (agains 2.6.11-rc2), comments?
  Yes, the patch looks right. Please apply it, Andrew. BTW ext2 needs a
similar fix - will submit in the next mail.

								Honza


> --- ./fs/ext3/xattr.c.orig	2005-01-22 15:07:50 +0100
> +++ ./fs/ext3/xattr.c		2005-01-22 16:45:09 +0100
> @@ -773,7 +773,7 @@ inserted:
>  				error = ext3_journal_get_write_access(handle,
>  								      new_bh);
>  				if (error)
> -					goto cleanup;
> +					goto cleanup_dquot;
>  				lock_buffer(new_bh);
>  				BHDR(new_bh)->h_refcount = cpu_to_le32(1 +
>  					le32_to_cpu(BHDR(new_bh)->h_refcount));
> @@ -783,7 +783,7 @@ inserted:
>  				error = ext3_journal_dirty_metadata(handle,
>  								    new_bh);
>  				if (error)
> -					goto cleanup;
> +					goto cleanup_dquot;
>  			}
>  			mb_cache_entry_release(ce);
>  			ce = NULL;
> @@ -844,6 +844,10 @@ cleanup:
> 
>  	return error;
> 
> +cleanup_dquot:
> +	DQUOT_FREE_BLOCK(inode, 1);
> +	goto cleanup;
> +
>  bad_block:
>  	ext3_error(inode->i_sb, __FUNCTION__,
>  		   "inode %ld: bad block %d", inode->i_ino,
> 
-- 
Jan Kara <jack@suse.cz>
SuSE CR Labs
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 14:09    [from the cache]
©2003-2008