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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.