mirror of https://gitee.com/openkylin/linux.git
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: Ben Gardiner <bengardiner@nanometrics> Reviewed-by: Matthew L. Creech <mlcreech@gmail.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
This commit is contained in:
parent
781c5717a9
commit
098011940a
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue