linux-hardened/fs/ubifs
Artem Bityutskiy 45cd5cddbf UBIFS: fix debugging FS checking failure
When the debugging self-checks are enabled, we go trough whole file-system
after mount and check/validate every single node referred to by the index.
This is implemented by the 'dbg_check_filesystem()' function. However, this
function fails if we mount "unclean" file-system, i.e., if we mount the
file-system after a power cut. It fails with the following symptoms:

UBIFS DBG (pid 8171): ubifs_recover_size: ino 937 size 3309925 -> 3317760
UBIFS: recovery deferred
UBIFS error (pid 8171): check_leaf: data node at LEB 1000:0 is not within inode size 3309925

The reason of failure is that recovery fixed up the inode size in memory, but
not on the flash so far. So the value on the flash is incorrect so far,
and would be corrected when we re-mount R/W. But 'check_leaf()' ignores
this fact and tries to validate the size of the on-flash inode, which is
incorrect, so it fails.

This patch teaches the checking code to look at the VFS inode cache first,
and if there is the inode in question, use that inode instead of the inode
on the flash media. This fixes the issue.

Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
2011-05-13 19:23:57 +03:00
..
budget.c UBIFS: introduce a separate structure for budgeting info 2011-05-13 19:23:53 +03:00
commit.c UBIFS: introduce a separate structure for budgeting info 2011-05-13 19:23:53 +03:00
compress.c UBIFS: fix sparse warnings 2008-12-31 14:13:24 +02:00
debug.c UBIFS: fix debugging FS checking failure 2011-05-13 19:23:57 +03:00
debug.h UBIFS: dump the stack on errors in failure mode too 2011-05-13 19:23:56 +03:00
dir.c UBIFS: introduce a separate structure for budgeting info 2011-05-13 19:23:53 +03:00
file.c UBIFS: remove strange commentary 2011-05-13 19:23:55 +03:00
find.c UBIFS: introduce a separate structure for budgeting info 2011-05-13 19:23:53 +03:00
gc.c UBIFS: remove duplicated code 2011-05-13 19:23:55 +03:00
io.c UBIFS: fix minor stylistic issues 2011-05-13 19:23:53 +03:00
ioctl.c userns: rename is_owner_or_cap to inode_owner_or_capable 2011-03-23 19:47:13 -07:00
journal.c UBIFS: improve space checking debugging feature 2011-05-13 19:23:54 +03:00
Kconfig UBIFS: do not select KALLSYMS_ALL 2011-04-05 10:45:45 +03:00
key.h UBIFS: mark unused key objects as invalid 2010-08-30 10:19:08 +03:00
log.c UBIFS: do not free write-buffers when in R/O mode 2011-05-02 19:23:36 +03:00
lprops.c UBIFS: use GFP_NOFS properly 2011-03-24 16:14:26 +02:00
lpt.c UBIFS: fix oops on error path in read_pnode 2011-04-05 10:40:31 +03:00
lpt_commit.c UBIFS: introduce lsave debugging 2011-05-13 19:23:54 +03:00
Makefile
master.c UBIFS: introduce a separate structure for budgeting info 2011-05-13 19:23:53 +03:00
misc.h UBIFS: introduce new flags for RO mounts 2010-09-19 21:07:58 +03:00
orphan.c UBIFS: fix minor stylistic issues 2011-05-13 19:23:53 +03:00
recovery.c UBIFS: remove an unneeded check 2011-05-13 19:23:57 +03:00
replay.c UBIFS: introduce a separate structure for budgeting info 2011-05-13 19:23:53 +03:00
sb.c UBIFS: introduce new flags for RO mounts 2010-09-19 21:07:58 +03:00
scan.c UBIFS: remove double semicolon 2011-02-06 15:08:02 +02:00
shrinker.c UBIFS: introduce new flags for RO mounts 2010-09-19 21:07:58 +03:00
super.c UBIFS: improve space checking debugging feature 2011-05-13 19:23:54 +03:00
tnc.c UBIFS: fix minor stylistic issues 2011-05-13 19:23:53 +03:00
tnc_commit.c UBIFS: make force in-the-gaps to be a general self-check 2011-05-13 19:23:54 +03:00
tnc_misc.c UBIFS: correct key comparison 2008-09-30 11:12:57 +03:00
ubifs-media.h UBIFS: use __packed instead of __attribute__((packed)) 2011-05-13 19:23:53 +03:00
ubifs.h UBIFS: introduce a separate structure for budgeting info 2011-05-13 19:23:53 +03:00
xattr.c UBIFS: make xattr operations names consistent 2011-05-13 19:23:54 +03:00