1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
/*
* Copyright (C) 2018 Red Hat, Inc. All rights reserved.
*
* This file is part of the device-mapper userspace tools.
*
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU Lesser General Public License v.2.1.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef DEVICE_MAPPER_VDO_TARGET_H
#define DEVICE_MAPPER_VDO_TARGET_H
#include <stdbool.h>
#include <stdint.h>
//----------------------------------------------------------------
enum dm_vdo_operating_mode {
DM_VDO_MODE_RECOVERING,
DM_VDO_MODE_READ_ONLY,
DM_VDO_MODE_NORMAL
};
enum dm_vdo_compression_state {
DM_VDO_COMPRESSION_ONLINE,
DM_VDO_COMPRESSION_OFFLINE
};
enum dm_vdo_index_state {
DM_VDO_INDEX_ERROR,
DM_VDO_INDEX_CLOSED,
DM_VDO_INDEX_OPENING,
DM_VDO_INDEX_CLOSING,
DM_VDO_INDEX_OFFLINE,
DM_VDO_INDEX_ONLINE,
DM_VDO_INDEX_UNKNOWN
};
struct dm_vdo_status {
char *device;
enum dm_vdo_operating_mode operating_mode;
bool recovering;
enum dm_vdo_index_state index_state;
enum dm_vdo_compression_state compression_state;
uint64_t used_blocks;
uint64_t total_blocks;
};
void dm_vdo_status_destroy(struct dm_vdo_status *s);
#define VDO_MAX_ERROR 256
struct dm_vdo_status_parse_result {
char error[VDO_MAX_ERROR];
struct dm_vdo_status *status;
};
struct dm_pool;
// Parses the status line from the kernel target.
bool dm_vdo_status_parse(struct dm_pool *mem, const char *input,
struct dm_vdo_status_parse_result *result);
enum dm_vdo_write_policy {
DM_VDO_WRITE_POLICY_AUTO = 0,
DM_VDO_WRITE_POLICY_SYNC,
DM_VDO_WRITE_POLICY_ASYNC,
DM_VDO_WRITE_POLICY_ASYNC_UNSAFE
};
// FIXME: review whether we should use the createParams from the userlib
struct dm_vdo_target_params {
uint32_t minimum_io_size; // in sectors
uint32_t block_map_cache_size_mb;
union {
uint32_t block_map_era_length; // format period
uint32_t block_map_period; // supported alias
};
uint32_t index_memory_size_mb; // format
uint32_t slab_size_mb; // format
uint32_t max_discard;
// threads
uint32_t ack_threads;
uint32_t bio_threads;
uint32_t bio_rotation;
uint32_t cpu_threads;
uint32_t hash_zone_threads;
uint32_t logical_threads;
uint32_t physical_threads;
bool use_compression;
bool use_deduplication;
bool use_metadata_hints;
bool use_sparse_index; // format
// write policy
enum dm_vdo_write_policy write_policy;
};
bool dm_vdo_validate_target_params(const struct dm_vdo_target_params *vtp,
uint64_t vdo_size);
bool dm_vdo_parse_logical_size(const char *vdo_path, uint64_t *logical_blocks);
//----------------------------------------------------------------
#endif
|