{
struct btrfs_fs_info *fs_info = cb_to_fs_info(cb);
struct workspace *workspace = list_entry(ws, struct workspace, list);
- struct folio **folios_in = cb->compressed_folios;
+ struct folio_iter fi;
size_t srclen = cb->compressed_len;
zstd_dstream *stream;
int ret = 0;
unsigned long buf_start;
unsigned long total_out = 0;
+ bio_first_folio(&fi, &cb->bbio.bio, 0);
+ if (unlikely(!fi.folio))
+ return -EINVAL;
+ ASSERT(folio_size(fi.folio) == blocksize);
+
stream = zstd_init_dstream(
ZSTD_BTRFS_MAX_INPUT, workspace->mem, workspace->size);
if (unlikely(!stream)) {
goto done;
}
- workspace->in_buf.src = kmap_local_folio(folios_in[folio_in_index], 0);
+ workspace->in_buf.src = kmap_local_folio(fi.folio, 0);
workspace->in_buf.pos = 0;
workspace->in_buf.size = min_t(size_t, srclen, min_folio_size);
goto done;
}
srclen -= min_folio_size;
- workspace->in_buf.src =
- kmap_local_folio(folios_in[folio_in_index], 0);
+ bio_next_folio(&fi, &cb->bbio.bio);
+ ASSERT(fi.folio);
+ workspace->in_buf.src = kmap_local_folio(fi.folio, 0);
workspace->in_buf.pos = 0;
workspace->in_buf.size = min_t(size_t, srclen, min_folio_size);
}