|
@@ -357,11 +357,7 @@ static int is_last_write(const struct ubifs_info *c, void *buf, int offs)
|
|
|
empty_offs = ALIGN(offs + 1, c->min_io_size);
|
|
|
check_len = c->leb_size - empty_offs;
|
|
|
p = buf + empty_offs - offs;
|
|
|
-
|
|
|
- for (; check_len > 0; check_len--)
|
|
|
- if (*p++ != 0xff)
|
|
|
- return 0;
|
|
|
- return 1;
|
|
|
+ return is_empty(p, check_len);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -814,7 +810,7 @@ struct ubifs_scan_leb *ubifs_recover_log_leb(struct ubifs_info *c, int lnum,
|
|
|
static int recover_head(const struct ubifs_info *c, int lnum, int offs,
|
|
|
void *sbuf)
|
|
|
{
|
|
|
- int len, err, need_clean = 0;
|
|
|
+ int len, err;
|
|
|
|
|
|
if (c->min_io_size > 1)
|
|
|
len = c->min_io_size;
|
|
@@ -828,19 +824,7 @@ static int recover_head(const struct ubifs_info *c, int lnum, int offs,
|
|
|
|
|
|
/* Read at the head location and check it is empty flash */
|
|
|
err = ubi_read(c->ubi, lnum, sbuf, offs, len);
|
|
|
- if (err)
|
|
|
- need_clean = 1;
|
|
|
- else {
|
|
|
- uint8_t *p = sbuf;
|
|
|
-
|
|
|
- while (len--)
|
|
|
- if (*p++ != 0xff) {
|
|
|
- need_clean = 1;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (need_clean) {
|
|
|
+ if (err || !is_empty(sbuf, len)) {
|
|
|
dbg_rcvry("cleaning head at %d:%d", lnum, offs);
|
|
|
if (offs == 0)
|
|
|
return ubifs_leb_unmap(c, lnum);
|