kernel_optimize_test/fs/ubifs
Artem Bityutskiy 6fb4374f6b UBIFS: fix GC LEB recovery
UBIFS tries to alway have an LEB reserved for GC, and stores it
in c->gc_lnum. Besides, there is GC head which points to the current
GC head LEB.

In case of an unclean power cut, what may happen is that the GC head
was switched to the reserved GC LEB (c->gc_lnum), but a new reserved
GC LEB was not created yet. So, after an unclean reboot we may have
no reserved GC LEB, and we need to find a new LEB for this.

To do this, we find a dirty LEB which can fit the current GC head,
move the data, unmap this dirty LEB, and it becomes our reserved GC
LEB.

However, if we cannot find a dirty enough LEB, we return failure,
which is wrong, because we still can have free LEBs to use for
the reserved GC LEB. This patch fixes the issue.

This patch also fixes few typos in comments, which were spotted by
aspell.

Note, this patch fixes a real issue

[   14.328117] UBIFS: recovery needed
[   53.941378] UBIFS error (pid 462): ubifs_rcvry_gc_commit: could not find a dirty LEB
[   89.606399] UBIFS: recovery completed
[   89.609329] UBIFS assert failed in mount_ubifs at 1358 (pid 462)
[   89.616165] [<c0026144>] (unwind_backtrace+0x0/0xe4) from [<c0125ce4>] (ubifs_fill_super+0x11d0/0x1c4c)
[   89.625930] [<c0125ce4>] (ubifs_fill_super+0x11d0/0x1c4c) from [<c0126910>] (ubifs_get_sb+0x1b0/0x354)
[   89.635696] [<c0126910>] (ubifs_get_sb+0x1b0/0x354) from [<c008a50c>] (vfs_kern_mount+0x50/0xe0)
[   89.644485] [<c008a50c>] (vfs_kern_mount+0x50/0xe0) from [<c008a5e0>] (do_kern_mount+0x34/0xdc)
[   89.653274] [<c008a5e0>] (do_kern_mount+0x34/0xdc) from [<c00a29d8>] (do_mount+0x148/0x7cc)
[   89.662063] [<c00a29d8>] (do_mount+0x148/0x7cc) from [<c00a30f4>] (sys_mount+0x98/0xc8)
[   89.670852] [<c00a30f4>] (sys_mount+0x98/0xc8) from [<c0021f40>] (ret_fast_syscall+0x0/0x28)

which was reported here:
http://article.gmane.org/gmane.linux.drivers.mtd/29923
by Alexander Pazdnikov <pazdnikov@list.ru>

Reported-by: Alexander Pazdnikov <pazdnikov@list.ru>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Reviewed-by: Adrian Hunter <adrian.hunter@nokia.com>
2010-07-13 06:51:57 +03:00
..
budget.c Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 into linux-next 2009-09-21 12:09:22 +03:00
commit.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
compress.c UBIFS: fix sparse warnings 2008-12-31 14:13:24 +02:00
debug.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
debug.h UBIFS: improve journal head debugging prints 2009-09-15 17:05:06 +03:00
dir.c ubifs: replace inode uid,gid,mode initialization with helper function 2010-05-21 18:31:26 -04:00
file.c kill spurious reference to vmtruncate 2010-05-27 22:15:42 -04:00
find.c UBIFS: improve find function interface 2009-03-08 13:29:09 +02:00
gc.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
io.c UBIFS: mark VFS SB RO too 2010-04-29 15:12:18 +03:00
ioctl.c headers: smp_lock.h redux 2009-07-12 12:22:34 -07:00
journal.c UBIFS: improve journal head debugging prints 2009-09-15 17:05:06 +03:00
Kconfig Revert "lib: build list_sort() only if needed" 2010-03-07 09:54:44 -08:00
key.h UBIFS: add inode size debugging check 2009-09-10 09:58:11 +03:00
log.c UBIFS: improve journal head debugging prints 2009-09-15 17:05:06 +03:00
lprops.c UBIFS: improve lprops dump 2009-09-15 17:09:48 +03:00
lpt_commit.c UBIFS: use ERR_CAST 2010-06-12 14:46:15 +03:00
lpt.c UBIFS: use ERR_CAST 2010-06-12 14:46:15 +03:00
Makefile UBIFS: include to compilation 2008-07-15 17:35:24 +03:00
master.c UBIFS: check ubifs_scan error codes better 2009-09-10 12:06:47 +03:00
misc.h UBIFS: inline one-line functions 2008-09-30 11:12:56 +03:00
orphan.c UBIFS: check ubifs_scan error codes better 2009-09-10 12:06:47 +03:00
recovery.c UBIFS: fix GC LEB recovery 2010-07-13 06:51:57 +03:00
replay.c UBIFS: do not print scary error messages needlessly 2009-09-10 12:06:47 +03:00
sb.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
scan.c UBIFS: do not print scary error messages needlessly 2009-09-10 12:06:47 +03:00
shrinker.c UBIFS: list usage cleanup 2009-02-17 12:45:22 +02:00
super.c UBIFS: check return code 2010-06-12 14:45:25 +03:00
tnc_commit.c UBIFS: do not print scary error messages needlessly 2009-09-10 12:06:47 +03:00
tnc_misc.c UBIFS: correct key comparison 2008-09-30 11:12:57 +03:00
tnc.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
ubifs-media.h UBIFS: define journal head numbers in ubifs-media.h 2009-09-15 14:45:35 +03:00
ubifs.h kill spurious reference to vmtruncate 2010-05-27 22:15:42 -04:00
xattr.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00