https://github.com/torvalds/linux
Revision 6e0d9fd38b750d678bf9fd07db23582f52fafa55 authored by Artem Bityutskiy on 21 April 2011, 11:49:55 UTC, committed by Artem Bityutskiy on 21 April 2011, 12:27:21 UTC
This patch fixes the following symptoms:
1. Unmount UBIFS cleanly.
2. Start mounting UBIFS R/W and have a power cut immediately
3. Start mounting UBIFS R/O, this succeeds
4. Try to re-mount UBIFS R/W - this fails immediately or later on,
   because UBIFS will write the master node to the flash area
   which has been written before.

The analysis of the problem:

1. UBIFS is unmounted cleanly, both copies of the master node are clean.
2. UBIFS is being mounter R/W, starts changing master node copy 1, and
   a power cut happens. The copy N1 becomes corrupted.
3. UBIFS is being mounted R/O. It notices the copy N1 is corrupted and
   reads copy N2. Copy N2 is clean.
4. Because of R/O mode, UBIFS cannot recover copy 1.
5. The mount code (ubifs_mount()) sees that the master node is clean,
   so it decides that no recovery is needed.
6. We are re-mounting R/W. UBIFS believes no recovery is needed and
   starts updating the master node, but copy N1 is still corrupted
   and was not recovered!

Fix this problem by marking the master node as dirty every time we
recover it and we are in R/O mode. This forces further recovery and
the UBIFS cleans-up the corruptions and recovers the copy N1 when
re-mounting R/W later.

Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Cc: stable@kernel.org
1 parent 1a067a2
History
Tip revision: 6e0d9fd38b750d678bf9fd07db23582f52fafa55 authored by Artem Bityutskiy on 21 April 2011, 11:49:55 UTC
UBIFS: fix master node recovery
Tip revision: 6e0d9fd
File Mode Size
async_tx
Kconfig -rw-r--r-- 24.2 KB
Makefile -rw-r--r-- 3.2 KB
ablkcipher.c -rw-r--r-- 16.5 KB
aead.c -rw-r--r-- 12.6 KB
aes_generic.c -rw-r--r-- 61.9 KB
af_alg.c -rw-r--r-- 9.3 KB
ahash.c -rw-r--r-- 12.1 KB
algapi.c -rw-r--r-- 19.0 KB
algboss.c -rw-r--r-- 6.3 KB
algif_hash.c -rw-r--r-- 6.7 KB
algif_skcipher.c -rw-r--r-- 13.2 KB
ansi_cprng.c -rw-r--r-- 10.9 KB
anubis.c -rw-r--r-- 27.8 KB
api.c -rw-r--r-- 13.4 KB
arc4.c -rw-r--r-- 2.0 KB
authenc.c -rw-r--r-- 19.6 KB
authencesn.c -rw-r--r-- 23.4 KB
blkcipher.c -rw-r--r-- 18.6 KB
blowfish.c -rw-r--r-- 17.5 KB
camellia.c -rw-r--r-- 35.9 KB
cast5.c -rw-r--r-- 33.0 KB
cast6.c -rw-r--r-- 21.4 KB
cbc.c -rw-r--r-- 7.4 KB
ccm.c -rw-r--r-- 21.5 KB
chainiv.c -rw-r--r-- 8.6 KB
cipher.c -rw-r--r-- 3.3 KB
compress.c -rw-r--r-- 1.3 KB
crc32c.c -rw-r--r-- 8.0 KB
cryptd.c -rw-r--r-- 24.8 KB
crypto_null.c -rw-r--r-- 4.9 KB
crypto_wq.c -rw-r--r-- 942 bytes
ctr.c -rw-r--r-- 10.8 KB
cts.c -rw-r--r-- 9.8 KB
deflate.c -rw-r--r-- 5.5 KB
des_generic.c -rw-r--r-- 35.6 KB
ecb.c -rw-r--r-- 4.9 KB
eseqiv.c -rw-r--r-- 6.5 KB
fcrypt.c -rw-r--r-- 18.0 KB
fips.c -rw-r--r-- 705 bytes
gcm.c -rw-r--r-- 34.5 KB
gf128mul.c -rw-r--r-- 13.2 KB
ghash-generic.c -rw-r--r-- 3.7 KB
hmac.c -rw-r--r-- 6.9 KB
internal.h -rw-r--r-- 3.9 KB
khazad.c -rw-r--r-- 51.8 KB
krng.c -rw-r--r-- 1.5 KB
lrw.c -rw-r--r-- 7.6 KB
lzo.c -rw-r--r-- 2.5 KB
md4.c -rw-r--r-- 6.1 KB
md5.c -rw-r--r-- 7.5 KB
michael_mic.c -rw-r--r-- 3.6 KB
pcbc.c -rw-r--r-- 7.7 KB
pcompress.c -rw-r--r-- 2.5 KB
pcrypt.c -rw-r--r-- 14.7 KB
proc.c -rw-r--r-- 3.6 KB
ripemd.h -rw-r--r-- 974 bytes
rmd128.c -rw-r--r-- 10.2 KB
rmd160.c -rw-r--r-- 12.6 KB
rmd256.c -rw-r--r-- 10.5 KB
rmd320.c -rw-r--r-- 13.1 KB
rng.c -rw-r--r-- 2.8 KB
salsa20_generic.c -rw-r--r-- 6.7 KB
scatterwalk.c -rw-r--r-- 2.9 KB
seed.c -rw-r--r-- 17.4 KB
seqiv.c -rw-r--r-- 8.6 KB
serpent.c -rw-r--r-- 19.8 KB
sha1_generic.c -rw-r--r-- 3.4 KB
sha256_generic.c -rw-r--r-- 12.2 KB
sha512_generic.c -rw-r--r-- 8.8 KB
shash.c -rw-r--r-- 16.2 KB
tcrypt.c -rw-r--r-- 27.7 KB
tcrypt.h -rw-r--r-- 3.4 KB
tea.c -rw-r--r-- 7.1 KB
testmgr.c -rw-r--r-- 54.4 KB
testmgr.h -rw-r--r-- 328.3 KB
tgr192.c -rw-r--r-- 30.8 KB
twofish_common.c -rw-r--r-- 37.7 KB
twofish_generic.c -rw-r--r-- 6.3 KB
vmac.c -rw-r--r-- 17.9 KB
wp512.c -rw-r--r-- 60.1 KB
xcbc.c -rw-r--r-- 7.2 KB
xor.c -rw-r--r-- 3.9 KB
xts.c -rw-r--r-- 7.1 KB
zlib.c -rw-r--r-- 9.6 KB

back to top