UBIFS: do not look up truncation nodes
When moving nodes in GC, do not try to look up truncation nodes in TNC, because they do not exist there. This would be harmless, because the TNC look-up would fail, if we did not have bug 'ubifs_add_snod()' which reads garbage into 'snod->key'. But in any case, it is less error prone to explicitly ignore everything but inode, data, dentry and xentry nodes. Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
This commit is contained in:
Родитель
e3408ad4cb
Коммит
44ec83b8bd
|
@ -233,9 +233,26 @@ static int sort_nodes(struct ubifs_info *c, struct ubifs_scan_leb *sleb,
|
|||
list_for_each_entry_safe(snod, tmp, &sleb->nodes, list) {
|
||||
int err;
|
||||
|
||||
ubifs_assert(snod->type != UBIFS_IDX_NODE);
|
||||
ubifs_assert(snod->type != UBIFS_REF_NODE);
|
||||
ubifs_assert(snod->type != UBIFS_CS_NODE);
|
||||
ubifs_assert(snod->type == UBIFS_INO_NODE ||
|
||||
snod->type == UBIFS_DATA_NODE ||
|
||||
snod->type == UBIFS_DENT_NODE ||
|
||||
snod->type == UBIFS_XENT_NODE ||
|
||||
snod->type == UBIFS_TRUN_NODE);
|
||||
|
||||
if (snod->type != UBIFS_INO_NODE &&
|
||||
snod->type != UBIFS_DATA_NODE &&
|
||||
snod->type != UBIFS_DENT_NODE &&
|
||||
snod->type != UBIFS_XENT_NODE) {
|
||||
/* Probably truncation node, zap it */
|
||||
list_del(&snod->list);
|
||||
kfree(snod);
|
||||
continue;
|
||||
}
|
||||
|
||||
ubifs_assert(key_type(c, &snod->key) == UBIFS_DATA_KEY ||
|
||||
key_type(c, &snod->key) == UBIFS_INO_KEY ||
|
||||
key_type(c, &snod->key) == UBIFS_DENT_KEY ||
|
||||
key_type(c, &snod->key) == UBIFS_XENT_KEY);
|
||||
|
||||
err = ubifs_tnc_has_node(c, &snod->key, 0, sleb->lnum,
|
||||
snod->offs, 0);
|
||||
|
|
Загрузка…
Ссылка в новой задаче