linux/drivers/md/dm-vdo/status-codes.h
Matthew Sakai 4fcb4290df dm vdo: add vdo type declarations, constants, and simple data structures
Add definitions of constants defining the fixed parameters of a VDO
volume, and the default and maximum values of configurable or dynamic
parameters.

Add definitions of internal status codes used for internal
communication within the module and for logging.

Add definitions of types and structs used to manage the processing of
an I/O operation.

Co-developed-by: J. corwin Coburn <corwin@hurlbutnet.net>
Signed-off-by: J. corwin Coburn <corwin@hurlbutnet.net>
Co-developed-by: Michael Sclafani <dm-devel@lists.linux.dev>
Signed-off-by: Michael Sclafani <dm-devel@lists.linux.dev>
Signed-off-by: Matthew Sakai <msakai@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
2024-02-20 13:43:13 -05:00

113 lines
3.1 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright 2023 Red Hat
*/
#ifndef VDO_STATUS_CODES_H
#define VDO_STATUS_CODES_H
#include "errors.h"
enum {
UDS_BLOCK_SIZE = UDS_ERROR_CODE_BLOCK_END - UDS_ERROR_CODE_BASE,
VDO_BLOCK_START = UDS_ERROR_CODE_BLOCK_END,
VDO_BLOCK_END = VDO_BLOCK_START + UDS_BLOCK_SIZE,
PRP_BLOCK_START = VDO_BLOCK_END,
PRP_BLOCK_END = PRP_BLOCK_START + UDS_BLOCK_SIZE,
};
/* VDO-specific status codes. */
enum vdo_status_codes {
/* successful result */
VDO_SUCCESS,
/* base of all VDO errors */
VDO_STATUS_CODE_BASE = VDO_BLOCK_START,
/* we haven't written this yet */
VDO_NOT_IMPLEMENTED = VDO_STATUS_CODE_BASE,
/* input out of range */
VDO_OUT_OF_RANGE,
/* an invalid reference count would result */
VDO_REF_COUNT_INVALID,
/* a free block could not be allocated */
VDO_NO_SPACE,
/* unexpected EOF on block read */
VDO_UNEXPECTED_EOF,
/* improper or missing configuration option */
VDO_BAD_CONFIGURATION,
/* socket opening or binding problem */
VDO_SOCKET_ERROR,
/* read or write on non-aligned offset */
VDO_BAD_ALIGNMENT,
/* prior operation still in progress */
VDO_COMPONENT_BUSY,
/* page contents incorrect or corrupt data */
VDO_BAD_PAGE,
/* unsupported version of some component */
VDO_UNSUPPORTED_VERSION,
/* component id mismatch in decoder */
VDO_INCORRECT_COMPONENT,
/* parameters have conflicting values */
VDO_PARAMETER_MISMATCH,
/* the block size is too small */
VDO_BLOCK_SIZE_TOO_SMALL,
/* no partition exists with a given id */
VDO_UNKNOWN_PARTITION,
/* a partition already exists with a given id */
VDO_PARTITION_EXISTS,
/* the VDO is not in read-only mode */
VDO_NOT_READ_ONLY,
/* physical block growth of too few blocks */
VDO_INCREMENT_TOO_SMALL,
/* incorrect checksum */
VDO_CHECKSUM_MISMATCH,
/* the recovery journal is full */
VDO_RECOVERY_JOURNAL_FULL,
/* a lock is held incorrectly */
VDO_LOCK_ERROR,
/* the VDO is in read-only mode */
VDO_READ_ONLY,
/* the VDO is shutting down */
VDO_SHUTTING_DOWN,
/* the recovery journal has corrupt entries */
VDO_CORRUPT_JOURNAL,
/* exceeds maximum number of slabs supported */
VDO_TOO_MANY_SLABS,
/* a compressed block fragment is invalid */
VDO_INVALID_FRAGMENT,
/* action is unsupported while rebuilding */
VDO_RETRY_AFTER_REBUILD,
/* the extended command is not known */
VDO_UNKNOWN_COMMAND,
/* bad extended command parameters */
VDO_COMMAND_ERROR,
/* cannot determine sizes to fit */
VDO_CANNOT_DETERMINE_SIZE,
/* a block map entry is invalid */
VDO_BAD_MAPPING,
/* read cache has no free slots */
VDO_READ_CACHE_BUSY,
/* bio_add_page failed */
VDO_BIO_CREATION_FAILED,
/* bad magic number */
VDO_BAD_MAGIC,
/* bad nonce */
VDO_BAD_NONCE,
/* sequence number overflow */
VDO_JOURNAL_OVERFLOW,
/* the VDO is not in a state to perform an admin operation */
VDO_INVALID_ADMIN_STATE,
/* failure adding a sysfs node */
VDO_CANT_ADD_SYSFS_NODE,
/* one more than last error code */
VDO_STATUS_CODE_LAST,
VDO_STATUS_CODE_BLOCK_END = VDO_BLOCK_END
};
extern const struct error_info vdo_status_list[];
int vdo_register_status_codes(void);
int vdo_map_to_system_error(int error);
#endif /* VDO_STATUS_CODES_H */