summaryrefslogtreecommitdiffstats
path: root/drivers/md/dm-vdo/status-codes.h
blob: c5da37ec8b55b3be47ffaf49e2edd7a500de1769 (plain)
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
/* 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 */