Lines Matching refs:workspace
42 struct workspace { struct
89 static inline struct workspace *list_to_workspace(struct list_head *list) in list_to_workspace()
91 return container_of(list, struct workspace, list); in list_to_workspace()
116 struct workspace *victim = container_of(pos, struct workspace, in zstd_reclaim_timer_fn()
198 struct workspace *workspace; in zstd_cleanup_workspace_manager() local
204 workspace = container_of(wsm.idle_ws[i].next, in zstd_cleanup_workspace_manager()
205 struct workspace, list); in zstd_cleanup_workspace_manager()
206 list_del(&workspace->list); in zstd_cleanup_workspace_manager()
207 list_del(&workspace->lru_list); in zstd_cleanup_workspace_manager()
208 zstd_free_workspace(&workspace->list); in zstd_cleanup_workspace_manager()
230 struct workspace *workspace; in zstd_find_workspace() local
237 workspace = list_to_workspace(ws); in zstd_find_workspace()
240 workspace->req_level = level; in zstd_find_workspace()
241 if (level == workspace->level) in zstd_find_workspace()
242 list_del(&workspace->lru_list); in zstd_find_workspace()
306 struct workspace *workspace = list_to_workspace(ws); in zstd_put_workspace() local
311 if (workspace->req_level == workspace->level) { in zstd_put_workspace()
314 INIT_LIST_HEAD(&workspace->lru_list); in zstd_put_workspace()
316 workspace->last_used = jiffies; in zstd_put_workspace()
317 list_add(&workspace->lru_list, &wsm.lru_list); in zstd_put_workspace()
324 set_bit(workspace->level - 1, &wsm.active_map); in zstd_put_workspace()
325 list_add(&workspace->list, &wsm.idle_ws[workspace->level - 1]); in zstd_put_workspace()
326 workspace->req_level = 0; in zstd_put_workspace()
330 if (workspace->level == ZSTD_BTRFS_MAX_LEVEL) in zstd_put_workspace()
336 struct workspace *workspace = list_entry(ws, struct workspace, list); in zstd_free_workspace() local
338 kvfree(workspace->mem); in zstd_free_workspace()
339 kfree(workspace->buf); in zstd_free_workspace()
340 kfree(workspace); in zstd_free_workspace()
345 struct workspace *workspace; in zstd_alloc_workspace() local
347 workspace = kzalloc(sizeof(*workspace), GFP_KERNEL); in zstd_alloc_workspace()
348 if (!workspace) in zstd_alloc_workspace()
351 workspace->size = zstd_ws_mem_sizes[level - 1]; in zstd_alloc_workspace()
352 workspace->level = level; in zstd_alloc_workspace()
353 workspace->req_level = level; in zstd_alloc_workspace()
354 workspace->last_used = jiffies; in zstd_alloc_workspace()
355 workspace->mem = kvmalloc(workspace->size, GFP_KERNEL); in zstd_alloc_workspace()
356 workspace->buf = kmalloc(PAGE_SIZE, GFP_KERNEL); in zstd_alloc_workspace()
357 if (!workspace->mem || !workspace->buf) in zstd_alloc_workspace()
360 INIT_LIST_HEAD(&workspace->list); in zstd_alloc_workspace()
361 INIT_LIST_HEAD(&workspace->lru_list); in zstd_alloc_workspace()
363 return &workspace->list; in zstd_alloc_workspace()
365 zstd_free_workspace(&workspace->list); in zstd_alloc_workspace()
373 struct workspace *workspace = list_entry(ws, struct workspace, list); in zstd_compress_pages() local
384 ZSTD_parameters params = zstd_get_btrfs_parameters(workspace->req_level, in zstd_compress_pages()
392 stream = ZSTD_initCStream(params, len, workspace->mem, in zstd_compress_pages()
393 workspace->size); in zstd_compress_pages()
402 workspace->in_buf.src = kmap(in_page); in zstd_compress_pages()
403 workspace->in_buf.pos = 0; in zstd_compress_pages()
404 workspace->in_buf.size = min_t(size_t, len, PAGE_SIZE); in zstd_compress_pages()
414 workspace->out_buf.dst = kmap(out_page); in zstd_compress_pages()
415 workspace->out_buf.pos = 0; in zstd_compress_pages()
416 workspace->out_buf.size = min_t(size_t, max_out, PAGE_SIZE); in zstd_compress_pages()
421 ret2 = ZSTD_compressStream(stream, &workspace->out_buf, in zstd_compress_pages()
422 &workspace->in_buf); in zstd_compress_pages()
431 if (tot_in + workspace->in_buf.pos > 8192 && in zstd_compress_pages()
432 tot_in + workspace->in_buf.pos < in zstd_compress_pages()
433 tot_out + workspace->out_buf.pos) { in zstd_compress_pages()
439 if (workspace->out_buf.pos >= max_out) { in zstd_compress_pages()
440 tot_out += workspace->out_buf.pos; in zstd_compress_pages()
446 if (workspace->out_buf.pos == workspace->out_buf.size) { in zstd_compress_pages()
461 workspace->out_buf.dst = kmap(out_page); in zstd_compress_pages()
462 workspace->out_buf.pos = 0; in zstd_compress_pages()
463 workspace->out_buf.size = min_t(size_t, max_out, in zstd_compress_pages()
468 if (workspace->in_buf.pos >= len) { in zstd_compress_pages()
469 tot_in += workspace->in_buf.pos; in zstd_compress_pages()
474 if (workspace->in_buf.pos == workspace->in_buf.size) { in zstd_compress_pages()
482 workspace->in_buf.src = kmap(in_page); in zstd_compress_pages()
483 workspace->in_buf.pos = 0; in zstd_compress_pages()
484 workspace->in_buf.size = min_t(size_t, len, PAGE_SIZE); in zstd_compress_pages()
490 ret2 = ZSTD_endStream(stream, &workspace->out_buf); in zstd_compress_pages()
498 tot_out += workspace->out_buf.pos; in zstd_compress_pages()
501 if (workspace->out_buf.pos >= max_out) { in zstd_compress_pages()
502 tot_out += workspace->out_buf.pos; in zstd_compress_pages()
521 workspace->out_buf.dst = kmap(out_page); in zstd_compress_pages()
522 workspace->out_buf.pos = 0; in zstd_compress_pages()
523 workspace->out_buf.size = min_t(size_t, max_out, PAGE_SIZE); in zstd_compress_pages()
548 struct workspace *workspace = list_entry(ws, struct workspace, list); in zstd_decompress_bio() local
561 ZSTD_BTRFS_MAX_INPUT, workspace->mem, workspace->size); in zstd_decompress_bio()
568 workspace->in_buf.src = kmap(pages_in[page_in_index]); in zstd_decompress_bio()
569 workspace->in_buf.pos = 0; in zstd_decompress_bio()
570 workspace->in_buf.size = min_t(size_t, srclen, PAGE_SIZE); in zstd_decompress_bio()
572 workspace->out_buf.dst = workspace->buf; in zstd_decompress_bio()
573 workspace->out_buf.pos = 0; in zstd_decompress_bio()
574 workspace->out_buf.size = PAGE_SIZE; in zstd_decompress_bio()
579 ret2 = ZSTD_decompressStream(stream, &workspace->out_buf, in zstd_decompress_bio()
580 &workspace->in_buf); in zstd_decompress_bio()
588 total_out += workspace->out_buf.pos; in zstd_decompress_bio()
589 workspace->out_buf.pos = 0; in zstd_decompress_bio()
591 ret = btrfs_decompress_buf2page(workspace->out_buf.dst, in zstd_decompress_bio()
596 if (workspace->in_buf.pos >= srclen) in zstd_decompress_bio()
603 if (workspace->in_buf.pos == workspace->in_buf.size) { in zstd_decompress_bio()
606 workspace->in_buf.src = NULL; in zstd_decompress_bio()
611 workspace->in_buf.src = kmap(pages_in[page_in_index]); in zstd_decompress_bio()
612 workspace->in_buf.pos = 0; in zstd_decompress_bio()
613 workspace->in_buf.size = min_t(size_t, srclen, PAGE_SIZE); in zstd_decompress_bio()
619 if (workspace->in_buf.src) in zstd_decompress_bio()
628 struct workspace *workspace = list_entry(ws, struct workspace, list); in zstd_decompress() local
637 ZSTD_BTRFS_MAX_INPUT, workspace->mem, workspace->size); in zstd_decompress()
646 workspace->in_buf.src = data_in; in zstd_decompress()
647 workspace->in_buf.pos = 0; in zstd_decompress()
648 workspace->in_buf.size = srclen; in zstd_decompress()
650 workspace->out_buf.dst = workspace->buf; in zstd_decompress()
651 workspace->out_buf.pos = 0; in zstd_decompress()
652 workspace->out_buf.size = PAGE_SIZE; in zstd_decompress()
656 && workspace->in_buf.pos < workspace->in_buf.size) { in zstd_decompress()
667 ret2 = ZSTD_decompressStream(stream, &workspace->out_buf, in zstd_decompress()
668 &workspace->in_buf); in zstd_decompress()
677 total_out += workspace->out_buf.pos; in zstd_decompress()
678 workspace->out_buf.pos = 0; in zstd_decompress()
689 workspace->out_buf.size - buf_offset); in zstd_decompress()
692 memcpy(kaddr + pg_offset, workspace->out_buf.dst + buf_offset, in zstd_decompress()