|
|
@@ -857,6 +857,7 @@ repeat:
|
|
|
for (i = 0; i < nr_pages; ++i)
|
|
|
pages[i] = NULL;
|
|
|
|
|
|
+ err = 0;
|
|
|
z_erofs_pagevec_ctor_init(&ctor,
|
|
|
Z_EROFS_VLE_INLINE_PAGEVECS, work->pagevec, 0);
|
|
|
|
|
|
@@ -878,8 +879,17 @@ repeat:
|
|
|
pagenr = z_erofs_onlinepage_index(page);
|
|
|
|
|
|
DBG_BUGON(pagenr >= nr_pages);
|
|
|
- DBG_BUGON(pages[pagenr]);
|
|
|
|
|
|
+ /*
|
|
|
+ * currently EROFS doesn't support multiref(dedup),
|
|
|
+ * so here erroring out one multiref page.
|
|
|
+ */
|
|
|
+ if (pages[pagenr]) {
|
|
|
+ DBG_BUGON(1);
|
|
|
+ SetPageError(pages[pagenr]);
|
|
|
+ z_erofs_onlinepage_endio(pages[pagenr]);
|
|
|
+ err = -EIO;
|
|
|
+ }
|
|
|
pages[pagenr] = page;
|
|
|
}
|
|
|
sparsemem_pages = i;
|
|
|
@@ -889,7 +899,6 @@ repeat:
|
|
|
overlapped = false;
|
|
|
compressed_pages = grp->compressed_pages;
|
|
|
|
|
|
- err = 0;
|
|
|
for (i = 0; i < clusterpages; ++i) {
|
|
|
unsigned pagenr;
|
|
|
|
|
|
@@ -915,7 +924,12 @@ repeat:
|
|
|
pagenr = z_erofs_onlinepage_index(page);
|
|
|
|
|
|
DBG_BUGON(pagenr >= nr_pages);
|
|
|
- DBG_BUGON(pages[pagenr]);
|
|
|
+ if (pages[pagenr]) {
|
|
|
+ DBG_BUGON(1);
|
|
|
+ SetPageError(pages[pagenr]);
|
|
|
+ z_erofs_onlinepage_endio(pages[pagenr]);
|
|
|
+ err = -EIO;
|
|
|
+ }
|
|
|
++sparsemem_pages;
|
|
|
pages[pagenr] = page;
|
|
|
|