1488570ebSJim Harris /* SPDX-License-Identifier: BSD-3-Clause 2a6dbe372Spaul luse * Copyright (C) 2018 Intel Corporation. 307fe6a43SSeth Howell * All rights reserved. 46479ddb3SAlexey Marchuk * Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 507fe6a43SSeth Howell */ 607fe6a43SSeth Howell 707fe6a43SSeth Howell #ifndef SPDK_VBDEV_COMPRESS_H 807fe6a43SSeth Howell #define SPDK_VBDEV_COMPRESS_H 907fe6a43SSeth Howell 1007fe6a43SSeth Howell #include "spdk/stdinc.h" 1107fe6a43SSeth Howell 1207fe6a43SSeth Howell #include "spdk/bdev.h" 1307fe6a43SSeth Howell 1462b3b171Spaul luse #define LB_SIZE_4K 0x1000UL 1562b3b171Spaul luse #define LB_SIZE_512B 0x200UL 1662b3b171Spaul luse 17f3cda926SYankun Li typedef void (*bdev_compress_create_cb)(void *ctx, int status); 18f3cda926SYankun Li 1907fe6a43SSeth Howell /** 2007fe6a43SSeth Howell * Get the first compression bdev. 2107fe6a43SSeth Howell * 2207fe6a43SSeth Howell * \return the first compression bdev. 2307fe6a43SSeth Howell */ 2407fe6a43SSeth Howell struct vbdev_compress *compress_bdev_first(void); 2507fe6a43SSeth Howell 2607fe6a43SSeth Howell /** 2707fe6a43SSeth Howell * Get the next compression bdev. 2807fe6a43SSeth Howell * 2907fe6a43SSeth Howell * \param prev previous compression bdev. 3007fe6a43SSeth Howell * \return the next compression bdev. 3107fe6a43SSeth Howell */ 3207fe6a43SSeth Howell struct vbdev_compress *compress_bdev_next(struct vbdev_compress *prev); 3307fe6a43SSeth Howell 3407fe6a43SSeth Howell /** 3507fe6a43SSeth Howell * Test to see if a compression bdev orphan exists. 3607fe6a43SSeth Howell * 3707fe6a43SSeth Howell * \param name The name of the compression bdev. 3807fe6a43SSeth Howell * \return true if found, false if not. 3907fe6a43SSeth Howell */ 4007fe6a43SSeth Howell bool compress_has_orphan(const char *name); 4107fe6a43SSeth Howell 4207fe6a43SSeth Howell /** 4307fe6a43SSeth Howell * Get the name of a compression bdev. 4407fe6a43SSeth Howell * 4507fe6a43SSeth Howell * \param comp_bdev The compression bdev. 4607fe6a43SSeth Howell * \return the name of the compression bdev. 4707fe6a43SSeth Howell */ 4807fe6a43SSeth Howell const char *compress_get_name(const struct vbdev_compress *comp_bdev); 4907fe6a43SSeth Howell 5007fe6a43SSeth Howell typedef void (*spdk_delete_compress_complete)(void *cb_arg, int bdeverrno); 5107fe6a43SSeth Howell 5207fe6a43SSeth Howell /** 5307fe6a43SSeth Howell * Create new compression bdev. 5407fe6a43SSeth Howell * 5507fe6a43SSeth Howell * \param bdev_name Bdev on which compression bdev will be created. 5607fe6a43SSeth Howell * \param pm_path Path to persistent memory. 5762b3b171Spaul luse * \param lb_size Logical block size for the compressed volume in bytes. Must be 4K or 512. 58*ddd4603cSYankun Li * \param comp_algo compression algorithm for the compressed volume. 59*ddd4603cSYankun Li * \param comp_level compression algorithm level for the compressed volume. 60f3cda926SYankun Li * \param cb_fn Function to call after creation. 61f3cda926SYankun Li * \param cb_arg Argument to pass to cb_fn. 6207fe6a43SSeth Howell * \return 0 on success, other on failure. 6307fe6a43SSeth Howell */ 64f3cda926SYankun Li int create_compress_bdev(const char *bdev_name, const char *pm_path, uint32_t lb_size, 65*ddd4603cSYankun Li uint8_t comp_algo, uint32_t comp_level, 66f3cda926SYankun Li bdev_compress_create_cb cb_fn, void *cb_arg); 6707fe6a43SSeth Howell 6807fe6a43SSeth Howell /** 6907fe6a43SSeth Howell * Delete compress bdev. 7007fe6a43SSeth Howell * 7107fe6a43SSeth Howell * \param bdev_name Bdev on which compression bdev will be deleted. 7207fe6a43SSeth Howell * \param cb_fn Function to call after deletion. 7307fe6a43SSeth Howell * \param cb_arg Argument to pass to cb_fn. 7407fe6a43SSeth Howell */ 7507fe6a43SSeth Howell void bdev_compress_delete(const char *bdev_name, spdk_delete_compress_complete cb_fn, 7607fe6a43SSeth Howell void *cb_arg); 7707fe6a43SSeth Howell 7807fe6a43SSeth Howell #endif /* SPDK_VBDEV_COMPRESS_H */ 79