Lines Matching refs:be
1142 static void z_erofs_do_decompressed_bvec(struct z_erofs_backend *be, in z_erofs_do_decompressed_bvec() argument
1145 int poff = bvec->offset + be->pcl->pageofs_out; in z_erofs_do_decompressed_bvec()
1150 bvec->offset + bvec->end == be->pcl->length)) { in z_erofs_do_decompressed_bvec()
1151 DBG_BUGON((poff >> PAGE_SHIFT) >= be->nr_pages); in z_erofs_do_decompressed_bvec()
1152 page = be->decompressed_pages + (poff >> PAGE_SHIFT); in z_erofs_do_decompressed_bvec()
1158 be->keepxcpy = true; in z_erofs_do_decompressed_bvec()
1164 list_add(&item->list, &be->decompressed_secondary_bvecs); in z_erofs_do_decompressed_bvec()
1167 static void z_erofs_fill_other_copies(struct z_erofs_backend *be, int err) in z_erofs_fill_other_copies() argument
1169 unsigned int off0 = be->pcl->pageofs_out; in z_erofs_fill_other_copies()
1172 list_for_each_safe(p, n, &be->decompressed_secondary_bvecs) { in z_erofs_fill_other_copies()
1179 end = min_t(unsigned int, be->pcl->length - bvi->bvec.offset, in z_erofs_fill_other_copies()
1186 DBG_BUGON(pgnr >= be->nr_pages); in z_erofs_fill_other_copies()
1191 if (!be->decompressed_pages[pgnr]) { in z_erofs_fill_other_copies()
1196 src = kmap_local_page(be->decompressed_pages[pgnr]); in z_erofs_fill_other_copies()
1208 static void z_erofs_parse_out_bvecs(struct z_erofs_backend *be) in z_erofs_parse_out_bvecs() argument
1210 struct z_erofs_pcluster *pcl = be->pcl; in z_erofs_parse_out_bvecs()
1222 z_erofs_put_shortlivedpage(be->pagepool, old_bvpage); in z_erofs_parse_out_bvecs()
1225 z_erofs_do_decompressed_bvec(be, &bvec); in z_erofs_parse_out_bvecs()
1230 z_erofs_put_shortlivedpage(be->pagepool, old_bvpage); in z_erofs_parse_out_bvecs()
1233 static int z_erofs_parse_in_bvecs(struct z_erofs_backend *be, bool *overlapped) in z_erofs_parse_in_bvecs() argument
1235 struct z_erofs_pcluster *pcl = be->pcl; in z_erofs_parse_in_bvecs()
1250 be->compressed_pages[i] = page; in z_erofs_parse_in_bvecs()
1253 erofs_folio_is_managed(EROFS_SB(be->sb), page_folio(page))) { in z_erofs_parse_in_bvecs()
1262 z_erofs_do_decompressed_bvec(be, bvec); in z_erofs_parse_in_bvecs()
1268 static int z_erofs_decompress_pcluster(struct z_erofs_backend *be, int err) in z_erofs_decompress_pcluster() argument
1270 struct erofs_sb_info *const sbi = EROFS_SB(be->sb); in z_erofs_decompress_pcluster()
1271 struct z_erofs_pcluster *pcl = be->pcl; in z_erofs_decompress_pcluster()
1281 be->nr_pages = PAGE_ALIGN(pcl->length + pcl->pageofs_out) >> PAGE_SHIFT; in z_erofs_decompress_pcluster()
1284 be->decompressed_pages = NULL; in z_erofs_decompress_pcluster()
1285 be->compressed_pages = NULL; in z_erofs_decompress_pcluster()
1286 be->onstack_used = 0; in z_erofs_decompress_pcluster()
1287 if (be->nr_pages <= Z_EROFS_ONSTACK_PAGES) { in z_erofs_decompress_pcluster()
1288 be->decompressed_pages = be->onstack_pages; in z_erofs_decompress_pcluster()
1289 be->onstack_used = be->nr_pages; in z_erofs_decompress_pcluster()
1290 memset(be->decompressed_pages, 0, in z_erofs_decompress_pcluster()
1291 sizeof(struct page *) * be->nr_pages); in z_erofs_decompress_pcluster()
1294 if (pclusterpages + be->onstack_used <= Z_EROFS_ONSTACK_PAGES) in z_erofs_decompress_pcluster()
1295 be->compressed_pages = be->onstack_pages + be->onstack_used; in z_erofs_decompress_pcluster()
1297 if (!be->decompressed_pages) in z_erofs_decompress_pcluster()
1298 be->decompressed_pages = in z_erofs_decompress_pcluster()
1299 kvcalloc(be->nr_pages, sizeof(struct page *), in z_erofs_decompress_pcluster()
1301 if (!be->compressed_pages) in z_erofs_decompress_pcluster()
1302 be->compressed_pages = in z_erofs_decompress_pcluster()
1306 z_erofs_parse_out_bvecs(be); in z_erofs_decompress_pcluster()
1307 err2 = z_erofs_parse_in_bvecs(be, &overlapped); in z_erofs_decompress_pcluster()
1312 .sb = be->sb, in z_erofs_decompress_pcluster()
1313 .in = be->compressed_pages, in z_erofs_decompress_pcluster()
1314 .out = be->decompressed_pages, in z_erofs_decompress_pcluster()
1316 .outpages = be->nr_pages, in z_erofs_decompress_pcluster()
1324 .fillgaps = be->keepxcpy, in z_erofs_decompress_pcluster()
1327 }, be->pagepool); in z_erofs_decompress_pcluster()
1336 page = be->compressed_pages[i]; in z_erofs_decompress_pcluster()
1343 (void)z_erofs_put_shortlivedpage(be->pagepool, page); in z_erofs_decompress_pcluster()
1347 if (be->compressed_pages < be->onstack_pages || in z_erofs_decompress_pcluster()
1348 be->compressed_pages >= be->onstack_pages + Z_EROFS_ONSTACK_PAGES) in z_erofs_decompress_pcluster()
1349 kvfree(be->compressed_pages); in z_erofs_decompress_pcluster()
1352 z_erofs_fill_other_copies(be, err); in z_erofs_decompress_pcluster()
1353 for (i = 0; i < be->nr_pages; ++i) { in z_erofs_decompress_pcluster()
1354 page = be->decompressed_pages[i]; in z_erofs_decompress_pcluster()
1364 erofs_pagepool_add(be->pagepool, page); in z_erofs_decompress_pcluster()
1367 for (j = 0; j < jtop && be->decompressed_pages[j] != page; ++j) in z_erofs_decompress_pcluster()
1370 be->decompressed_pages[jtop++] = page; in z_erofs_decompress_pcluster()
1373 erofs_pagepool_add(be->pagepool, in z_erofs_decompress_pcluster()
1374 be->decompressed_pages[--jtop]); in z_erofs_decompress_pcluster()
1375 if (be->decompressed_pages != be->onstack_pages) in z_erofs_decompress_pcluster()
1376 kvfree(be->decompressed_pages); in z_erofs_decompress_pcluster()
1398 struct z_erofs_backend be = { in z_erofs_decompress_queue() local
1402 LIST_HEAD_INIT(be.decompressed_secondary_bvecs), in z_erofs_decompress_queue()
1408 for (; be.pcl != Z_EROFS_PCLUSTER_TAIL; be.pcl = next) { in z_erofs_decompress_queue()
1409 DBG_BUGON(!be.pcl); in z_erofs_decompress_queue()
1410 next = READ_ONCE(be.pcl->next); in z_erofs_decompress_queue()
1411 err = z_erofs_decompress_pcluster(&be, err) ?: err; in z_erofs_decompress_queue()