summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/ubifs/recovery.c29
1 files changed, 9 insertions, 20 deletions
diff --git a/fs/ubifs/recovery.c b/fs/ubifs/recovery.c
index 7d92203..4d10b6e 100644
--- a/fs/ubifs/recovery.c
+++ b/fs/ubifs/recovery.c
@@ -609,7 +609,7 @@ static int drop_incomplete_group(struct ubifs_scan_leb *sleb, int *offs)
struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum,
int offs, void *sbuf, int grouped)
{
- int ret = 0, err, len = c->leb_size - offs, need_clean = 0;
+ int ret = 0, err, len = c->leb_size - offs;
int start = offs;
struct ubifs_scan_leb *sleb;
void *buf = sbuf + offs;
@@ -620,9 +620,6 @@ struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum,
if (IS_ERR(sleb))
return sleb;
- if (sleb->ecc)
- need_clean = 1;
-
while (len >= 8) {
dbg_scan("look at LEB %d:%d (%d bytes left)",
lnum, offs, len);
@@ -665,21 +662,18 @@ 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)) {
+ if (is_last_write(c, buf, offs))
clean_buf(c, &buf, lnum, &offs, &len);
- need_clean = 1;
- } else
+ else
goto corrupted_rescan;
} else if (ret == SCANNED_A_CORRUPT_NODE) {
- if (no_more_nodes(c, buf, len, lnum, offs)) {
+ if (no_more_nodes(c, buf, len, lnum, offs))
clean_buf(c, &buf, lnum, &offs, &len);
- need_clean = 1;
- } else
+ else
goto corrupted_rescan;
} else if (!is_empty(buf, len)) {
if (is_last_write(c, buf, offs)) {
clean_buf(c, &buf, lnum, &offs, &len);
- need_clean = 1;
} else {
int corruption = first_non_ff(buf, len);
@@ -701,21 +695,16 @@ struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum,
buf = sbuf + offs;
len = c->leb_size - offs;
clean_buf(c, &buf, lnum, &offs, &len);
- need_clean = 1;
}
- if (offs % c->min_io_size) {
+ if (offs % c->min_io_size)
clean_buf(c, &buf, lnum, &offs, &len);
- need_clean = 1;
- }
ubifs_end_scan(c, sleb, lnum, offs);
- if (need_clean) {
- err = fix_unclean_leb(c, sleb, start);
- if (err)
- goto error;
- }
+ err = fix_unclean_leb(c, sleb, start);
+ if (err)
+ goto error;
return sleb;