From: Eric Sandeen <sandeen@redhat.com>
To: Gene Czarcinski <gene@czarc.net>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH 4/6] Fedora 18 - modified valgrind.patch
Date: Wed, 23 Jan 2013 13:40:28 -0600 [thread overview]
Message-ID: <51003CAC.4060101@redhat.com> (raw)
In-Reply-To: <1358618781-26629-5-git-send-email-gene@czarc.net>
On 1/19/13 12:06 PM, Gene Czarcinski wrote:
> A small part of this patch proved unnecessary because it was
> already corrected by the plug a memory leak reported by cppcheck
> patch.
Thanks Gene - I'd kind of like to hold off on this one (just in
case it was on the verge of being merged) because Zach & I are going
through some coverity scans which will probably overlap with this,
and might actually be reviewable/bisectable/attributable etc. :)
Thanks,
-Eric
> Signed-off-by: Gene Czarcinski <gene@czarc.net>
> ---
> disk-io.c | 16 +++++++++++-----
> extent-cache.c | 11 +++++++++++
> extent-cache.h | 1 +
> extent-tree.c | 10 ++++++++++
> volumes.c | 16 +++++++++++++++-
> volumes.h | 1 +
> 6 files changed, 49 insertions(+), 6 deletions(-)
>
> diff --git a/disk-io.c b/disk-io.c
> index c4d4631..5b6c6b1 100644
> --- a/disk-io.c
> +++ b/disk-io.c
> @@ -631,7 +631,7 @@ static struct btrfs_fs_info *__open_ctree_fd(int fp, const char *path,
> struct btrfs_root *chunk_root = malloc(sizeof(struct btrfs_root));
> struct btrfs_root *dev_root = malloc(sizeof(struct btrfs_root));
> struct btrfs_root *csum_root = malloc(sizeof(struct btrfs_root));
> - struct btrfs_fs_info *fs_info = malloc(sizeof(*fs_info));
> + struct btrfs_fs_info *fs_info = malloc(sizeof(struct btrfs_fs_info));
> int ret;
> struct btrfs_super_block *disk_super;
> struct btrfs_fs_devices *fs_devices = NULL;
> @@ -655,7 +655,7 @@ static struct btrfs_fs_info *__open_ctree_fd(int fp, const char *path,
> goto out;
> }
>
> - memset(fs_info, 0, sizeof(*fs_info));
> + memset(fs_info, 0, sizeof(struct btrfs_fs_info));
> fs_info->tree_root = tree_root;
> fs_info->extent_root = extent_root;
> fs_info->chunk_root = chunk_root;
> @@ -1084,15 +1084,19 @@ static int close_all_devices(struct btrfs_fs_info *fs_info)
> {
> struct list_head *list;
> struct list_head *next;
> + struct list_head *tmp;
> struct btrfs_device *device;
>
> - return 0;
> -
> list = &fs_info->fs_devices->devices;
> - list_for_each(next, list) {
> + list_for_each_safe(next, tmp, list) {
> device = list_entry(next, struct btrfs_device, dev_list);
> close(device->fd);
> + list_del(&device->dev_list);
> + free(device->name);
> + free(device->label);
> + free(device);
> }
> + free(fs_info->fs_devices);
> return 0;
> }
>
> @@ -1142,12 +1146,14 @@ int close_ctree(struct btrfs_root *root)
> extent_io_tree_cleanup(&fs_info->pinned_extents);
> extent_io_tree_cleanup(&fs_info->pending_del);
> extent_io_tree_cleanup(&fs_info->extent_ins);
> + btrfs_mapping_tree_free(&fs_info->mapping_tree);
>
> free(fs_info->tree_root);
> free(fs_info->extent_root);
> free(fs_info->chunk_root);
> free(fs_info->dev_root);
> free(fs_info->csum_root);
> + free(fs_info->log_root_tree);
> free(fs_info);
>
> return 0;
> diff --git a/extent-cache.c b/extent-cache.c
> index 3dd6434..84d4bbc 100644
> --- a/extent-cache.c
> +++ b/extent-cache.c
> @@ -168,3 +168,14 @@ void remove_cache_extent(struct cache_tree *tree,
> rb_erase(&pe->rb_node, &tree->root);
> }
>
> +void free_cache_tree(struct cache_tree *tree)
> +{
> + struct rb_node *node;
> + struct cache_extent *cache;
> +
> + while ((node = rb_last(&tree->root)) != NULL) {
> + cache = rb_entry(node, struct cache_extent, rb_node);
> + remove_cache_extent(tree, cache);
> + free(cache);
> + }
> +}
> diff --git a/extent-cache.h b/extent-cache.h
> index 7f2f2a6..1696bc2 100644
> --- a/extent-cache.h
> +++ b/extent-cache.h
> @@ -43,6 +43,7 @@ struct cache_extent *find_cache_extent(struct cache_tree *tree,
> int insert_cache_extent(struct cache_tree *tree, u64 start, u64 size);
> int insert_existing_cache_extent(struct cache_tree *tree,
> struct cache_extent *pe);
> +void free_cache_tree(struct cache_tree *tree);
>
> static inline int cache_tree_empty(struct cache_tree *tree)
> {
> diff --git a/extent-tree.c b/extent-tree.c
> index 20cdffa..d644d9a 100644
> --- a/extent-tree.c
> +++ b/extent-tree.c
> @@ -2999,6 +2999,7 @@ out:
>
> int btrfs_free_block_groups(struct btrfs_fs_info *info)
> {
> + struct btrfs_space_info *space_info;
> u64 start;
> u64 end;
> u64 ptr;
> @@ -3022,6 +3023,15 @@ int btrfs_free_block_groups(struct btrfs_fs_info *info)
> clear_extent_dirty(&info->free_space_cache, start,
> end, GFP_NOFS);
> }
> +
> + while (!list_empty(&info->space_info)) {
> + space_info = list_entry(info->space_info.next,
> + struct btrfs_space_info,
> + list);
> + list_del(&space_info->list);
> + kfree(space_info);
> + }
> +
> return 0;
> }
>
> diff --git a/volumes.c b/volumes.c
> index 581c298..37b0074 100644
> --- a/volumes.c
> +++ b/volumes.c
> @@ -959,6 +959,20 @@ void btrfs_mapping_init(struct btrfs_mapping_tree *tree)
> cache_tree_init(&tree->cache_tree);
> }
>
> +void btrfs_mapping_tree_free(struct btrfs_mapping_tree *tree)
> +{
> + struct cache_extent *cache;
> + struct rb_node *node;
> + struct map_lookup *map;
> +
> + while ((node = rb_last(&tree->cache_tree.root)) != NULL) {
> + cache = rb_entry(node, struct cache_extent, rb_node);
> + map = container_of(cache, struct map_lookup, ce);
> + remove_cache_extent(&tree->cache_tree, cache);
> + free(map);
> + }
> +}
> +
> int btrfs_num_copies(struct btrfs_mapping_tree *map_tree, u64 logical, u64 len)
> {
> struct cache_extent *ce;
> @@ -1486,7 +1500,7 @@ int btrfs_read_sys_array(struct btrfs_root *root)
> if (!sb)
> return -ENOMEM;
> btrfs_set_buffer_uptodate(sb);
> - write_extent_buffer(sb, super_copy, 0, BTRFS_SUPER_INFO_SIZE);
> + write_extent_buffer(sb, super_copy, 0, sizeof(*super_copy));
> array_size = btrfs_super_sys_array_size(super_copy);
>
> /*
> diff --git a/volumes.h b/volumes.h
> index 9ff6182..ce1e413 100644
> --- a/volumes.h
> +++ b/volumes.h
> @@ -182,4 +182,5 @@ int btrfs_add_system_chunk(struct btrfs_trans_handle *trans,
> struct btrfs_root *root, struct btrfs_key *key,
> struct btrfs_chunk *chunk, int item_size);
> int btrfs_chunk_readonly(struct btrfs_root *root, u64 chunk_offset);
> +void btrfs_mapping_tree_free(struct btrfs_mapping_tree *tree);
> #endif
>
next prev parent reply other threads:[~2013-01-23 19:40 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-19 18:06 [PATCH 0/6] patches from Fedora 18 (resubmitted) Gene Czarcinski
2013-01-19 18:06 ` [PATCH 1/6] Fedora 18 - btrfs-init-dev-list.patch Gene Czarcinski
2013-01-22 21:56 ` Gene Czarcinski
2013-01-19 18:06 ` [PATCH 2/6] Fedora 18 - build-fixes.patch Gene Czarcinski
2013-01-22 21:25 ` Gene Czarcinski
2013-01-23 18:12 ` David Sterba
2013-01-19 18:06 ` [PATCH 3/6] Fedora 18 - fix-labels.patch Gene Czarcinski
2013-01-22 21:45 ` Gene Czarcinski
2013-01-19 18:06 ` [PATCH 4/6] Fedora 18 - modified valgrind.patch Gene Czarcinski
2013-01-22 21:53 ` Gene Czarcinski
2013-01-23 19:40 ` Eric Sandeen [this message]
2013-01-19 18:06 ` [PATCH 5/6] Btrfs-progs: add btrfs device ready command Gene Czarcinski
2013-01-19 18:06 ` [PATCH 6/6] Btrfs-progs: detect if the disk we are formatting is a ssd Gene Czarcinski
2013-01-19 21:14 ` Brendan Hide
2013-01-21 13:01 ` David Sterba
2013-01-23 2:35 ` Chris Samuel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51003CAC.4060101@redhat.com \
--to=sandeen@redhat.com \
--cc=gene@czarc.net \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).