From: Bob Peterson <rpete...@redhat.com>

This patch plugs a couple memory leaks found by valgrind.

rhbz#675723
---
 gfs2/edit/savemeta.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/gfs2/edit/savemeta.c b/gfs2/edit/savemeta.c
index 33f2970..1b9d0a8 100644
--- a/gfs2/edit/savemeta.c
+++ b/gfs2/edit/savemeta.c
@@ -132,6 +132,7 @@ static int get_gfs_struct_info(struct gfs2_buffer_head 
*lbh, int *block_type,
                        *gstruct_len = sizeof(struct gfs2_dinode);
                else
                        *gstruct_len = sbd.bsize;
+               inode_put(&inode);
                break;
        case GFS2_METATYPE_IN:   /* 5 (indir inode blklst) */
                *gstruct_len = sbd.bsize; /*sizeof(struct gfs_indirect);*/
@@ -490,7 +491,10 @@ static void save_inode_data(struct metafd *mfd)
                        mybh = osi_list_entry(cur_list->next,
                                            struct gfs2_buffer_head,
                                            b_altlist);
-                       osi_list_del(&mybh->b_altlist);
+                       if (mybh == inode->i_bh)
+                               osi_list_del(&mybh->b_altlist);
+                       else
+                               brelse(mybh);
                }
        }
        /* Process directory exhash inodes */
@@ -808,6 +812,8 @@ void savemeta(char *out_fn, int saveoption, int gziplevel)
        free(savedata);
        savemetaclose(&mfd);
        close(sbd.device_fd);
+       free(indirect);
+       gfs2_rgrp_free(&sbd.rgtree);
        exit(0);
 }
 
@@ -1032,6 +1038,6 @@ void restoremeta(const char *in_fn, const char 
*out_device,
        gzclose(gzfd);
        if (!printblocksonly)
                close(sbd.device_fd);
-
+       free(indirect);
        exit(error);
 }
-- 
1.7.7.5

Reply via email to