root/drivers/md/dm-vdo/status-codes.h
/* 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_ERRORS_BLOCK_SIZE = UDS_ERROR_CODE_BLOCK_END - UDS_ERROR_CODE_BASE,
        VDO_ERRORS_BLOCK_START = UDS_ERROR_CODE_BLOCK_END,
        VDO_ERRORS_BLOCK_END = VDO_ERRORS_BLOCK_START + UDS_ERRORS_BLOCK_SIZE,
};

/* VDO-specific status codes. */
enum vdo_status_codes {
        /* base of all VDO errors */
        VDO_STATUS_CODE_BASE = VDO_ERRORS_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,
        /* improper or missing configuration option */
        VDO_BAD_CONFIGURATION,
        /* 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,
        /* no partition exists with a given id */
        VDO_UNKNOWN_PARTITION,
        /* a partition already exists with a given id */
        VDO_PARTITION_EXISTS,
        /* physical block growth of too few blocks */
        VDO_INCREMENT_TOO_SMALL,
        /* incorrect checksum */
        VDO_CHECKSUM_MISMATCH,
        /* 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 or corrupt metadata */
        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,
        /* a block map entry is invalid */
        VDO_BAD_MAPPING,
        /* 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,
        /* one more than last error code */
        VDO_STATUS_CODE_LAST,
        VDO_STATUS_CODE_BLOCK_END = VDO_ERRORS_BLOCK_END
};

extern const struct error_info vdo_status_list[];

int vdo_register_status_codes(void);

int vdo_status_to_errno(int error);

#endif /* VDO_STATUS_CODES_H */