Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 250464
b: refs/heads/master
c: 7c47bfd
h: refs/heads/master
v: v3
  • Loading branch information
Artem Bityutskiy authored and Artem Bityutskiy committed May 16, 2011
1 parent b3db08a commit c880b17
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 21 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 617992069513c1e789c707c4d75ff03bf7dd0fb0
refs/heads/master: 7c47bfd0dbb20e5d7fa4e37cfd76bb73d39b32b4
29 changes: 9 additions & 20 deletions trunk/fs/ubifs/recovery.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down Expand Up @@ -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);

Expand All @@ -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;

Expand Down

0 comments on commit c880b17

Please sign in to comment.