|
@@ -38,7 +38,7 @@
|
|
* UBIFS writes only to erased LEBs, so it writes only to the flash space
|
|
* UBIFS writes only to erased LEBs, so it writes only to the flash space
|
|
* containing only 0xFFs. UBIFS also always writes strictly from the beginning
|
|
* containing only 0xFFs. UBIFS also always writes strictly from the beginning
|
|
* of the LEB to the end. And UBIFS assumes that the underlying flash media
|
|
* of the LEB to the end. And UBIFS assumes that the underlying flash media
|
|
- * writes in @c->min_io_unit bytes at a time.
|
|
|
|
|
|
+ * writes in @c->max_write_size bytes at a time.
|
|
*
|
|
*
|
|
* Hence, if UBIFS finds a corrupted node at offset X, it expects only the min.
|
|
* Hence, if UBIFS finds a corrupted node at offset X, it expects only the min.
|
|
* I/O unit corresponding to offset X to contain corrupted data, all the
|
|
* I/O unit corresponding to offset X to contain corrupted data, all the
|
|
@@ -379,8 +379,9 @@ int ubifs_write_rcvrd_mst_node(struct ubifs_info *c)
|
|
* @offs: offset to check
|
|
* @offs: offset to check
|
|
*
|
|
*
|
|
* This function returns %1 if @offs was in the last write to the LEB whose data
|
|
* This function returns %1 if @offs was in the last write to the LEB whose data
|
|
- * is in @buf, otherwise %0 is returned. The determination is made by checking
|
|
|
|
- * for subsequent empty space starting from the next @c->min_io_size boundary.
|
|
|
|
|
|
+ * is in @buf, otherwise %0 is returned. The determination is made by checking
|
|
|
|
+ * for subsequent empty space starting from the next @c->max_write_size
|
|
|
|
+ * boundary.
|
|
*/
|
|
*/
|
|
static int is_last_write(const struct ubifs_info *c, void *buf, int offs)
|
|
static int is_last_write(const struct ubifs_info *c, void *buf, int offs)
|
|
{
|
|
{
|
|
@@ -388,10 +389,10 @@ static int is_last_write(const struct ubifs_info *c, void *buf, int offs)
|
|
uint8_t *p;
|
|
uint8_t *p;
|
|
|
|
|
|
/*
|
|
/*
|
|
- * Round up to the next @c->min_io_size boundary i.e. @offs is in the
|
|
|
|
- * last wbuf written. After that should be empty space.
|
|
|
|
|
|
+ * Round up to the next @c->max_write_size boundary i.e. @offs is in
|
|
|
|
+ * the last wbuf written. After that should be empty space.
|
|
*/
|
|
*/
|
|
- empty_offs = ALIGN(offs + 1, c->min_io_size);
|
|
|
|
|
|
+ empty_offs = ALIGN(offs + 1, c->max_write_size);
|
|
check_len = c->leb_size - empty_offs;
|
|
check_len = c->leb_size - empty_offs;
|
|
p = buf + empty_offs - offs;
|
|
p = buf + empty_offs - offs;
|
|
return is_empty(p, check_len);
|
|
return is_empty(p, check_len);
|
|
@@ -446,7 +447,7 @@ static int no_more_nodes(const struct ubifs_info *c, void *buf, int len,
|
|
int skip, dlen = le32_to_cpu(ch->len);
|
|
int skip, dlen = le32_to_cpu(ch->len);
|
|
|
|
|
|
/* Check for empty space after the corrupt node's common header */
|
|
/* Check for empty space after the corrupt node's common header */
|
|
- skip = ALIGN(offs + UBIFS_CH_SZ, c->min_io_size) - offs;
|
|
|
|
|
|
+ skip = ALIGN(offs + UBIFS_CH_SZ, c->max_write_size) - offs;
|
|
if (is_empty(buf + skip, len - skip))
|
|
if (is_empty(buf + skip, len - skip))
|
|
return 1;
|
|
return 1;
|
|
/*
|
|
/*
|
|
@@ -458,7 +459,7 @@ static int no_more_nodes(const struct ubifs_info *c, void *buf, int len,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
/* Now we know the corrupt node's length we can skip over it */
|
|
/* Now we know the corrupt node's length we can skip over it */
|
|
- skip = ALIGN(offs + dlen, c->min_io_size) - offs;
|
|
|
|
|
|
+ skip = ALIGN(offs + dlen, c->max_write_size) - offs;
|
|
/* After which there should be empty space */
|
|
/* After which there should be empty space */
|
|
if (is_empty(buf + skip, len - skip))
|
|
if (is_empty(buf + skip, len - skip))
|
|
return 1;
|
|
return 1;
|
|
@@ -857,12 +858,8 @@ 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,
|
|
static int recover_head(const struct ubifs_info *c, int lnum, int offs,
|
|
void *sbuf)
|
|
void *sbuf)
|
|
{
|
|
{
|
|
- int len, err;
|
|
|
|
|
|
+ int len = c->max_write_size, err;
|
|
|
|
|
|
- if (c->min_io_size > 1)
|
|
|
|
- len = c->min_io_size;
|
|
|
|
- else
|
|
|
|
- len = 512;
|
|
|
|
if (offs + len > c->leb_size)
|
|
if (offs + len > c->leb_size)
|
|
len = c->leb_size - offs;
|
|
len = c->leb_size - offs;
|
|
|
|
|