]> git.baikalelectronics.ru Git - kernel.git/commit
UBIFS: fix clean znode counter corruption in error cases
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Tue, 31 May 2011 11:26:07 +0000 (14:26 +0300)
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Fri, 3 Jun 2011 15:12:31 +0000 (18:12 +0300)
commitddf5471841cd180e7c5ba0ab5427a8af2299427b
tree7020b369ac3373f292d59fe5fd470f73ecb69897
parent4d8ac4635c5346e9c8c98ce68d39ce90222e2ab8
UBIFS: fix clean znode counter corruption in error cases

UBIFS maintains per-filesystem and global clean znode counters
('c->clean_zn_cnt' and 'ubifs_clean_zn_cnt'). It is important to maintain
correct values there since the shrinker relies on 'ubifs_clean_zn_cnt'.

However, in case of failures during commit the counters were corrupted. E.g.,
if a failure happens in the middle of 'write_index()', then some nodes in the
commit list ('c->cnext') are marked as clean, and some are marked as dirty. And
the 'ubifs_destroy_tnc_subtree()' frees does not retrun correct count, and we
end up with non-zero 'c->clean_zn_cnt' when unmounting. This means that if we
have 2 file-sytem and one of them fails, and we unmount it,
'ubifs_clean_zn_cnt' stays incorrect and confuses the shrinker.

Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
fs/ubifs/tnc.c