2012-01-30 08:44:21

by Kazuya Mio

[permalink] [raw]
Subject: [PATCH 1/2] ext3: Don't call dquot_free_block() if we don't update anything

dquot_free_block() is called in the end of ext3_new_blocks() and updates
information of the inode structure. However, this update is not necessary
if the number of blocks we requested is equal to the number of
allocated blocks.

Signed-off-by: Kazuya Mio <[email protected]>
---
fs/ext3/balloc.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/fs/ext3/balloc.c b/fs/ext3/balloc.c
index a203892..954a7d3 100644
--- a/fs/ext3/balloc.c
+++ b/fs/ext3/balloc.c
@@ -1743,8 +1743,11 @@ allocated:

*errp = 0;
brelse(bitmap_bh);
- dquot_free_block(inode, *count-num);
- *count = num;
+
+ if (num < *count) {
+ dquot_free_block(inode, *count-num);
+ *count = num;
+ }

trace_ext3_allocate_blocks(inode, goal, num,
(unsigned long long)ret_block);


2012-02-02 16:01:21

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH 1/2] ext3: Don't call dquot_free_block() if we don't update anything

On Mon 30-01-12 17:41:25, Kazuya Mio wrote:
> dquot_free_block() is called in the end of ext3_new_blocks() and updates
> information of the inode structure. However, this update is not necessary
> if the number of blocks we requested is equal to the number of
> allocated blocks.
This is obviously correct thing to do so I've merged this patch into
my tree. Thanks.

Honza
>
> Signed-off-by: Kazuya Mio <[email protected]>
> ---
> fs/ext3/balloc.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
> diff --git a/fs/ext3/balloc.c b/fs/ext3/balloc.c
> index a203892..954a7d3 100644
> --- a/fs/ext3/balloc.c
> +++ b/fs/ext3/balloc.c
> @@ -1743,8 +1743,11 @@ allocated:
>
> *errp = 0;
> brelse(bitmap_bh);
> - dquot_free_block(inode, *count-num);
> - *count = num;
> +
> + if (num < *count) {
> + dquot_free_block(inode, *count-num);
> + *count = num;
> + }
>
> trace_ext3_allocate_blocks(inode, goal, num,
> (unsigned long long)ret_block);
--
Jan Kara <[email protected]>
SUSE Labs, CR