Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1bcceaff authored by Joern Engel's avatar Joern Engel Committed by Prasad Joshi
Browse files

logfs: Free areas before calling generic_shutdown_super()



Or hit an assertion in map_invalidatepage() instead.

Signed-off-by: default avatarJoern Engel <joern@logfs.org>
parent 6c69494f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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);
+10 −4
Original line number Diff line number Diff line
@@ -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);
}
+1 −0
Original line number Diff line number Diff line
@@ -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