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()
117 struct workspace *victim = container_of(pos, struct workspace, in zstd_reclaim_timer_fn()
199 struct workspace *workspace; in zstd_cleanup_workspace_manager() local
205 workspace = container_of(wsm.idle_ws[i].next, in zstd_cleanup_workspace_manager()
206 struct workspace, list); in zstd_cleanup_workspace_manager()
207 list_del(&workspace->list); in zstd_cleanup_workspace_manager()
208 list_del(&workspace->lru_list); in zstd_cleanup_workspace_manager()
209 zstd_free_workspace(&workspace->list); in zstd_cleanup_workspace_manager()
231 struct workspace *workspace; in zstd_find_workspace() local
238 workspace = list_to_workspace(ws); in zstd_find_workspace()
241 workspace->req_level = level; in zstd_find_workspace()
242 if (level == workspace->level) in zstd_find_workspace()
243 list_del(&workspace->lru_list); in zstd_find_workspace()
307 struct workspace *workspace = list_to_workspace(ws); in zstd_put_workspace() local
312 if (workspace->req_level == workspace->level) { in zstd_put_workspace()
315 INIT_LIST_HEAD(&workspace->lru_list); in zstd_put_workspace()
317 workspace->last_used = jiffies; in zstd_put_workspace()
318 list_add(&workspace->lru_list, &wsm.lru_list); in zstd_put_workspace()
325 set_bit(workspace->level - 1, &wsm.active_map); in zstd_put_workspace()
326 list_add(&workspace->list, &wsm.idle_ws[workspace->level - 1]); in zstd_put_workspace()
327 workspace->req_level = 0; in zstd_put_workspace()
331 if (workspace->level == ZSTD_BTRFS_MAX_LEVEL) in zstd_put_workspace()
337 struct workspace *workspace = list_entry(ws, struct workspace, list); in zstd_free_workspace() local
339 kvfree(workspace->mem); in zstd_free_workspace()
340 kfree(workspace->buf); in zstd_free_workspace()
341 kfree(workspace); in zstd_free_workspace()
346 struct workspace *workspace; in zstd_alloc_workspace() local
348 workspace = kzalloc(sizeof(*workspace), GFP_KERNEL); in zstd_alloc_workspace()
349 if (!workspace) in zstd_alloc_workspace()
352 workspace->size = zstd_ws_mem_sizes[level - 1]; in zstd_alloc_workspace()
353 workspace->level = level; in zstd_alloc_workspace()
354 workspace->req_level = level; in zstd_alloc_workspace()
355 workspace->last_used = jiffies; in zstd_alloc_workspace()
356 workspace->mem = kvmalloc(workspace->size, GFP_KERNEL); in zstd_alloc_workspace()
357 workspace->buf = kmalloc(PAGE_SIZE, GFP_KERNEL); in zstd_alloc_workspace()
358 if (!workspace->mem || !workspace->buf) in zstd_alloc_workspace()
361 INIT_LIST_HEAD(&workspace->list); in zstd_alloc_workspace()
362 INIT_LIST_HEAD(&workspace->lru_list); in zstd_alloc_workspace()
364 return &workspace->list; in zstd_alloc_workspace()
366 zstd_free_workspace(&workspace->list); in zstd_alloc_workspace()
378 struct workspace *workspace = list_entry(ws, struct workspace, list); in zstd_compress_pages() local
389 ZSTD_parameters params = zstd_get_btrfs_parameters(workspace->req_level, in zstd_compress_pages()
397 stream = ZSTD_initCStream(params, len, workspace->mem, in zstd_compress_pages()
398 workspace->size); in zstd_compress_pages()
407 workspace->in_buf.src = kmap(in_page); in zstd_compress_pages()
408 workspace->in_buf.pos = 0; in zstd_compress_pages()
409 workspace->in_buf.size = min_t(size_t, len, PAGE_SIZE); in zstd_compress_pages()
419 workspace->out_buf.dst = kmap(out_page); in zstd_compress_pages()
420 workspace->out_buf.pos = 0; in zstd_compress_pages()
421 workspace->out_buf.size = min_t(size_t, max_out, PAGE_SIZE); in zstd_compress_pages()
426 ret2 = ZSTD_compressStream(stream, &workspace->out_buf, in zstd_compress_pages()
427 &workspace->in_buf); in zstd_compress_pages()
436 if (tot_in + workspace->in_buf.pos > 8192 && in zstd_compress_pages()
437 tot_in + workspace->in_buf.pos < in zstd_compress_pages()
438 tot_out + workspace->out_buf.pos) { in zstd_compress_pages()
444 if (workspace->out_buf.pos >= max_out) { in zstd_compress_pages()
445 tot_out += workspace->out_buf.pos; in zstd_compress_pages()
451 if (workspace->out_buf.pos == workspace->out_buf.size) { in zstd_compress_pages()
466 workspace->out_buf.dst = kmap(out_page); in zstd_compress_pages()
467 workspace->out_buf.pos = 0; in zstd_compress_pages()
468 workspace->out_buf.size = min_t(size_t, max_out, in zstd_compress_pages()
473 if (workspace->in_buf.pos >= len) { in zstd_compress_pages()
474 tot_in += workspace->in_buf.pos; in zstd_compress_pages()
479 if (workspace->in_buf.pos == workspace->in_buf.size) { in zstd_compress_pages()
487 workspace->in_buf.src = kmap(in_page); in zstd_compress_pages()
488 workspace->in_buf.pos = 0; in zstd_compress_pages()
489 workspace->in_buf.size = min_t(size_t, len, PAGE_SIZE); in zstd_compress_pages()
495 ret2 = ZSTD_endStream(stream, &workspace->out_buf); in zstd_compress_pages()
503 tot_out += workspace->out_buf.pos; in zstd_compress_pages()
506 if (workspace->out_buf.pos >= max_out) { in zstd_compress_pages()
507 tot_out += workspace->out_buf.pos; in zstd_compress_pages()
526 workspace->out_buf.dst = kmap(out_page); in zstd_compress_pages()
527 workspace->out_buf.pos = 0; in zstd_compress_pages()
528 workspace->out_buf.size = min_t(size_t, max_out, PAGE_SIZE); in zstd_compress_pages()
553 struct workspace *workspace = list_entry(ws, struct workspace, list); in zstd_decompress_bio() local
566 ZSTD_BTRFS_MAX_INPUT, workspace->mem, workspace->size); in zstd_decompress_bio()
573 workspace->in_buf.src = kmap(pages_in[page_in_index]); in zstd_decompress_bio()
574 workspace->in_buf.pos = 0; in zstd_decompress_bio()
575 workspace->in_buf.size = min_t(size_t, srclen, PAGE_SIZE); in zstd_decompress_bio()
577 workspace->out_buf.dst = workspace->buf; in zstd_decompress_bio()
578 workspace->out_buf.pos = 0; in zstd_decompress_bio()
579 workspace->out_buf.size = PAGE_SIZE; in zstd_decompress_bio()
584 ret2 = ZSTD_decompressStream(stream, &workspace->out_buf, in zstd_decompress_bio()
585 &workspace->in_buf); in zstd_decompress_bio()
593 total_out += workspace->out_buf.pos; in zstd_decompress_bio()
594 workspace->out_buf.pos = 0; in zstd_decompress_bio()
596 ret = btrfs_decompress_buf2page(workspace->out_buf.dst, in zstd_decompress_bio()
601 if (workspace->in_buf.pos >= srclen) in zstd_decompress_bio()
608 if (workspace->in_buf.pos == workspace->in_buf.size) { in zstd_decompress_bio()
611 workspace->in_buf.src = NULL; in zstd_decompress_bio()
616 workspace->in_buf.src = kmap(pages_in[page_in_index]); in zstd_decompress_bio()
617 workspace->in_buf.pos = 0; in zstd_decompress_bio()
618 workspace->in_buf.size = min_t(size_t, srclen, PAGE_SIZE); in zstd_decompress_bio()
624 if (workspace->in_buf.src) in zstd_decompress_bio()
634 struct workspace *workspace = list_entry(ws, struct workspace, list); in zstd_decompress() local
643 ZSTD_BTRFS_MAX_INPUT, workspace->mem, workspace->size); in zstd_decompress()
652 workspace->in_buf.src = data_in; in zstd_decompress()
653 workspace->in_buf.pos = 0; in zstd_decompress()
654 workspace->in_buf.size = srclen; in zstd_decompress()
656 workspace->out_buf.dst = workspace->buf; in zstd_decompress()
657 workspace->out_buf.pos = 0; in zstd_decompress()
658 workspace->out_buf.size = PAGE_SIZE; in zstd_decompress()
662 && workspace->in_buf.pos < workspace->in_buf.size) { in zstd_decompress()
673 ret2 = ZSTD_decompressStream(stream, &workspace->out_buf, in zstd_decompress()
674 &workspace->in_buf); in zstd_decompress()
683 total_out += workspace->out_buf.pos; in zstd_decompress()
684 workspace->out_buf.pos = 0; in zstd_decompress()
695 workspace->out_buf.size - buf_offset); in zstd_decompress()
698 memcpy(kaddr + pg_offset, workspace->out_buf.dst + buf_offset, in zstd_decompress()