1
linux/fs/ubifs
Artem Bityutskiy bbf2b37a98 UBIFS: fix extremely rare mount failure
This patch fixes an extremely rare mount failure after a power cut, when mount
fails with ENOSPC error because UBIFS could not find the GC LEB.

In short, the reason for this failure is that after recovery the GC head LEB
contains less free space than it had contained just before the power cut
happened. As a result, if the FS is full, 'ubifs_rcvry_gc_commit()' is unable
to find a dirty LEB to GC and a free LEB, so mount fails.

This patch contains a huge comment with more detailed explanation, please refer
that comment.

Since this is really really rare and unlikely situation, I do not send this
patch to the stable tree, also because it requires a lot of preparation
patches which I did before. So sending this to -stable would be too risky.

Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
2011-05-16 15:48:48 +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
debug.c UBIFS: add a superblock flag for free space fix-up 2011-05-16 14:12:14 +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: synchronize write-buffer before switching to the next bud 2011-05-16 10:31:41 +03:00
io.c UBIFS: synchronize write-buffer before switching to the next bud 2011-05-16 10:31:41 +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: synchronize write-buffer before switching to the next bud 2011-05-16 10:31:41 +03:00
Kconfig UBIFS: do not select KALLSYMS_ALL 2011-04-05 10:45:45 +03:00
key.h
log.c UBIFS: share the next_log_lnum helper 2011-05-16 14:12:12 +03:00
lprops.c UBIFS: dump more in the lprops debugging check 2011-05-16 10:31:39 +03:00
lpt_commit.c UBIFS: introduce lsave debugging 2011-05-13 19:23:54 +03:00
lpt.c UBIFS: fix oops on error path in read_pnode 2011-04-05 10:40:31 +03:00
Makefile
master.c UBIFS: introduce a separate structure for budgeting info 2011-05-13 19:23:53 +03:00
misc.h UBIFS: share the next_log_lnum helper 2011-05-16 14:12:12 +03:00
orphan.c UBIFS: fix minor stylistic issues 2011-05-13 19:23:53 +03:00
recovery.c UBIFS: fix extremely rare mount failure 2011-05-16 15:48:48 +03:00
replay.c UBIFS: expect corruption only in last journal head LEBs 2011-05-16 14:11:25 +03:00
sb.c UBIFS: add the fixup function 2011-05-16 14:12:15 +03:00
scan.c UBIFS: remove double semicolon 2011-02-06 15:08:02 +02:00
shrinker.c
super.c UBIFS: fix-up free space on mount if flag is set 2011-05-16 14:12:15 +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
tnc.c UBIFS: fix minor stylistic issues 2011-05-13 19:23:53 +03:00
ubifs-media.h UBIFS: add a superblock flag for free space fix-up 2011-05-16 14:12:14 +03:00
ubifs.h UBIFS: add the fixup function 2011-05-16 14:12:15 +03:00
xattr.c UBIFS: make xattr operations names consistent 2011-05-13 19:23:54 +03:00