Lines Matching refs:workspace
45 struct workspace { struct
93 static inline struct workspace *list_to_workspace(struct list_head *list) in list_to_workspace()
95 return container_of(list, struct workspace, list); in list_to_workspace()
128 struct workspace *victim = container_of(pos, struct workspace, in zstd_reclaim_timer_fn()
212 struct workspace *workspace; in zstd_cleanup_workspace_manager() local
218 workspace = container_of(wsm.idle_ws[i].next, in zstd_cleanup_workspace_manager()
219 struct workspace, list); in zstd_cleanup_workspace_manager()
220 list_del(&workspace->list); in zstd_cleanup_workspace_manager()
221 list_del(&workspace->lru_list); in zstd_cleanup_workspace_manager()
222 zstd_free_workspace(&workspace->list); in zstd_cleanup_workspace_manager()
245 struct workspace *workspace; in zstd_find_workspace() local
252 workspace = list_to_workspace(ws); in zstd_find_workspace()
255 workspace->req_level = level; in zstd_find_workspace()
256 if (clip_level(level) == workspace->level) in zstd_find_workspace()
257 list_del(&workspace->lru_list); in zstd_find_workspace()
323 struct workspace *workspace = list_to_workspace(ws); in zstd_put_workspace() local
328 if (clip_level(workspace->req_level) == workspace->level) { in zstd_put_workspace()
331 INIT_LIST_HEAD(&workspace->lru_list); in zstd_put_workspace()
333 workspace->last_used = jiffies; in zstd_put_workspace()
334 list_add(&workspace->lru_list, &wsm.lru_list); in zstd_put_workspace()
341 set_bit(workspace->level, &wsm.active_map); in zstd_put_workspace()
342 list_add(&workspace->list, &wsm.idle_ws[workspace->level]); in zstd_put_workspace()
343 workspace->req_level = 0; in zstd_put_workspace()
347 if (workspace->level == clip_level(ZSTD_BTRFS_MAX_LEVEL)) in zstd_put_workspace()
353 struct workspace *workspace = list_entry(ws, struct workspace, list); in zstd_free_workspace() local
355 kvfree(workspace->mem); in zstd_free_workspace()
356 kfree(workspace->buf); in zstd_free_workspace()
357 kfree(workspace); in zstd_free_workspace()
362 struct workspace *workspace; in zstd_alloc_workspace() local
364 workspace = kzalloc(sizeof(*workspace), GFP_KERNEL); in zstd_alloc_workspace()
365 if (!workspace) in zstd_alloc_workspace()
369 workspace->size = zstd_ws_mem_sizes[clip_level(level)]; in zstd_alloc_workspace()
370 workspace->level = clip_level(level); in zstd_alloc_workspace()
371 workspace->req_level = level; in zstd_alloc_workspace()
372 workspace->last_used = jiffies; in zstd_alloc_workspace()
373 workspace->mem = kvmalloc(workspace->size, GFP_KERNEL | __GFP_NOWARN); in zstd_alloc_workspace()
374 workspace->buf = kmalloc(PAGE_SIZE, GFP_KERNEL); in zstd_alloc_workspace()
375 if (!workspace->mem || !workspace->buf) in zstd_alloc_workspace()
378 INIT_LIST_HEAD(&workspace->list); in zstd_alloc_workspace()
379 INIT_LIST_HEAD(&workspace->lru_list); in zstd_alloc_workspace()
381 return &workspace->list; in zstd_alloc_workspace()
383 zstd_free_workspace(&workspace->list); in zstd_alloc_workspace()
391 struct workspace *workspace = list_entry(ws, struct workspace, list); in zstd_compress_folios() local
405 workspace->params = zstd_get_btrfs_parameters(workspace->req_level, len); in zstd_compress_folios()
411 stream = zstd_init_cstream(&workspace->params, len, workspace->mem, in zstd_compress_folios()
412 workspace->size); in zstd_compress_folios()
418 workspace->req_level, btrfs_root_id(inode->root), in zstd_compress_folios()
429 workspace->in_buf.src = kmap_local_folio(in_folio, offset_in_folio(in_folio, start)); in zstd_compress_folios()
430 workspace->in_buf.pos = 0; in zstd_compress_folios()
431 workspace->in_buf.size = cur_len; in zstd_compress_folios()
440 workspace->out_buf.dst = folio_address(out_folio); in zstd_compress_folios()
441 workspace->out_buf.pos = 0; in zstd_compress_folios()
442 workspace->out_buf.size = min_t(size_t, max_out, PAGE_SIZE); in zstd_compress_folios()
447 ret2 = zstd_compress_stream(stream, &workspace->out_buf, in zstd_compress_folios()
448 &workspace->in_buf); in zstd_compress_folios()
454 workspace->req_level, zstd_get_error_code(ret2), in zstd_compress_folios()
462 if (tot_in + workspace->in_buf.pos > 8192 && in zstd_compress_folios()
463 tot_in + workspace->in_buf.pos < in zstd_compress_folios()
464 tot_out + workspace->out_buf.pos) { in zstd_compress_folios()
470 if (workspace->out_buf.pos >= max_out) { in zstd_compress_folios()
471 tot_out += workspace->out_buf.pos; in zstd_compress_folios()
477 if (workspace->out_buf.pos == workspace->out_buf.size) { in zstd_compress_folios()
490 workspace->out_buf.dst = folio_address(out_folio); in zstd_compress_folios()
491 workspace->out_buf.pos = 0; in zstd_compress_folios()
492 workspace->out_buf.size = min_t(size_t, max_out, in zstd_compress_folios()
497 if (workspace->in_buf.pos >= len) { in zstd_compress_folios()
498 tot_in += workspace->in_buf.pos; in zstd_compress_folios()
503 if (workspace->in_buf.pos == workspace->in_buf.size) { in zstd_compress_folios()
504 tot_in += workspace->in_buf.size; in zstd_compress_folios()
505 kunmap_local(workspace->in_buf.src); in zstd_compress_folios()
506 workspace->in_buf.src = NULL; in zstd_compress_folios()
514 workspace->in_buf.src = kmap_local_folio(in_folio, in zstd_compress_folios()
516 workspace->in_buf.pos = 0; in zstd_compress_folios()
517 workspace->in_buf.size = cur_len; in zstd_compress_folios()
523 ret2 = zstd_end_stream(stream, &workspace->out_buf); in zstd_compress_folios()
529 workspace->req_level, zstd_get_error_code(ret2), in zstd_compress_folios()
536 tot_out += workspace->out_buf.pos; in zstd_compress_folios()
539 if (workspace->out_buf.pos >= max_out) { in zstd_compress_folios()
540 tot_out += workspace->out_buf.pos; in zstd_compress_folios()
557 workspace->out_buf.dst = folio_address(out_folio); in zstd_compress_folios()
558 workspace->out_buf.pos = 0; in zstd_compress_folios()
559 workspace->out_buf.size = min_t(size_t, max_out, PAGE_SIZE); in zstd_compress_folios()
572 if (workspace->in_buf.src) { in zstd_compress_folios()
573 kunmap_local(workspace->in_buf.src); in zstd_compress_folios()
581 struct workspace *workspace = list_entry(ws, struct workspace, list); in zstd_decompress_bio() local
592 ZSTD_BTRFS_MAX_INPUT, workspace->mem, workspace->size); in zstd_decompress_bio()
603 workspace->in_buf.src = kmap_local_folio(folios_in[folio_in_index], 0); in zstd_decompress_bio()
604 workspace->in_buf.pos = 0; in zstd_decompress_bio()
605 workspace->in_buf.size = min_t(size_t, srclen, PAGE_SIZE); in zstd_decompress_bio()
607 workspace->out_buf.dst = workspace->buf; in zstd_decompress_bio()
608 workspace->out_buf.pos = 0; in zstd_decompress_bio()
609 workspace->out_buf.size = PAGE_SIZE; in zstd_decompress_bio()
614 ret2 = zstd_decompress_stream(stream, &workspace->out_buf, in zstd_decompress_bio()
615 &workspace->in_buf); in zstd_decompress_bio()
627 total_out += workspace->out_buf.pos; in zstd_decompress_bio()
628 workspace->out_buf.pos = 0; in zstd_decompress_bio()
630 ret = btrfs_decompress_buf2page(workspace->out_buf.dst, in zstd_decompress_bio()
635 if (workspace->in_buf.pos >= srclen) in zstd_decompress_bio()
642 if (workspace->in_buf.pos == workspace->in_buf.size) { in zstd_decompress_bio()
643 kunmap_local(workspace->in_buf.src); in zstd_decompress_bio()
646 workspace->in_buf.src = NULL; in zstd_decompress_bio()
651 workspace->in_buf.src = in zstd_decompress_bio()
653 workspace->in_buf.pos = 0; in zstd_decompress_bio()
654 workspace->in_buf.size = min_t(size_t, srclen, PAGE_SIZE); in zstd_decompress_bio()
659 if (workspace->in_buf.src) in zstd_decompress_bio()
660 kunmap_local(workspace->in_buf.src); in zstd_decompress_bio()
668 struct workspace *workspace = list_entry(ws, struct workspace, list); in zstd_decompress() local
676 ZSTD_BTRFS_MAX_INPUT, workspace->mem, workspace->size); in zstd_decompress()
688 workspace->in_buf.src = data_in; in zstd_decompress()
689 workspace->in_buf.pos = 0; in zstd_decompress()
690 workspace->in_buf.size = srclen; in zstd_decompress()
692 workspace->out_buf.dst = workspace->buf; in zstd_decompress()
693 workspace->out_buf.pos = 0; in zstd_decompress()
694 workspace->out_buf.size = sectorsize; in zstd_decompress()
700 ret = zstd_decompress_stream(stream, &workspace->out_buf, &workspace->in_buf); in zstd_decompress()
710 to_copy = workspace->out_buf.pos; in zstd_decompress()
711 memcpy_to_folio(dest_folio, dest_pgoff, workspace->out_buf.dst, to_copy); in zstd_decompress()