Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright (C) 2018 Intel Corporation.
3 : : * All rights reserved.
4 : : */
5 : :
6 : : #include "spdk/stdinc.h"
7 : : #include "spdk/log.h"
8 : :
9 : : #include "utils.h"
10 : : #include "vbdev_ocf.h"
11 : :
12 : : static char *cache_modes[ocf_cache_mode_max] = {
13 : : [ocf_cache_mode_wt] = "wt",
14 : : [ocf_cache_mode_wb] = "wb",
15 : : [ocf_cache_mode_wa] = "wa",
16 : : [ocf_cache_mode_pt] = "pt",
17 : : [ocf_cache_mode_wi] = "wi",
18 : : [ocf_cache_mode_wo] = "wo",
19 : : };
20 : :
21 : : static char *seqcutoff_policies[ocf_seq_cutoff_policy_max] = {
22 : : [ocf_seq_cutoff_policy_always] = "always",
23 : : [ocf_seq_cutoff_policy_full] = "full",
24 : : [ocf_seq_cutoff_policy_never] = "never",
25 : : };
26 : :
27 : : ocf_cache_mode_t
28 : 36 : ocf_get_cache_mode(const char *cache_mode)
29 : : {
30 : 0 : int i;
31 : :
32 [ + - # # ]: 66 : for (i = 0; i < ocf_cache_mode_max; i++) {
33 [ - + - + : 66 : if (strcmp(cache_mode, cache_modes[i]) == 0) {
+ + # # #
# # # ]
34 : 36 : return i;
35 : : }
36 : 0 : }
37 : :
38 : 0 : return ocf_cache_mode_none;
39 : 0 : }
40 : :
41 : : const char *
42 : 29 : ocf_get_cache_modename(ocf_cache_mode_t mode)
43 : : {
44 [ + - + - ]: 29 : if (mode > ocf_cache_mode_none && mode < ocf_cache_mode_max) {
45 [ # # # # : 29 : return cache_modes[mode];
# # ]
46 : : } else {
47 : 0 : return NULL;
48 : : }
49 : 0 : }
50 : :
51 : : int
52 : 23 : ocf_get_cache_line_size(ocf_cache_t cache)
53 : : {
54 [ # # # # ]: 23 : return ocf_cache_get_line_size(cache) / KiB;
55 : : }
56 : :
57 : : ocf_seq_cutoff_policy
58 : 2 : ocf_get_seqcutoff_policy(const char *policy_name)
59 : : {
60 : 0 : int policy;
61 : :
62 [ + - # # ]: 4 : for (policy = 0; policy < ocf_seq_cutoff_policy_max; policy++)
63 [ - + - + : 4 : if (!strcmp(policy_name, seqcutoff_policies[policy])) {
+ + # # #
# # # ]
64 : 2 : return policy;
65 : : }
66 : :
67 : 0 : return ocf_seq_cutoff_policy_max;
68 : 0 : }
69 : :
70 : : int
71 : 50 : vbdev_ocf_mngt_start(struct vbdev_ocf *vbdev, vbdev_ocf_mngt_fn *path,
72 : : vbdev_ocf_mngt_callback cb, void *cb_arg)
73 : : {
74 [ - + # # : 50 : if (vbdev->mngt_ctx.current_step) {
# # # # ]
75 : 0 : return -EBUSY;
76 : : }
77 : :
78 [ - + # # ]: 50 : memset(&vbdev->mngt_ctx, 0, sizeof(vbdev->mngt_ctx));
79 : :
80 [ # # # # : 50 : vbdev->mngt_ctx.current_step = path;
# # ]
81 [ # # # # : 50 : vbdev->mngt_ctx.cb = cb;
# # ]
82 [ # # # # : 50 : vbdev->mngt_ctx.cb_arg = cb_arg;
# # ]
83 : :
84 [ # # # # : 50 : (*vbdev->mngt_ctx.current_step)(vbdev);
# # # # #
# # # ]
85 : :
86 : 50 : return 0;
87 : 0 : }
88 : :
89 : : void
90 : 50 : vbdev_ocf_mngt_stop(struct vbdev_ocf *vbdev, vbdev_ocf_mngt_fn *rollback_path, int status)
91 : : {
92 [ - + ]: 50 : if (status) {
93 [ # # # # : 0 : vbdev->mngt_ctx.status = status;
# # ]
94 : 0 : }
95 : :
96 [ - + - - : 50 : if (vbdev->mngt_ctx.status && rollback_path) {
# # # # #
# ]
97 [ # # # # : 0 : vbdev->mngt_ctx.poller_fn = NULL;
# # ]
98 [ # # # # : 0 : vbdev->mngt_ctx.current_step = rollback_path;
# # ]
99 [ # # # # : 0 : (*vbdev->mngt_ctx.current_step)(vbdev);
# # # # #
# # # ]
100 : 0 : return;
101 : : }
102 : :
103 [ + + # # : 50 : if (vbdev->mngt_ctx.cb) {
# # # # ]
104 [ # # # # : 25 : vbdev->mngt_ctx.cb(vbdev->mngt_ctx.status, vbdev, vbdev->mngt_ctx.cb_arg);
# # # # #
# # # # #
# # # # #
# # # ]
105 : 0 : }
106 : :
107 [ - + # # ]: 50 : memset(&vbdev->mngt_ctx, 0, sizeof(vbdev->mngt_ctx));
108 : 0 : }
109 : :
110 : : void
111 : 260 : vbdev_ocf_mngt_continue(struct vbdev_ocf *vbdev, int status)
112 : : {
113 [ + + # # : 260 : if (vbdev->mngt_ctx.current_step == NULL) {
# # # # ]
114 : 10 : return;
115 : : }
116 : :
117 [ - + # # : 250 : assert((*vbdev->mngt_ctx.current_step) != NULL);
# # # # #
# # # ]
118 : :
119 [ # # # # : 250 : vbdev->mngt_ctx.status = status;
# # ]
120 : :
121 [ # # # # : 250 : vbdev->mngt_ctx.current_step++;
# # ]
122 [ + + # # : 250 : if (*vbdev->mngt_ctx.current_step) {
# # # # #
# ]
123 [ # # # # : 200 : (*vbdev->mngt_ctx.current_step)(vbdev);
# # # # #
# # # ]
124 : 200 : return;
125 : : }
126 : :
127 : 50 : vbdev_ocf_mngt_stop(vbdev, NULL, 0);
128 : 0 : }
129 : :
130 : : int
131 : 0 : vbdev_ocf_mngt_get_status(struct vbdev_ocf *vbdev)
132 : : {
133 [ # # # # : 0 : return vbdev->mngt_ctx.status;
# # ]
134 : : }
|