Motr  M0
di.c
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2013-2020 Seagate Technology LLC and/or its Affiliates
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * For any questions about this software or licensing,
18  * please email opensource@seagate.com or cortx-questions@seagate.com.
19  *
20  */
21 
22 
23 #include "file/di.c"
24 
25 #include "ut/ut.h"
26 #include "file/di.h"
27 #include "file/file.h"
28 
30 
31 enum {
32  BUFFER_SIZE = 4096,
33  SEGS_NR = 16,
34 };
35 
36 struct m0_file file;
40 struct m0_bufvec data;
41 void *di_data;
46 struct m0_fid fid;
47 
48 void file_di_init(void)
49 {
50  int rc;
51  int i;
52 
54  M0_ASSERT(rc == 0);
55  for (i = 0; i < data.ov_vec.v_nr; ++i)
56  memset(data.ov_buf[i], 'a' + i, BUFFER_SIZE);
57 
58  for (i = 0; i < data.ov_vec.v_nr; ++i) {
59  offsets[i] = i * size;
60  counts[i] = size;
61  }
62 
66 
71  M0_UT_ASSERT(rc == 0);
72  m0_fid_set(&fid, 1, 0);
74 
76 
81 }
82 
84 {
85  struct m0_bufvec cksum_data = M0_BUFVEC_INIT_BUF(&di_data, &size);
86 
87  file_checksum(&m0_crc32, &data, &io_vec, &di_param, &cksum_data);
89  &cksum_data));
90 }
91 
93 {
94  struct m0_bufvec cksum_data = M0_BUFVEC_INIT_BUF(&di_data, &size);
95 
97  t10_ref_tag_compute(&io_vec, &di_param, &cksum_data);
99 }
100 
101 void file_di_test(void)
102 {
103  struct m0_bufvec cksum_data = M0_BUFVEC_INIT_BUF(&di_data, &size);
104 
105  file.fi_di_ops->do_sum(&file, &io_vec, &data, &cksum_data);
106 
108  &cksum_data));
109 }
110 
112 {
113  struct m0_bufvec cksum_data = M0_BUFVEC_INIT_BUF(&di_data, &size);
114 
115  m0_file_fini(&file);
116  m0_fid_set(&fid, 1, 1);
118 
119  file.fi_di_ops->do_sum(&file, &io_vec, &data, &cksum_data);
120 
122  &cksum_data));
123 }
124 
125 void file_di_fini(void)
126 {
127  m0_file_fini(&file);
131  m0_free(di_data);
132 }
133 
134 struct m0_ut_suite di_ut = {
135  .ts_name = "di-ut",
136  .ts_tests = {
137  { "di-init", file_di_init},
138  { "di-cksum-test", file_checksum_test},
139  { "di-ref-tag-test", file_ref_tag_test},
140  { "di-test", file_di_test},
141  { "di-none-test", file_di_none_test},
142  { "di-fini", file_di_fini},
143  { NULL, NULL },
144  },
145 };
146 M0_EXPORTED(di_ut);
#define M0_BUFVEC_INIT_BUF(addr_ptr, count_ptr)
Definition: vec.h:165
uint32_t d_pos
Definition: di.c:41
Definition: di.c:33
#define NULL
Definition: misc.h:38
struct m0_file file
Definition: di.c:36
void file_di_none_test(void)
Definition: di.c:111
uint64_t(* do_out_shift)(const struct m0_file *file)
Definition: di.h:109
struct m0_vec ov_vec
Definition: vec.h:147
struct m0_bufvec data
Definition: di.c:40
void file_checksum_test(void)
Definition: di.c:83
Definition: di.c:32
uint64_t m0_bindex_t
Definition: types.h:80
M0_INTERNAL void m0_rm_domain_init(struct m0_rm_domain *dom)
Definition: rm.c:215
uint64_t m0_bcount_t
Definition: types.h:77
Definition: ut.h:77
void(* do_sum)(const struct m0_file *file, const struct m0_indexvec *io_info, const struct m0_bufvec *in, struct m0_bufvec *out)
Definition: di.h:122
Definition: di.c:38
void ** ov_buf
Definition: vec.h:149
struct m0_rm_domain res_dom
Definition: di.c:37
M0_INTERNAL bool m0_crc32_chk(const void *data, uint64_t len, const uint64_t *cksum)
Definition: crc.c:93
struct m0_fid fid
Definition: di.c:46
M0_INTERNAL int m0_bufvec_alloc(struct m0_bufvec *bufvec, uint32_t num_segs, m0_bcount_t seg_size)
Definition: vec.c:220
struct m0_vec iv_vec
Definition: vec.h:139
void file_di_test(void)
Definition: di.c:101
M0_INTERNAL void m0_bufvec_free(struct m0_bufvec *bufvec)
Definition: vec.c:395
m0_bindex_t * iv_index
Definition: vec.h:141
int i
Definition: dir.c:1033
M0_INTERNAL void m0_fid_set(struct m0_fid *fid, uint64_t container, uint64_t key)
Definition: fid.c:116
static void t10_ref_tag_compute(const struct m0_indexvec *io_info, struct di_info *di, struct m0_bufvec *di_vec)
Definition: di.c:321
struct m0_ut_suite di_ut
Definition: di.c:134
#define M0_ASSERT(cond)
M0_INTERNAL void m0_crc32(const void *data, uint64_t len, uint64_t *cksum)
Definition: crc.c:83
void file_di_init(void)
Definition: di.c:48
void * m0_alloc(size_t size)
Definition: memory.c:126
static void file_di_info_setup(const struct m0_file *file, const struct m0_indexvec *io_info, struct di_info *di)
Definition: di.c:182
m0_bcount_t counts[SEGS_NR]
Definition: di.c:44
uint32_t v_nr
Definition: vec.h:51
m0_bindex_t offsets[SEGS_NR]
Definition: di.c:43
m0_bcount_t * v_count
Definition: vec.h:53
struct m0_indexvec io_vec
Definition: di.c:42
static bool t10_ref_tag_check(const struct m0_indexvec *io_info, struct di_info *di, const struct m0_bufvec *di_vec)
Definition: di.c:339
const char * ts_name
Definition: ut.h:99
bool(* do_check)(const struct m0_file *file, const struct m0_indexvec *io_info, const struct m0_bufvec *in, const struct m0_bufvec *out)
Definition: di.h:131
void * di_data
Definition: di.c:41
Definition: fid.h:38
struct di_info di_param
Definition: di.c:45
static bool file_checksum_check(bool(*checksum)(const void *data, m0_bcount_t bsize, const uint64_t *csum), const struct m0_bufvec *in_vec, const struct m0_indexvec *io_info, struct di_info *di, const struct m0_bufvec *di_vec)
Definition: di.c:290
m0_bcount_t size
Definition: di.c:39
const struct m0_rm_resource_type_ops * rt_ops
Definition: rm.h:388
M0_INTERNAL int m0_rm_type_register(struct m0_rm_domain *dom, struct m0_rm_resource_type *rt)
Definition: rm.c:252
M0_INTERNAL void m0_file_fini(struct m0_file *file)
Definition: file.c:498
Definition: file.h:81
Definition: di.h:73
M0_INTERNAL void m0_rm_type_deregister(struct m0_rm_resource_type *rt)
Definition: rm.c:288
void m0_free(void *data)
Definition: memory.c:146
static void file_checksum(void(*checksum)(const void *data, m0_bcount_t bsize, uint64_t *csum), const struct m0_bufvec *in_vec, const struct m0_indexvec *io_info, struct di_info *di, struct m0_bufvec *di_vec)
Definition: di.c:227
const struct m0_rm_resource_type_ops file_lock_type_ops
Definition: file.c:188
void file_di_fini(void)
Definition: di.c:125
struct m0_rm_resource_type res_type
Definition: di.c:38
int32_t rc
Definition: trigger_fop.h:47
uint64_t rt_id
Definition: rm.h:403
M0_INTERNAL void m0_rm_domain_fini(struct m0_rm_domain *dom)
Definition: rm.c:227
#define M0_UT_ASSERT(a)
Definition: ut.h:46
const struct m0_di_ops * fi_di_ops
Definition: file.h:92
Definition: vec.h:145
M0_INTERNAL void m0_file_init(struct m0_file *file, const struct m0_fid *fid, struct m0_rm_domain *dom, enum m0_di_types di_type)
Definition: file.c:477
void file_ref_tag_test(void)
Definition: di.c:92