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

Commit 09801194 authored by Ben Gardiner's avatar Ben Gardiner Committed by Artem Bityutskiy
Browse files

UBIFS: fix-up free space earlier



The free space fixup is currently initiated during mount after the call to
ubifs_write_master() which results in a write to PEBs; this has been observed
with the patch 'assert no fixup when writing a node' applied:

Move the free space fixup on mount to before the calls to
ubifs_recover_inl_heads() and ubifs_write_master(). This results in no
assertions with the previously mentioned patch applied.

Artem: tweaked the patch a bit

Signed-off-by: default avatarBen Gardiner <bengardiner@nanometrics>
Reviewed-by: default avatarMatthew L. Creech <mlcreech@gmail.com>
Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
parent 781c5717
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -1282,13 +1282,13 @@ static int mount_ubifs(struct ubifs_info *c)
	if (err)
		goto out_master;

	init_constants_master(c);

	if ((c->mst_node->flags & cpu_to_le32(UBIFS_MST_DIRTY)) != 0) {
		ubifs_msg("recovery needed");
		c->need_recovery = 1;
	}

	init_constants_master(c);

	if (c->need_recovery && !c->ro_mount) {
		err = ubifs_recover_inl_heads(c, c->sbuf);
		if (err)
@@ -1299,6 +1299,12 @@ static int mount_ubifs(struct ubifs_info *c)
	if (err)
		goto out_master;

	if (!c->ro_mount && c->space_fixup) {
		err = ubifs_fixup_free_space(c);
		if (err)
			goto out_master;
	}

	if (!c->ro_mount) {
		/*
		 * Set the "dirty" flag so that if we reboot uncleanly we
@@ -1402,12 +1408,6 @@ static int mount_ubifs(struct ubifs_info *c)
	} else
		ubifs_assert(c->lst.taken_empty_lebs > 0);

	if (!c->ro_mount && c->space_fixup) {
		err = ubifs_fixup_free_space(c);
		if (err)
			goto out_infos;
	}

	err = dbg_check_filesystem(c);
	if (err)
		goto out_infos;