Lines Matching defs:dic
51 int (*init_decompress_ctx)(struct decompress_io_ctx *dic);
52 void (*destroy_decompress_ctx)(struct decompress_io_ctx *dic);
53 int (*decompress_pages)(struct decompress_io_ctx *dic);
209 static int lzo_decompress_pages(struct decompress_io_ctx *dic)
213 ret = lzo1x_decompress_safe(dic->cbuf->cdata, dic->clen,
214 dic->rbuf, &dic->rlen);
217 KERN_ERR, F2FS_I_SB(dic->inode)->sb->s_id, ret);
221 if (dic->rlen != PAGE_SIZE << dic->log_cluster_size) {
224 F2FS_I_SB(dic->inode)->sb->s_id,
225 dic->rlen,
226 PAGE_SIZE << dic->log_cluster_size);
276 static int lz4_decompress_pages(struct decompress_io_ctx *dic)
280 ret = LZ4_decompress_safe(dic->cbuf->cdata, dic->rbuf,
281 dic->clen, dic->rlen);
284 KERN_ERR, F2FS_I_SB(dic->inode)->sb->s_id, ret);
288 if (ret != PAGE_SIZE << dic->log_cluster_size) {
291 F2FS_I_SB(dic->inode)->sb->s_id, ret,
292 PAGE_SIZE << dic->log_cluster_size);
391 static int zstd_init_decompress_ctx(struct decompress_io_ctx *dic)
397 MAX_COMPRESS_WINDOW_SIZE(dic->log_cluster_size);
401 workspace = f2fs_kvmalloc(F2FS_I_SB(dic->inode),
409 KERN_ERR, F2FS_I_SB(dic->inode)->sb->s_id,
415 dic->private = workspace;
416 dic->private2 = stream;
421 static void zstd_destroy_decompress_ctx(struct decompress_io_ctx *dic)
423 kvfree(dic->private);
424 dic->private = NULL;
425 dic->private2 = NULL;
428 static int zstd_decompress_pages(struct decompress_io_ctx *dic)
430 ZSTD_DStream *stream = dic->private2;
436 inbuf.src = dic->cbuf->cdata;
437 inbuf.size = dic->clen;
440 outbuf.dst = dic->rbuf;
441 outbuf.size = dic->rlen;
446 KERN_ERR, F2FS_I_SB(dic->inode)->sb->s_id,
451 if (dic->rlen != outbuf.pos) {
454 F2FS_I_SB(dic->inode)->sb->s_id,
455 __func__, dic->rlen,
456 PAGE_SIZE << dic->log_cluster_size);
707 struct decompress_io_ctx *dic =
709 struct f2fs_sb_info *sbi = F2FS_I_SB(dic->inode);
710 struct f2fs_inode_info *fi= F2FS_I(dic->inode);
719 dic->failed = true;
721 if (atomic_dec_return(&dic->pending_pages))
724 trace_f2fs_decompress_pages_start(dic->inode, dic->cluster_idx,
725 dic->cluster_size, fi->i_compress_algorithm);
728 if (dic->failed) {
733 dic->tpages = page_array_alloc(dic->inode, dic->cluster_size);
734 if (!dic->tpages) {
739 for (i = 0; i < dic->cluster_size; i++) {
740 if (dic->rpages[i]) {
741 dic->tpages[i] = dic->rpages[i];
745 dic->tpages[i] = f2fs_compress_alloc_page();
746 if (!dic->tpages[i]) {
753 ret = cops->init_decompress_ctx(dic);
758 dic->rbuf = f2fs_vmap(dic->tpages, dic->cluster_size);
759 if (!dic->rbuf) {
764 dic->cbuf = f2fs_vmap(dic->cpages, dic->nr_cpages);
765 if (!dic->cbuf) {
770 dic->clen = le32_to_cpu(dic->cbuf->clen);
771 dic->rlen = PAGE_SIZE << dic->log_cluster_size;
773 if (dic->clen > PAGE_SIZE * dic->nr_cpages - COMPRESS_HEADER_SIZE) {
778 ret = cops->decompress_pages(dic);
781 vm_unmap_ram(dic->cbuf, dic->nr_cpages);
783 vm_unmap_ram(dic->rbuf, dic->cluster_size);
786 cops->destroy_decompress_ctx(dic);
789 f2fs_decompress_end_io(dic->rpages, dic->cluster_size,
792 trace_f2fs_decompress_pages_end(dic->inode, dic->cluster_idx,
793 dic->clen, ret);
795 f2fs_free_dic(dic);
1470 struct decompress_io_ctx *dic;
1474 dic = kmem_cache_zalloc(dic_entry_slab, GFP_NOFS);
1475 if (!dic)
1478 dic->rpages = page_array_alloc(cc->inode, cc->cluster_size);
1479 if (!dic->rpages) {
1480 kmem_cache_free(dic_entry_slab, dic);
1484 dic->magic = F2FS_COMPRESSED_PAGE_MAGIC;
1485 dic->inode = cc->inode;
1486 atomic_set(&dic->pending_pages, cc->nr_cpages);
1487 dic->cluster_idx = cc->cluster_idx;
1488 dic->cluster_size = cc->cluster_size;
1489 dic->log_cluster_size = cc->log_cluster_size;
1490 dic->nr_cpages = cc->nr_cpages;
1491 dic->failed = false;
1493 for (i = 0; i < dic->cluster_size; i++)
1494 dic->rpages[i] = cc->rpages[i];
1495 dic->nr_rpages = cc->cluster_size;
1497 dic->cpages = page_array_alloc(dic->inode, dic->nr_cpages);
1498 if (!dic->cpages)
1501 for (i = 0; i < dic->nr_cpages; i++) {
1509 start_idx + i + 1, dic);
1510 dic->cpages[i] = page;
1513 return dic;
1516 f2fs_free_dic(dic);
1520 void f2fs_free_dic(struct decompress_io_ctx *dic)
1524 if (dic->tpages) {
1525 for (i = 0; i < dic->cluster_size; i++) {
1526 if (dic->rpages[i])
1528 if (!dic->tpages[i])
1530 f2fs_compress_free_page(dic->tpages[i]);
1532 page_array_free(dic->inode, dic->tpages, dic->cluster_size);
1535 if (dic->cpages) {
1536 for (i = 0; i < dic->nr_cpages; i++) {
1537 if (!dic->cpages[i])
1539 f2fs_compress_free_page(dic->cpages[i]);
1541 page_array_free(dic->inode, dic->cpages, dic->nr_cpages);
1544 page_array_free(dic->inode, dic->rpages, dic->nr_rpages);
1545 kmem_cache_free(dic_entry_slab, dic);