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

Commit bc3f07f0 authored by Artem Bityutskiy's avatar Artem Bityutskiy
Browse files

UBIFS: make force in-the-gaps to be a general self-check



UBIFS can force itself to use the 'in-the-gaps' commit method - the last resort
method which is normally invoced very very rarely. Currently this "force
int-the-gaps" debugging feature is a separate test mode. But it is a bit saner
to make it to be the "general" self-test check instead.

This patch is just a clean-up which should make the debugging code look a bit
nicer and easier to use - we have way too many debugging options.

Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
parent f1bd66af
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -154,7 +154,6 @@ debug_tsts Selects a mode of testing, as follows:

		Test mode				Flag value

		Force in-the-gaps method		2
		Failure mode for recovery testing	4

For example, set debug_msgs to 5 to display General messages and Mount
+3 −6
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@
#include <linux/moduleparam.h>
#include <linux/debugfs.h>
#include <linux/math64.h>
#include <linux/slab.h>

#ifdef CONFIG_UBIFS_FS_DEBUG

@@ -2458,14 +2457,12 @@ int dbg_check_nondata_nodes_order(struct ubifs_info *c, struct list_head *head)
	return 0;
}

static int invocation_cnt;

int dbg_force_in_the_gaps(void)
{
	if (!dbg_force_in_the_gaps_enabled)
	if (!(ubifs_chk_flags & UBIFS_CHK_GEN))
		return 0;
	/* Force in-the-gaps every 8th commit */
	return !((invocation_cnt++) & 0x7);

	return !(random32() & 7);
}

/* Failure mode for recovery testing */
+8 −11
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ typedef int (*dbg_znode_callback)(struct ubifs_info *c,

#ifdef CONFIG_UBIFS_FS_DEBUG

#include <linux/random.h>

/**
 * ubifs_debug_info - per-FS debugging information.
 * @old_zroot: old index root - used by 'dbg_check_old_index()'
@@ -237,11 +239,9 @@ enum {
/*
 * Special testing flags.
 *
 * UBIFS_TST_FORCE_IN_THE_GAPS: force the use of in-the-gaps method
 * UBIFS_TST_RCVRY: failure mode for recovery testing
 */
enum {
	UBIFS_TST_FORCE_IN_THE_GAPS = 0x2,
	UBIFS_TST_RCVRY             = 0x4,
};

@@ -308,18 +308,16 @@ int dbg_check_data_nodes_order(struct ubifs_info *c, struct list_head *head);
int dbg_check_nondata_nodes_order(struct ubifs_info *c, struct list_head *head);

/* Force the use of in-the-gaps method for testing */

#define dbg_force_in_the_gaps_enabled \
	(ubifs_tst_flags & UBIFS_TST_FORCE_IN_THE_GAPS)

static inline int dbg_force_in_the_gaps_enabled(void)
{
	return ubifs_chk_flags & UBIFS_CHK_GEN;
}
int dbg_force_in_the_gaps(void);

/* Failure mode for recovery testing */

#define dbg_failure_mode (ubifs_tst_flags & UBIFS_TST_RCVRY)

#ifndef UBIFS_DBG_PRESERVE_UBI

#define ubi_leb_read   dbg_leb_read
#define ubi_leb_write  dbg_leb_write
#define ubi_leb_change dbg_leb_change
@@ -327,7 +325,6 @@ int dbg_force_in_the_gaps(void);
#define ubi_leb_unmap  dbg_leb_unmap
#define ubi_is_mapped  dbg_is_mapped
#define ubi_leb_map    dbg_leb_map

#endif

int dbg_leb_read(struct ubi_volume_desc *desc, int lnum, char *buf, int offset,
@@ -488,7 +485,7 @@ dbg_check_nondata_nodes_order(struct ubifs_info *c,
			      struct list_head *head)             { return 0; }

static inline int dbg_force_in_the_gaps(void)                     { return 0; }
#define dbg_force_in_the_gaps_enabled 0
#define dbg_force_in_the_gaps_enabled() 0
#define dbg_failure_mode                0

static inline int dbg_debugfs_init(void)                          { return 0; }
+2 −2
Original line number Diff line number Diff line
@@ -377,12 +377,12 @@ static int layout_in_gaps(struct ubifs_info *c, int cnt)
				c->gap_lebs = NULL;
				return err;
			}
			if (!dbg_force_in_the_gaps_enabled) {
			if (dbg_force_in_the_gaps_enabled()) {
				/*
				 * Do not print scary warnings if the debugging
				 * option which forces in-the-gaps is enabled.
				 */
				ubifs_err("out of space");
				ubifs_warn("out of space");
				dbg_dump_budg(c, &c->bi);
				dbg_dump_lprops(c);
			}