From 0eaf9374512347eb88060440e9cd8733e9c80158 Mon Sep 17 00:00:00 2001 From: Joern Engel Date: Fri, 5 Aug 2011 11:18:19 +0200 Subject: [PATCH] --- yaml --- r: 287085 b: refs/heads/master c: 1bcceaff8cbe5e5698ccf1015c9a938aa72718c4 h: refs/heads/master i: 287083: 1e9faef9be81aaae09982b3be7e8034c91eef1ae v: v3 --- [refs] | 2 +- trunk/fs/logfs/logfs.h | 1 + trunk/fs/logfs/segment.c | 14 ++++++++++---- trunk/fs/logfs/super.c | 1 + 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 076451960891..cbb4744d9829 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6c69494f6b442834f26377e02d43fc8e1272221d +refs/heads/master: 1bcceaff8cbe5e5698ccf1015c9a938aa72718c4 diff --git a/trunk/fs/logfs/logfs.h b/trunk/fs/logfs/logfs.h index 0dec29887a8a..59ed32cd62d1 100644 --- a/trunk/fs/logfs/logfs.h +++ b/trunk/fs/logfs/logfs.h @@ -596,6 +596,7 @@ int logfs_init_mapping(struct super_block *sb); void logfs_sync_area(struct logfs_area *area); void logfs_sync_segments(struct super_block *sb); void freeseg(struct super_block *sb, u32 segno); +void free_areas(struct super_block *sb); /* area handling */ int logfs_init_areas(struct super_block *sb); diff --git a/trunk/fs/logfs/segment.c b/trunk/fs/logfs/segment.c index 6aee6092860d..ab798ed1cc88 100644 --- a/trunk/fs/logfs/segment.c +++ b/trunk/fs/logfs/segment.c @@ -862,6 +862,16 @@ static void free_area(struct logfs_area *area) kfree(area); } +void free_areas(struct super_block *sb) +{ + struct logfs_super *super = logfs_super(sb); + int i; + + for_each_area(i) + free_area(super->s_area[i]); + free_area(super->s_journal_area); +} + static struct logfs_area *alloc_area(struct super_block *sb) { struct logfs_area *area; @@ -944,10 +954,6 @@ int logfs_init_areas(struct super_block *sb) void logfs_cleanup_areas(struct super_block *sb) { struct logfs_super *super = logfs_super(sb); - int i; btree_grim_visitor128(&super->s_object_alias_tree, 0, kill_alias); - for_each_area(i) - free_area(super->s_area[i]); - free_area(super->s_journal_area); } diff --git a/trunk/fs/logfs/super.c b/trunk/fs/logfs/super.c index f9b7a30b00a3..c9ee7f5d1caf 100644 --- a/trunk/fs/logfs/super.c +++ b/trunk/fs/logfs/super.c @@ -486,6 +486,7 @@ static void logfs_kill_sb(struct super_block *sb) /* Alias entries slow down mount, so evict as many as possible */ sync_filesystem(sb); logfs_write_anchor(sb); + free_areas(sb); /* * From this point on alias entries are simply dropped - and any