[Ocfs2-tools-devel] [PATCH] fsck.ocfs2: the members of 'o2fsck_state' need to be freed at the end of main()
piaojun
piaojun at huawei.com
Fri Sep 23 06:06:57 PDT 2016
The allocation for the members of 'o2fsck_state' by o2fsck_state_init()
need to be freed at last in case of memory leak.
Signed-off-by: Jun Piao <piaojun at huawei.com>
---
fsck.ocfs2/fsck.c | 14 +++++++++++++-
fsck.ocfs2/pass1.c | 1 +
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/fsck.ocfs2/fsck.c b/fsck.ocfs2/fsck.c
index dc5209d..5648b66 100644
--- a/fsck.ocfs2/fsck.c
+++ b/fsck.ocfs2/fsck.c
@@ -232,6 +232,16 @@ errcode_t o2fsck_state_reinit(ocfs2_filesys *fs, o2fsck_state *ost)
return 0;
}
+static void o2fsck_state_release(o2fsck_state *ost)
+{
+ ocfs2_free(&ost->ost_dir_inodes);
+ ocfs2_free(&ost->ost_reg_inodes);
+ ocfs2_free(&ost->ost_allocated_clusters);
+ ocfs2_free(&ost->ost_duplicate_clusters);
+ ocfs2_free(&ost->ost_icount_in_inodes);
+ ocfs2_free(&ost->ost_icount_refs);
+}
+
static errcode_t check_superblock(o2fsck_state *ost)
{
struct ocfs2_dinode *di = ost->ost_fs->fs_super;
@@ -1102,7 +1112,9 @@ close:
com_err(whoami, ret, "while closing file \"%s\"", filename);
/* XXX I wonder about this error.. */
fsck_mask |= FSCK_ERROR;
- }
+ }
+
+ o2fsck_state_release(ost);
out:
return fsck_mask;
diff --git a/fsck.ocfs2/pass1.c b/fsck.ocfs2/pass1.c
index c076e28..530bd8d 100644
--- a/fsck.ocfs2/pass1.c
+++ b/fsck.ocfs2/pass1.c
@@ -83,6 +83,7 @@ void o2fsck_free_inode_allocs(o2fsck_state *ost)
for (i = 0; i < OCFS2_RAW_SB(ost->ost_fs->fs_super)->s_max_slots; i++)
ocfs2_free_cached_inode(ost->ost_fs, ost->ost_inode_allocs[i]);
+ ocfs2_free(&ost->ost_inode_allocs);
}
/* update our in memory images of the inode chain alloc bitmaps. these
--
1.8.4.3
More information about the Ocfs2-tools-devel
mailing list