aboutsummaryrefslogtreecommitdiff
path: root/ubifs-utils/libubifs/debug.c
diff options
context:
space:
mode:
authorZhihao Cheng <chengzhihao1@huawei.com>2024-11-11 17:01:02 +0800
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2024-11-11 10:32:45 +0100
commitaa2b50294710caba39c6b01ce99f2f6993a42ed2 (patch)
tree5fb4204cdf996ca00797b191937882dab511c09f /ubifs-utils/libubifs/debug.c
parent0fb533f5695837f49f3c62c82999b37fa4f244af (diff)
fsck.ubifs: Add fsck support
Add basic process code for fsck.ubifs. There are following modes for fsck: 1. normal mode: Check the filesystem, ask user whether or not to fix the problem as long as inconsistent data is found during fs checking. 2. safe mode: Check and safely repair the filesystem, if there are any data dropping operations needed by fixing, fsck will fail. 3. danger mode: Answer 'yes' to all questions. There two sub modes: a) Check and repair the filesystem according to TNC, data dropping will be reported. If TNC/master/log is corrupted, fsck will fail. b) Check and forcedly repair the filesystem according to TNC, turns to rebuild filesystem if TNC/master/log is corrupted. Always make fsck succeed. 4. check mode: Make no changes to the filesystem, only check the filesystem. 5. rebuild mode: Scan entire UBI volume to find all nodes, and rebuild filesystem, always make fsck success. Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com> Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'ubifs-utils/libubifs/debug.c')
-rw-r--r--ubifs-utils/libubifs/debug.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/ubifs-utils/libubifs/debug.c b/ubifs-utils/libubifs/debug.c
index a210990..94928da 100644
--- a/ubifs-utils/libubifs/debug.c
+++ b/ubifs-utils/libubifs/debug.c
@@ -1021,7 +1021,11 @@ void ubifs_assert_failed(struct ubifs_info *c, const char *expr,
/*
* Different from linux kernel.
- * There is only one action(readonly) when assertion is failed.
+ * Invoke callback function if there is one, otherwise make filesystem
+ * readonly when assertion is failed.
*/
- ubifs_ro_mode(c, -EINVAL);
+ if (c->assert_failed_cb)
+ c->assert_failed_cb(c);
+ else
+ ubifs_ro_mode(c, -EINVAL);
}