diff mbox

Btrfs: don't kzalloc the ordered extents

Message ID 1302045649-1580-1-git-send-email-josef@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Josef Bacik April 5, 2011, 11:20 p.m. UTC
We initialize almost all of the fields when we allocate an ordered extent, so
use kmalloc instead of kzalloc and just initialize the other fields that we
don't already initialize yet.  Thanks,

Signed-off-by: Josef Bacik <josef@redhat.com>
---
 fs/btrfs/ordered-data.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

Comments

Arne Jansen April 6, 2011, 7:54 a.m. UTC | #1
On 06.04.2011 01:20, Josef Bacik wrote:
> We initialize almost all of the fields when we allocate an ordered extent, so
> use kmalloc instead of kzalloc and just initialize the other fields that we
> don't already initialize yet.  Thanks,

Is it really worth it? we have seen a few bugs in the past resulting
from uninitialized structure element, that even made it to disk.
Using kzalloc makes maintenance much easier.

-Arne

> 
> Signed-off-by: Josef Bacik <josef@redhat.com>
> ---
>  fs/btrfs/ordered-data.c |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c
> index 083a554..2edc837 100644
> --- a/fs/btrfs/ordered-data.c
> +++ b/fs/btrfs/ordered-data.c
> @@ -179,7 +179,7 @@ static int __btrfs_add_ordered_extent(struct inode *inode, u64 file_offset,
>  	struct btrfs_ordered_extent *entry;
>  
>  	tree = &BTRFS_I(inode)->ordered_tree;
> -	entry = kzalloc(sizeof(*entry), GFP_NOFS);
> +	entry = kmalloc(sizeof(*entry), GFP_NOFS);
>  	if (!entry)
>  		return -ENOMEM;
>  
> @@ -190,6 +190,7 @@ static int __btrfs_add_ordered_extent(struct inode *inode, u64 file_offset,
>  	entry->bytes_left = len;
>  	entry->inode = inode;
>  	entry->compress_type = compress_type;
> +	entry->flags = 0;
>  	if (type != BTRFS_ORDERED_IO_DONE && type != BTRFS_ORDERED_COMPLETE)
>  		set_bit(type, &entry->flags);
>  
> @@ -201,6 +202,7 @@ static int __btrfs_add_ordered_extent(struct inode *inode, u64 file_offset,
>  	init_waitqueue_head(&entry->wait);
>  	INIT_LIST_HEAD(&entry->list);
>  	INIT_LIST_HEAD(&entry->root_extent_list);
> +	RB_CLEAR_NODE(&entry->rb_node);
>  
>  	spin_lock(&tree->lock);
>  	node = tree_insert(&tree->tree, file_offset,

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Chris Mason April 6, 2011, 11:06 a.m. UTC | #2
Excerpts from Arne Jansen's message of 2011-04-06 03:54:07 -0400:
> On 06.04.2011 01:20, Josef Bacik wrote:
> > We initialize almost all of the fields when we allocate an ordered extent, so
> > use kmalloc instead of kzalloc and just initialize the other fields that we
> > don't already initialize yet.  Thanks,
> 
> Is it really worth it? we have seen a few bugs in the past resulting
> from uninitialized structure element, that even made it to disk.
> Using kzalloc makes maintenance much easier.

I'm a big kzalloc fan unless this particular caller shows up in
benchmarks.  Josef how much did this one help?

-chris
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Josef Bacik April 6, 2011, 3:24 p.m. UTC | #3
On 04/06/2011 07:06 AM, Chris Mason wrote:
> Excerpts from Arne Jansen's message of 2011-04-06 03:54:07 -0400:
>> On 06.04.2011 01:20, Josef Bacik wrote:
>>> We initialize almost all of the fields when we allocate an ordered extent, so
>>> use kmalloc instead of kzalloc and just initialize the other fields that we
>>> don't already initialize yet.  Thanks,
>> Is it really worth it? we have seen a few bugs in the past resulting
>> from uninitialized structure element, that even made it to disk.
>> Using kzalloc makes maintenance much easier.
> I'm a big kzalloc fan unless this particular caller shows up in
> benchmarks.  Josef how much did this one help?
>
> -chris
.1 mb/s, give or take .1 mb/s :).  Just low hanging fruit since we're 
already doing all the initialization anyway, but it's up to you, kind of 
just was fixing everything I could get my hands on :).  Thanks,

Josef
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c
index 083a554..2edc837 100644
--- a/fs/btrfs/ordered-data.c
+++ b/fs/btrfs/ordered-data.c
@@ -179,7 +179,7 @@  static int __btrfs_add_ordered_extent(struct inode *inode, u64 file_offset,
 	struct btrfs_ordered_extent *entry;
 
 	tree = &BTRFS_I(inode)->ordered_tree;
-	entry = kzalloc(sizeof(*entry), GFP_NOFS);
+	entry = kmalloc(sizeof(*entry), GFP_NOFS);
 	if (!entry)
 		return -ENOMEM;
 
@@ -190,6 +190,7 @@  static int __btrfs_add_ordered_extent(struct inode *inode, u64 file_offset,
 	entry->bytes_left = len;
 	entry->inode = inode;
 	entry->compress_type = compress_type;
+	entry->flags = 0;
 	if (type != BTRFS_ORDERED_IO_DONE && type != BTRFS_ORDERED_COMPLETE)
 		set_bit(type, &entry->flags);
 
@@ -201,6 +202,7 @@  static int __btrfs_add_ordered_extent(struct inode *inode, u64 file_offset,
 	init_waitqueue_head(&entry->wait);
 	INIT_LIST_HEAD(&entry->list);
 	INIT_LIST_HEAD(&entry->root_extent_list);
+	RB_CLEAR_NODE(&entry->rb_node);
 
 	spin_lock(&tree->lock);
 	node = tree_insert(&tree->tree, file_offset,