Commit bc3f07f0 authored by Artem Bityutskiy's avatar Artem Bityutskiy

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
...@@ -154,7 +154,6 @@ debug_tsts Selects a mode of testing, as follows: ...@@ -154,7 +154,6 @@ debug_tsts Selects a mode of testing, as follows:
Test mode Flag value Test mode Flag value
Force in-the-gaps method 2
Failure mode for recovery testing 4 Failure mode for recovery testing 4
For example, set debug_msgs to 5 to display General messages and Mount For example, set debug_msgs to 5 to display General messages and Mount
......
...@@ -34,7 +34,6 @@ ...@@ -34,7 +34,6 @@
#include <linux/moduleparam.h> #include <linux/moduleparam.h>
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <linux/math64.h> #include <linux/math64.h>
#include <linux/slab.h>
#ifdef CONFIG_UBIFS_FS_DEBUG #ifdef CONFIG_UBIFS_FS_DEBUG
...@@ -2458,14 +2457,12 @@ int dbg_check_nondata_nodes_order(struct ubifs_info *c, struct list_head *head) ...@@ -2458,14 +2457,12 @@ int dbg_check_nondata_nodes_order(struct ubifs_info *c, struct list_head *head)
return 0; return 0;
} }
static int invocation_cnt;
int dbg_force_in_the_gaps(void) int dbg_force_in_the_gaps(void)
{ {
if (!dbg_force_in_the_gaps_enabled) if (!(ubifs_chk_flags & UBIFS_CHK_GEN))
return 0; return 0;
/* Force in-the-gaps every 8th commit */
return !((invocation_cnt++) & 0x7); return !(random32() & 7);
} }
/* Failure mode for recovery testing */ /* Failure mode for recovery testing */
......
...@@ -31,6 +31,8 @@ typedef int (*dbg_znode_callback)(struct ubifs_info *c, ...@@ -31,6 +31,8 @@ typedef int (*dbg_znode_callback)(struct ubifs_info *c,
#ifdef CONFIG_UBIFS_FS_DEBUG #ifdef CONFIG_UBIFS_FS_DEBUG
#include <linux/random.h>
/** /**
* ubifs_debug_info - per-FS debugging information. * ubifs_debug_info - per-FS debugging information.
* @old_zroot: old index root - used by 'dbg_check_old_index()' * @old_zroot: old index root - used by 'dbg_check_old_index()'
...@@ -237,11 +239,9 @@ enum { ...@@ -237,11 +239,9 @@ enum {
/* /*
* Special testing flags. * 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 * UBIFS_TST_RCVRY: failure mode for recovery testing
*/ */
enum { enum {
UBIFS_TST_FORCE_IN_THE_GAPS = 0x2,
UBIFS_TST_RCVRY = 0x4, UBIFS_TST_RCVRY = 0x4,
}; };
...@@ -308,18 +308,16 @@ int dbg_check_data_nodes_order(struct ubifs_info *c, struct list_head *head); ...@@ -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); int dbg_check_nondata_nodes_order(struct ubifs_info *c, struct list_head *head);
/* Force the use of in-the-gaps method for testing */ /* Force the use of in-the-gaps method for testing */
static inline int dbg_force_in_the_gaps_enabled(void)
#define dbg_force_in_the_gaps_enabled \ {
(ubifs_tst_flags & UBIFS_TST_FORCE_IN_THE_GAPS) return ubifs_chk_flags & UBIFS_CHK_GEN;
}
int dbg_force_in_the_gaps(void); int dbg_force_in_the_gaps(void);
/* Failure mode for recovery testing */ /* Failure mode for recovery testing */
#define dbg_failure_mode (ubifs_tst_flags & UBIFS_TST_RCVRY) #define dbg_failure_mode (ubifs_tst_flags & UBIFS_TST_RCVRY)
#ifndef UBIFS_DBG_PRESERVE_UBI #ifndef UBIFS_DBG_PRESERVE_UBI
#define ubi_leb_read dbg_leb_read #define ubi_leb_read dbg_leb_read
#define ubi_leb_write dbg_leb_write #define ubi_leb_write dbg_leb_write
#define ubi_leb_change dbg_leb_change #define ubi_leb_change dbg_leb_change
...@@ -327,7 +325,6 @@ int dbg_force_in_the_gaps(void); ...@@ -327,7 +325,6 @@ int dbg_force_in_the_gaps(void);
#define ubi_leb_unmap dbg_leb_unmap #define ubi_leb_unmap dbg_leb_unmap
#define ubi_is_mapped dbg_is_mapped #define ubi_is_mapped dbg_is_mapped
#define ubi_leb_map dbg_leb_map #define ubi_leb_map dbg_leb_map
#endif #endif
int dbg_leb_read(struct ubi_volume_desc *desc, int lnum, char *buf, int offset, int dbg_leb_read(struct ubi_volume_desc *desc, int lnum, char *buf, int offset,
...@@ -488,8 +485,8 @@ dbg_check_nondata_nodes_order(struct ubifs_info *c, ...@@ -488,8 +485,8 @@ dbg_check_nondata_nodes_order(struct ubifs_info *c,
struct list_head *head) { return 0; } struct list_head *head) { return 0; }
static inline int dbg_force_in_the_gaps(void) { 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 #define dbg_failure_mode 0
static inline int dbg_debugfs_init(void) { return 0; } static inline int dbg_debugfs_init(void) { return 0; }
static inline void dbg_debugfs_exit(void) { return; } static inline void dbg_debugfs_exit(void) { return; }
......
...@@ -377,12 +377,12 @@ static int layout_in_gaps(struct ubifs_info *c, int cnt) ...@@ -377,12 +377,12 @@ static int layout_in_gaps(struct ubifs_info *c, int cnt)
c->gap_lebs = NULL; c->gap_lebs = NULL;
return err; return err;
} }
if (!dbg_force_in_the_gaps_enabled) { if (dbg_force_in_the_gaps_enabled()) {
/* /*
* Do not print scary warnings if the debugging * Do not print scary warnings if the debugging
* option which forces in-the-gaps is enabled. * 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_budg(c, &c->bi);
dbg_dump_lprops(c); dbg_dump_lprops(c);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment