15 Jan, 2012

1 commit

  • Fix a brown paperbag bug introduced by me in the previous commit. I was
    in hurry and forgot about the non-debug case completely.

    Artem: amend the commit message and tweak the patch to preserve alignment.
    This made the patch a bit less readable, though.

    Signed-off-by: Artem Bityutskiy

    Dominique Martinet
     

13 Jan, 2012

1 commit

  • Before commit 56e46742e846e4de167dde0e1e1071ace1c882a5 we have had locking
    around all printing macros and we could use static buffers for creating
    key strings and printing them. However, now we do not have that locking and
    we cannot use static buffers. This commit removes the old DBGKEY() macros
    and introduces few new helper macros for printing debugging messages plus
    a key at the end. Thankfully, all the messages are already structures in
    a way that the key is printed in the end.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     

12 Jan, 2012

2 commits

  • Patch 56e46742e846e4de167dde0e1e1071ace1c882a5 broke UBIFS debugging messages:
    before that commit when UBIFS debugging was enabled, users saw few useful
    debugging messages after mount. However, that patch turned 'dbg_msg()' into
    'pr_debug()', so to enable the debugging messages users have to enable them
    first via /sys/kernel/debug/dynamic_debug/control, which is very impractical.

    This commit makes 'dbg_msg()' to use 'printk()' instead of 'pr_debug()', just
    as it was before the breakage.

    Signed-off-by: Artem Bityutskiy
    Cc: stable@kernel.org [3.0+]

    Artem Bityutskiy
     
  • We switch to dynamic debugging in commit
    56e46742e846e4de167dde0e1e1071ace1c882a5 but did not take into account that
    now we do not control anymore whether a specific message is enabled or not.
    So now we lock the "dbg_lock" and release it in every debugging macro, which
    make them not so light-weight.

    This commit removes the "dbg_lock" protection from the debugging macros to
    fix the issue.

    The downside is that now our DBGKEY() stuff is broken, but this is not
    critical at all and will be fixed later.

    Signed-off-by: Artem Bityutskiy
    Cc: stable@kernel.org [3.0+]

    Artem Bityutskiy
     

08 Nov, 2011

1 commit


22 Aug, 2011

1 commit


19 Aug, 2011

1 commit

  • With
    $ grep -e UBIFS_FS_DEBUG -e DYNAMIC_DEBUG .config
    # CONFIG_UBIFS_FS_DEBUG is not set
    CONFIG_DYNAMIC_DEBUG=y

    Debug messages are kept in the object files due to the
    dynamic_pr_debug() macro, even if they are never going to be printed:
    $ make fs/ubifs/super.o
    $ strings fs/ubifs/super.o | grep 'compiled on'
    compiled on: Aug 11 2011 at 12:21:38

    Use plain printk to fix this.

    Signed-off-by: Michal Marek
    Signed-off-by: Artem Bityutskiy

    Michal Marek
     

04 Jul, 2011

13 commits

  • Since the recovery testing is effectively about emulating power cuts by UBIFS,
    use "power cut" as the base term for all the related variables and name them
    correspondingly. This is just a minor clean-up for the sake of readability.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • This is a clean-up of the power-cut emulation code - remove the custom list of
    superblocks which we maintained to find the superblock by the UBI volume
    descriptor. We do not need that crud any longer, because now we can get the
    superblock as a function argument.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • Now when we use UBIFS helpers for all the I/O, we can remove the horrible hack
    of re-defining UBI I/O functions.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • Introduce the following I/O helper functions: 'ubifs_leb_read()',
    'ubifs_leb_write()', 'ubifs_leb_change()', 'ubifs_leb_unmap()',
    'ubifs_leb_map()', 'ubifs_is_mapped().

    The idea is to wrap all UBI I/O functions in order to encapsulate various
    assertions and error path handling (error message, stack dump, switching to R/O
    mode). And there are some other benefits of this which will be used in the
    following patches.

    This patch does not switch whole UBIFS to use these functions yet.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • This patch contains several minor clean-up and preparational cahnges.

    1. Remove 'dbg_read()', 'dbg_write()', 'dbg_change()', and 'dbg_leb_erase()'
    functions as they are not used.
    2. Remove 'dbg_leb_read()' and 'dbg_is_mapped()' as they are not really needed,
    it is fine to let reads go through in failure mode.
    3. Rename 'offset' argument to 'offs' to be consistent with the rest of UBIFS
    code.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • Now we have per-FS (superblock) debugfs knobs, but they have one drawback - you
    have to first mount the FS and only after this you can switch self-checks
    on/off. But often we want to have the checks enabled during the mount.
    Introduce global debugging knobs for this purpose.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • UBIFS has many built-in self-check functions which can be enabled using the
    debug_chks module parameter or the corresponding sysfs file
    (/sys/module/ubifs/parameters/debug_chks). However, this is not flexible enough
    because it is not per-filesystem. This patch moves this to debugfs interfaces.

    We already have debugfs support, so this patch just adds more debugfs files.
    While looking at debugfs support I've noticed that it is racy WRT file-system
    unmount, and added a TODO entry for that. This problem has been there for long
    time and it is quite standard debugfs PITA. The plan is to fix this later.

    This patch is simple, but it is large because it changes many places where we
    check if a particular type of checks is enabled or disabled.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • We have too many different debugging checks - lessen the amount by merging all
    index-related checks into one. At the same time, move the "force in-the-gap"
    test to the "index checks" class, because it is too heavy for the "general"
    class.

    This patch merges TNC, Old index, and Index size check and calles this just
    "index checks".

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • This patch introduces helper functions for all debugging checks, so instead of
    doing

    if (!(ubifs_chk_flags & UBIFS_CHK_GEN))

    we now do

    if (!dbg_is_chk_gen(c))

    This is a preparation to further changes where the flags will go away, and
    we'll need to only change the helper functions, but the code which utilizes
    them won't be touched.

    At the same time this patch removes 'dbg_force_in_the_gaps()',
    'dbg_force_in_the_gaps_enabled()', and dbg_failure_mode helpers for
    consistency.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • Add 'const struct ubifs_info *c' parameter to 'dbg_check_synced_i_size()'
    function because we'll need it in the next patch when we switch to debugfs.
    So this patch is just a preparation.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • Since this function is not only about size checking, rename it to
    'dbg_check_dir()'.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • Teach 'dbg_dump_inode()' dump directory entries for directory inodes.
    This requires few additional changes:
    1. The 'c' argument of 'dbg_dump_inode()' cannot be const any more.
    2. Users of 'dbg_dump_inode()' should not have 'tnc_mutex' locked.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • This patch lessens the 'struct ubifs_debug_info' size by 90 bytes by
    allocating less bytes for the debugfs root directory name. It introduces macros
    for the name patter an length instead of hard-coding 100 bytes. It also makes
    UBIFS use 'snprintf()' and teaches it to gracefully catch situations when the
    name array is too short.

    Additionally, this patch makes 2 unrelated changes - I just thought they do not
    deserve separate commits: simplifies 'ubifs_assert()' for non-debugging case
    and makes 'dbg_debugfs_init()' properly verify debugfs return code which may be
    an error code or NULL, so we should you 'IS_ERR_OR_NULL()' instead of
    'IS_ERR()'.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     

23 May, 2011

1 commit

  • Switch to debugging using dynamic printk (pr_debug()). There is no good reason
    to carry custom debugging prints if there is so cool and powerful generic
    dynamic printk infrastructure, see Documentation/dynamic-debug-howto.txt. With
    dynamic printks we can switch on/of individual prints, per-file, per-function
    and per format messages. This means that instead of doing old-fashioned

    echo 1 > /sys/module/ubifs/parameters/debug_msgs

    to enable general messages, we can do:

    echo 'format "UBIFS DBG gen" +ptlf' > control

    to enable general messages and additionally ask the dynamic printk
    infrastructure to print process ID, line number and function name. So there is
    no reason to keep UBIFS-specific crud if there is more powerful generic thing.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     

20 May, 2011

1 commit


14 May, 2011

3 commits

  • When UBIFS is in the failure mode (used for power cut emulation testing) we for
    some reasons do not dump the stack in many places, e.g., in assertions.
    Probably at early days we had too many of them and disabled this to make the
    development easier, but then never enabled. Nowadays I sometimes observe
    assertion failures during power cut testing, but the useful stackdump is not
    printed, which is bad. This patch makes UBIFS always print the stackdump when
    debugging is enabled.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     
  • 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: Artem Bityutskiy

    Artem Bityutskiy
     
  • This patch improves the 'dbg_check_space_info()' function which checks
    whether the amount of space before re-mounting and after re-mounting
    is the same (remounting from R/O to R/W modes and vice-versa).

    The problem is that 'dbg_check_space_info()' does not save the budgeting
    information before re-mounting, so when an error is reported, we do not
    know why the amount of free space changed.

    This patches makes the following changes:

    1. Teaches 'dbg_dump_budg()' function to accept a 'struct ubifs_budg_info'
    argument and print out the this argument. This way we may ask it to
    print any saved budgeting info, no only the current one.
    2. Accordingly changes all the callers of 'dbg_dump_budg()' to comply with
    the changed interface.
    3. Introduce a 'saved_bi' (saved budgeting info) field to
    'struct ubifs_debug_info' and save the budgeting info before re-mounting
    there.
    4. Change 'dbg_check_space_info()' and make it print both old and new
    budgeting information.
    5. Additionally, save 'c->igx_gc_cnt' and print it if and error happens. This
    value contributes to the amount of free space, so we have to print it.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     

13 Apr, 2011

1 commit

  • When compiling UBIFS with CONFIG_UBIFS_FS_DEBUG not set,
    gcc-4.5.2 generates a slew of "warning: statement with no effect"
    on references to non-void functions defined as 0.
    To avoid these warnings, replace #defines with dummy inline functions.

    Artem: massage the patch a bit, also remove the duplicate
    'dbg_check_lprops()' prototype.

    Signed-off-by: Maksim Rayskiy
    Acked-by: Mike Frysinger
    Signed-off-by: Artem Bityutskiy

    Maksim Rayskiy
     

16 Mar, 2011

2 commits


11 Mar, 2011

1 commit

  • Remove debug message level and debug checks Kconfig options as they
    proved to be useless anyway. We have sysfs interface which we can
    use for fine-grained debugging messages and checks selection, see
    Documentation/filesystems/ubifs.txt for mode details.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     

30 Aug, 2010

1 commit

  • The UBIFS bug in the GC list sorting comparison functions inspired
    me to write internal debugging check functions which verify that
    the list of nodes is sorted properly.

    So, this patch implements 2 new debugging functions:
    o 'dbg_check_data_nodes_order()' - check order of data nodes list
    o 'dbg_check_nondata_nodes_order()' - check order of non-data nodes list

    The debugging functions are executed only if general UBIFS debugging checks are
    enabled. And they are compiled out if UBIFS debugging is disabled.

    Signed-off-by: Artem Bityutskiy

    Artem Bityutskiy
     

15 Sep, 2009

1 commit


10 Sep, 2009

1 commit


26 Jan, 2009

1 commit


03 Dec, 2008

3 commits


30 Sep, 2008

1 commit


13 Aug, 2008

1 commit


15 Jul, 2008

1 commit