diff options
Diffstat (limited to 'fs/ubifs/recovery.c')
-rw-r--r-- | fs/ubifs/recovery.c | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/fs/ubifs/recovery.c b/fs/ubifs/recovery.c index 4d10b6e..74281f1 100644 --- a/fs/ubifs/recovery.c +++ b/fs/ubifs/recovery.c @@ -662,19 +662,13 @@ struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum, } if (ret == SCANNED_GARBAGE || ret == SCANNED_A_BAD_PAD_NODE) { - if (is_last_write(c, buf, offs)) - clean_buf(c, &buf, lnum, &offs, &len); - else + if (!is_last_write(c, buf, offs)) goto corrupted_rescan; } else if (ret == SCANNED_A_CORRUPT_NODE) { - if (no_more_nodes(c, buf, len, lnum, offs)) - clean_buf(c, &buf, lnum, &offs, &len); - else + if (!no_more_nodes(c, buf, len, lnum, offs)) goto corrupted_rescan; } else if (!is_empty(buf, len)) { - if (is_last_write(c, buf, offs)) { - clean_buf(c, &buf, lnum, &offs, &len); - } else { + if (!is_last_write(c, buf, offs)) { int corruption = first_non_ff(buf, len); /* @@ -694,12 +688,9 @@ struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum, if (grouped && drop_incomplete_group(sleb, &offs)) { buf = sbuf + offs; len = c->leb_size - offs; - clean_buf(c, &buf, lnum, &offs, &len); } - if (offs % c->min_io_size) - clean_buf(c, &buf, lnum, &offs, &len); - + clean_buf(c, &buf, lnum, &offs, &len); ubifs_end_scan(c, sleb, lnum, offs); err = fix_unclean_leb(c, sleb, start); |