backend_lzo.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. #include <linux/kernel.h>
  3. #include <linux/slab.h>
  4. #include <linux/lzo.h>
  5. #include "backend_lzo.h"
  6. static void lzo_release_params(struct zcomp_params *params)
  7. {
  8. }
  9. static int lzo_setup_params(struct zcomp_params *params)
  10. {
  11. return 0;
  12. }
  13. static int lzo_create(struct zcomp_params *params, struct zcomp_ctx *ctx)
  14. {
  15. ctx->context = kzalloc(LZO1X_MEM_COMPRESS, GFP_KERNEL);
  16. if (!ctx->context)
  17. return -ENOMEM;
  18. return 0;
  19. }
  20. static void lzo_destroy(struct zcomp_ctx *ctx)
  21. {
  22. kfree(ctx->context);
  23. }
  24. static int lzo_compress(struct zcomp_params *params, struct zcomp_ctx *ctx,
  25. struct zcomp_req *req)
  26. {
  27. int ret;
  28. ret = lzo1x_1_compress(req->src, req->src_len, req->dst,
  29. &req->dst_len, ctx->context);
  30. return ret == LZO_E_OK ? 0 : ret;
  31. }
  32. static int lzo_decompress(struct zcomp_params *params, struct zcomp_ctx *ctx,
  33. struct zcomp_req *req)
  34. {
  35. int ret;
  36. ret = lzo1x_decompress_safe(req->src, req->src_len,
  37. req->dst, &req->dst_len);
  38. return ret == LZO_E_OK ? 0 : ret;
  39. }
  40. const struct zcomp_ops backend_lzo = {
  41. .compress = lzo_compress,
  42. .decompress = lzo_decompress,
  43. .create_ctx = lzo_create,
  44. .destroy_ctx = lzo_destroy,
  45. .setup_params = lzo_setup_params,
  46. .release_params = lzo_release_params,
  47. .name = "lzo",
  48. };