Motr  M0
tx_group_format.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 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_BE
24 #include "lib/trace.h"
25 
26 #include "be/tx_group_format.h"
27 #include "be/log.h"
28 #include "be/tx_regmap.h" /* m0_be_reg_area_used */
29 #include "be/tx_internal.h" /* m0_be_tx__reg_area */
30 #include "be/engine.h" /* m0_be_engine__reg_area_tagged_remove */
31 #include "be/pd.h" /* m0_be_pd_io */
32 #include "be/log_discard.h" /* m0_be_log_discard_item */
33 #include "be/domain.h" /* m0_be_domain_log */
34 #include "lib/memory.h" /* m0_alloc */
35 #include "lib/misc.h" /* M0_SET0 */
36 #include "lib/errno.h" /* ENOMEM */
37 
38 #include "module/instance.h" /* m0_get */
39 
46 #define gft_fmt_group_choose(gft) (gft->gft_fmt_group_decoded != NULL ? \
47  gft->gft_fmt_group_decoded : \
48  &gft->gft_fmt_group)
49 
50 enum {
53 };
54 
55 static struct m0_be_group_format *
57 {
58  /* XXX bob_of */
59  return container_of(module, struct m0_be_group_format, gft_module);
60 }
61 
62 static int be_group_format_level_enter(struct m0_module *module)
63 {
64  struct m0_be_group_format *gft = be_group_format_module2gft(module);
65  m0_bcount_t size_group;
66  m0_bcount_t size_cblock;
67  int level = module->m_cur + 1;
68 
69  M0_LOG(M0_DEBUG, "gft=%p level=%d", gft, level);
70 
71  switch (level) {
73  gft->gft_log = gft->gft_cfg.gfc_log;
76  return 0;
81  return 0;
84  &gft->gft_cfg.gfc_fmt_cfg);
86  return m0_be_fmt_cblock_init(&gft->gft_fmt_cblock, NULL);
89  return 0;
91  size_group = m0_be_fmt_group_size_max(&gft->gft_cfg.gfc_fmt_cfg);
93  size_group);
95  size_cblock = m0_be_fmt_cblock_size_max(NULL);
97  size_cblock);
101  return 0;
105  return 0;
106  default:
107  return M0_ERR(-ENOSYS);
108  }
109 }
110 
111 static void be_group_format_level_leave(struct m0_module *module)
112 {
113  struct m0_be_group_format *gft = be_group_format_module2gft(module);
114  int level = module->m_cur;
115 
116  M0_LOG(M0_DEBUG, "gft=%p level=%d", gft, level);
117 
118  switch (level) {
120  break;
122  m0_be_op_fini(&gft->gft_all_get);
125  break;
128  break;
130  m0_be_fmt_cblock_fini(&gft->gft_fmt_cblock);
131  break;
134  break;
136  break;
138  break;
141  break;
143  break;
146  break;
148  if (gft->gft_fmt_group_decoded != NULL) {
150  }
151  if (gft->gft_fmt_cblock_decoded != NULL) {
152  m0_be_fmt_cblock_decoded_free(
154  }
155  if (gft->gft_pd_io != NULL)
157  break;
158  default:
159  M0_IMPOSSIBLE("Unexpected m0_module level");
160  }
161 }
162 
163 M0_INTERNAL void m0_be_group_format_reset(struct m0_be_group_format *gft)
164 {
166  m0_be_fmt_cblock_reset(&gft->gft_fmt_cblock);
168  if (gft->gft_pd_io != NULL) {
170  gft->gft_pd_io = NULL;
171  }
175 
176  if (gft->gft_fmt_group_decoded != NULL) {
177  m0_time_t time = m0_time_now();
179  M0_LOG(M0_DEBUG, "time=%"PRId64,
180  (unsigned long)m0_time_now() - time);
182  }
183  if (gft->gft_fmt_cblock_decoded != NULL) {
184  m0_be_fmt_cblock_decoded_free(
187  }
188 }
189 
190 static const struct m0_modlev be_group_format_levels[] = {
192  .ml_name = "M0_BE_GROUP_FORMAT_LEVEL_ASSIGNS",
193  .ml_enter = be_group_format_level_enter,
194  .ml_leave = be_group_format_level_leave,
195  },
197  .ml_name = "M0_BE_GROUP_FORMAT_LEVEL_OP_INIT",
198  .ml_enter = be_group_format_level_enter,
199  .ml_leave = be_group_format_level_leave,
200  },
202  .ml_name = "M0_BE_GROUP_FORMAT_LEVEL_FMT_GROUP_INIT",
203  .ml_enter = be_group_format_level_enter,
204  .ml_leave = be_group_format_level_leave,
205  },
207  .ml_name = "M0_BE_GROUP_FORMAT_LEVEL_FMT_CBLOCK_INIT",
208  .ml_enter = be_group_format_level_enter,
209  .ml_leave = be_group_format_level_leave,
210  },
212  .ml_name = "M0_BE_GROUP_FORMAT_LEVEL_LOG_RECORD_INIT",
213  .ml_enter = be_group_format_level_enter,
214  .ml_leave = be_group_format_level_leave,
215  },
217  .ml_name = "M0_BE_GROUP_FORMAT_LEVEL_LOG_RECORD_IO_CREATE_GROUP",
218  .ml_enter = be_group_format_level_enter,
219  .ml_leave = be_group_format_level_leave,
220  },
222  .ml_name = "M0_BE_GROUP_FORMAT_LEVEL_LOG_RECORD_IO_CREATE_CBLOCK",
223  .ml_enter = be_group_format_level_enter,
224  .ml_leave = be_group_format_level_leave,
225  },
227  .ml_name = "M0_BE_GROUP_FORMAT_LEVEL_LOG_RECORD_ITER_INIT",
228  .ml_enter = be_group_format_level_enter,
229  .ml_leave = be_group_format_level_leave,
230  },
232  .ml_name = "M0_BE_GROUP_FORMAT_LEVEL_INITED",
233  .ml_enter = be_group_format_level_enter,
234  .ml_leave = be_group_format_level_leave,
235  },
237  .ml_name = "M0_BE_GROUP_FORMAT_LEVEL_LOG_RECORD_ALLOCATE",
238  .ml_enter = be_group_format_level_enter,
239  .ml_leave = be_group_format_level_leave,
240  },
242  .ml_name = "M0_BE_GROUP_FORMAT_LEVEL_ALLOCATED",
243  .ml_enter = be_group_format_level_enter,
244  .ml_leave = be_group_format_level_leave,
245  },
246 };
247 
248 M0_INTERNAL void
250  struct m0_be_group_format_cfg *gft_cfg)
251 {
252  gft->gft_cfg = *gft_cfg;
253  m0_module_setup(&gft->gft_module, "m0_be_group_format",
256  m0_get());
257 }
258 
260  bool deallocate)
261 {
263  deallocate ? M0_BE_GROUP_FORMAT_LEVEL_INITED :
265 }
266 
268  struct m0_be_group_format_cfg *gft_cfg,
269  bool allocate)
270 {
271  int rc;
272 
273  if (!allocate)
274  m0_be_group_format_module_setup(gft, gft_cfg);
275  rc = m0_module_init(&gft->gft_module,
278  if (rc != 0)
279  be_group_format_module_fini(gft, allocate);
280  return rc;
281 }
282 
283 M0_INTERNAL int m0_be_group_format_init(struct m0_be_group_format *gft,
284  struct m0_be_group_format_cfg *gft_cfg,
285  struct m0_be_tx_group *group,
286  struct m0_be_log *log)
287 {
288  gft_cfg->gfc_log = log;
289  return be_group_format_module_init(gft, gft_cfg, false);
290 }
291 
292 M0_INTERNAL void m0_be_group_format_fini(struct m0_be_group_format *gft)
293 {
294  be_group_format_module_fini(gft, false);
295 }
296 
298 {
299  return true; /* XXX TODO */
300 }
301 
303 {
304  return be_group_format_module_init(gft, NULL, true);
305 }
306 
308 {
309  be_group_format_module_fini(gft, true);
310 }
311 
312 M0_INTERNAL void m0_be_group_format_prepare(struct m0_be_group_format *gft,
313  struct m0_be_op *op)
314 {
320  &gft->gft_log_discard_get,
321  &gft->gft_log_discard_item);
323  &gft->gft_pd_io_get);
324  m0_be_op_done(&gft->gft_all_get);
325 }
326 
327 M0_INTERNAL void m0_be_group_format_encode(struct m0_be_group_format *gft)
328 {
329  struct m0_bufvec_cursor cur;
330  struct m0_bufvec *bvec;
331  int rc;
332 
336  M0_ASSERT_INFO(rc == 0, "due to preallocated buffers "
337  "encode can't fail here: rc = %d", rc);
340  rc = m0_be_fmt_cblock_encode(&gft->gft_fmt_cblock, &cur);
341  M0_ASSERT_INFO(rc == 0, "due to preallocated buffers "
342  "encode can't fail here: rc = %d", rc);
343 }
344 
345 M0_INTERNAL int m0_be_group_format_decode(struct m0_be_group_format *gft)
346 {
347  struct m0_bufvec_cursor cur;
348  struct m0_bufvec *bvec;
349  int rc;
350 
353 
358 
361  rc = rc ?: m0_be_fmt_cblock_decode(&gft->gft_fmt_cblock_decoded,
363  return rc;
364 }
365 
367  const struct m0_be_reg_d *rd)
368 {
369  struct m0_be_fmt_reg freg;
370 
371  freg = M0_BE_FMT_REG(rd->rd_reg.br_size, rd->rd_reg.br_addr,
372  rd->rd_buf);
374 }
375 
377  const struct m0_be_reg_d *rd)
378 {
380  rd->rd_reg.br_seg->bs_stob, rd->rd_buf,
382 }
383 
384 M0_INTERNAL uint32_t
386 {
388 }
389 
390 M0_INTERNAL void
392  uint32_t index,
393  struct m0_be_reg_d *rd)
394 {
395  struct m0_be_fmt_reg freg;
396 
398 
400  /*
401  * XXX currently segment field in region is always NULL
402  * after group reconstruct. It may be changed in the future.
403  */
404  *rd = M0_BE_REG_D(M0_BE_REG(NULL, freg.fr_size, freg.fr_addr),
405  freg.fr_buf);
406 }
407 
408 M0_INTERNAL void m0_be_group_format_tx_add(struct m0_be_group_format *gft,
409  struct m0_be_fmt_tx *ftx)
410 {
412 }
413 
414 M0_INTERNAL uint32_t
416 {
418 }
419 
420 M0_INTERNAL void
422  uint32_t index,
423  struct m0_be_fmt_tx *ftx)
424 {
426 
428 }
429 
430 M0_INTERNAL struct m0_be_fmt_group_info *
432 {
434 }
435 
436 M0_INTERNAL m0_bcount_t
438  struct m0_be_tx_credit *cred,
439  m0_bcount_t cred_payload)
440 {
441  m0_bcount_t lio_size[2];
442  struct m0_be_fmt_group_cfg cfg = {
443  .fgc_tx_nr_max = 1,
444  .fgc_reg_nr_max = cred->tc_reg_nr,
445  .fgc_payload_size_max = cred_payload,
446  .fgc_reg_size_max = cred->tc_reg_size,
447  };
448 
449  lio_size[0] = m0_be_fmt_group_size_max(&cfg);
450  lio_size[1] = m0_be_fmt_cblock_size_max(NULL);
451  return m0_be_log_reserved_size(log, lio_size, 2);
452 }
453 
454 M0_INTERNAL m0_bindex_t
456 {
458 }
459 
460 M0_INTERNAL m0_bindex_t
462 {
464 }
465 
466 M0_INTERNAL void
468  m0_bcount_t size_reserved)
469 {
470  struct m0_be_log_record *record = &gft->gft_log_record;
471  m0_bcount_t size_group;
472  m0_bcount_t size_cblock;
473 
474  size_group = m0_be_fmt_group_size(&gft->gft_fmt_group);
475  size_cblock = m0_be_fmt_cblock_size(&gft->gft_fmt_cblock);
476 
477  M0_LOG(M0_DEBUG, "size_reserved=%" PRId64 " size_group=%" PRId64 " "
478  "size_cblock=%"PRId64,
479  size_reserved, size_group, size_cblock);
480 
484 }
485 
486 M0_INTERNAL void
488  struct m0_be_log *log)
489 {
490  struct m0_be_log_record *record = &gft->gft_log_record;
491 
495 }
496 
498  struct m0_be_op *op)
499 {
500  /* XXX @pre SIO_WRITE is set */
502 }
503 
504 M0_INTERNAL void m0_be_group_format_log_read(struct m0_be_group_format *gft,
505  struct m0_be_op *op)
506 {
508 }
509 
510 M0_INTERNAL void
512 {
513  /*
514  * Regions are added to m0_be_io for seg I/O in
515  * m0_be_group_format_reg_seg_add().
516  */
520  &gft->gft_ext);
522  gft->gft_cfg.gfc_log);
523 }
524 
526 {
527  struct m0_be_group_format *tgf = param;
528 
530  tgf->gft_log_discard_item);
531 }
532 
534 {
535  struct m0_be_group_format *tgf = param;
536 
538  tgf->gft_log_discard_item);
539 }
540 
542 {
543  struct m0_be_group_format *gft = param;
544 
545  m0_be_op_done(&gft->gft_tmp_op);
546  m0_be_op_fini(&gft->gft_tmp_op);
547  m0_be_op_fini(op);
548 }
549 
550 M0_INTERNAL void m0_be_group_format_discard(struct m0_be_log_discard *ld,
551  struct m0_be_log_discard_item *ldi)
552 {
553  struct m0_be_log *log;
554  struct m0_ext *ext;
555 
557  ext = m0_be_log_discard_item_ext(ldi);
558 
559  M0_LOG(M0_DEBUG, "log=%p ldi=%p ext="EXT_F, log, ldi, EXT_P(ext));
560 
561  m0_mutex_lock(log->lg_cfg.lc_lock); /* XXX */
562  m0_be_log_record_discard(log, ext->e_end - ext->e_start);
563  m0_mutex_unlock(log->lg_cfg.lc_lock); /* XXX */
564 }
565 
567  struct m0_be_op *op)
568 {
569  struct m0_be_op *gft_op;
570 
571  gft_op = &gft->gft_pd_io_op;
572  M0_SET0(gft_op);
573  m0_be_op_init(gft_op);
574  M0_SET0(&gft->gft_tmp_op);
575  m0_be_op_init(&gft->gft_tmp_op);
576  m0_be_op_set_add(op, gft_op);
580  gft, M0_BOS_ACTIVE);
582  gft, M0_BOS_DONE);
584  gft, M0_BOS_GC);
585  M0_LOG(M0_DEBUG, "seg_place ldi=%p", gft->gft_log_discard_item);
586  m0_be_pd_io_add(gft->gft_cfg.gfc_pd, gft->gft_pd_io, &gft->gft_ext,
587  gft_op);
588 }
589 
590 M0_INTERNAL void
592  struct m0_be_io_credit *io_cred)
593 {
594  struct m0_be_fmt_group_cfg *fmt_cfg = &gft_cfg->gfc_fmt_cfg;
595 
596  *io_cred = M0_BE_IO_CREDIT(fmt_cfg->fgc_reg_nr_max,
597  fmt_cfg->fgc_reg_size_max,
598  fmt_cfg->fgc_seg_nr_max);
599 }
600 
602 #undef M0_TRACE_SUBSYSTEM
603 
604 /*
605  * Local variables:
606  * c-indentation-style: "K&R"
607  * c-basic-offset: 8
608  * tab-width: 8
609  * fill-column: 80
610  * scroll-step: 1
611  * End:
612  */
613 /*
614  * vim: tabstop=8 shiftwidth=8 noexpandtab textwidth=80 nowrap
615  */
M0_INTERNAL void m0_be_log_discard_item_finished(struct m0_be_log_discard *ld, struct m0_be_log_discard_item *ldi)
Definition: log_discard.c:417
M0_INTERNAL void m0_be_log_record_io_size_set(struct m0_be_log_record *record, int index, m0_bcount_t size)
Definition: log.c:636
struct m0_be_log_record gft_log_record
M0_INTERNAL struct m0_bufvec * m0_be_log_record_io_bufvec(struct m0_be_log_record *record, int index)
Definition: log.c:830
M0_INTERNAL uint32_t m0_be_fmt_group_reg_nr(const struct m0_be_fmt_group *fg)
Definition: fmt.c:392
#define M0_PRE(cond)
struct m0_be_group_format_cfg gft_cfg
M0_INTERNAL void m0_be_group_format_prepare(struct m0_be_group_format *gft, struct m0_be_op *op)
#define M0_BE_FMT_DECODE_CFG_DEFAULT
Definition: fmt.h:291
struct m0_be_fmt_cblock gft_fmt_cblock
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
Definition: mutex.c:66
M0_INTERNAL void m0_be_group_format_log_read(struct m0_be_group_format *gft, struct m0_be_op *op)
struct m0_be_log_record_iter gft_log_record_iter
m0_bindex_t e_end
Definition: ext.h:40
M0_INTERNAL void m0_be_group_format_seg_io_credit(struct m0_be_group_format_cfg *gft_cfg, struct m0_be_io_credit *io_cred)
struct m0_be_fmt_group * gft_fmt_group_decoded
#define NULL
Definition: misc.h:38
struct m0_be_log * gfc_log
M0_INTERNAL m0_bindex_t m0_be_group_format_log_discarded(const struct m0_be_group_format *gft)
M0_INTERNAL void m0_be_group_format_reg_get(const struct m0_be_group_format *gft, uint32_t index, struct m0_be_reg_d *rd)
M0_INTERNAL void m0_be_group_format_recovery_prepare(struct m0_be_group_format *gft, struct m0_be_log *log)
Definition: io.h:230
M0_INTERNAL int m0_be_log_record_iter_init(struct m0_be_log_record_iter *iter)
Definition: log.c:1151
static struct buffer * cur(struct m0_addb2_mach *mach, m0_bcount_t space)
Definition: addb2.c:791
M0_INTERNAL void m0_be_fmt_group_reg_add(struct m0_be_fmt_group *fg, const struct m0_be_fmt_reg *freg)
Definition: fmt.c:367
static int be_group_format_module_init(struct m0_be_group_format *gft, struct m0_be_group_format_cfg *gft_cfg, bool allocate)
M0_INTERNAL void m0_be_group_format_reset(struct m0_be_group_format *gft)
struct m0_be_pd * gfc_pd
M0_INTERNAL int m0_be_log_record_allocate(struct m0_be_log_record *record)
Definition: log.c:615
M0_INTERNAL void m0_be_log_record_io_launch(struct m0_be_log_record *record, struct m0_be_op *op)
Definition: log.c:795
uint64_t m0_time_t
Definition: time.h:37
#define M0_LOG(level,...)
Definition: trace.h:167
enum m0_trace_level level
Definition: trace.c:111
M0_INTERNAL void m0_be_log_discard_item_starting(struct m0_be_log_discard *ld, struct m0_be_log_discard_item *ldi)
Definition: log_discard.c:400
M0_INTERNAL void m0_be_group_format_encode(struct m0_be_group_format *gft)
M0_INTERNAL m0_bcount_t m0_be_log_reserved_size(struct m0_be_log *log, m0_bcount_t *lio_size, int lio_nr)
Definition: log.c:358
M0_INTERNAL void m0_be_pd_io_get(struct m0_be_pd *pd, struct m0_be_pd_io **pdio, struct m0_be_op *op)
Definition: pd.c:169
const char * ml_name
Definition: module.h:114
m0_bcount_t br_size
Definition: seg.h:144
M0_INTERNAL void m0_be_log_record_io_prepare(struct m0_be_log_record *record, enum m0_stob_io_opcode opcode, m0_bcount_t size_reserved)
Definition: log.c:660
uint64_t m0_bindex_t
Definition: types.h:80
uint64_t fgc_tx_nr_max
Definition: fmt.h:238
M0_INTERNAL int m0_be_group_format_allocate(struct m0_be_group_format *gft)
uint64_t m0_bcount_t
Definition: types.h:77
M0_INTERNAL struct m0_be_io * m0_be_pd_io_be_io(struct m0_be_pd_io *pdio)
Definition: pd.c:185
M0_INTERNAL struct m0 * m0_get(void)
Definition: instance.c:41
M0_INTERNAL void m0_be_op_callback_set(struct m0_be_op *op, m0_be_op_cb_t cb, void *param, enum m0_be_op_state state)
Definition: op.c:239
#define container_of(ptr, type, member)
Definition: misc.h:33
#define M0_SET0(obj)
Definition: misc.h:64
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
Definition: mutex.c:49
static const struct m0_modlev be_group_format_levels[]
#define M0_BE_REG(seg, size, addr)
Definition: seg.h:148
M0_INTERNAL void m0_be_fmt_group_tx_by_id(const struct m0_be_fmt_group *fg, uint32_t index, struct m0_be_fmt_tx *ftx)
Definition: fmt.c:443
M0_INTERNAL void m0_be_group_format_discard(struct m0_be_log_discard *ld, struct m0_be_log_discard_item *ldi)
M0_INTERNAL m0_bindex_t m0_be_log_record_discarded(const struct m0_be_log_record *record)
Definition: log.c:844
M0_INTERNAL int m0_be_fmt_group_decode(struct m0_be_fmt_group **fg, struct m0_bufvec_cursor *cur, const struct m0_be_fmt_decode_cfg *cfg)
Definition: fmt.c:355
#define M0_BE_REG_D(reg, buf)
Definition: tx_regmap.h:67
M0_INTERNAL int m0_be_log_record_io_create(struct m0_be_log_record *record, m0_bcount_t size_max)
Definition: log.c:558
struct m0_be_reg rd_reg
Definition: tx_regmap.h:53
op
Definition: libdemo.c:64
struct m0_be_op gft_log_discard_get
M0_INTERNAL void m0_be_group_format_reg_seg_add(struct m0_be_group_format *gft, const struct m0_be_reg_d *rd)
static int be_group_format_level_enter(struct m0_module *module)
M0_INTERNAL void m0_be_io_configure(struct m0_be_io *bio, enum m0_stob_io_opcode opcode)
Definition: io.c:516
m0_bcount_t fr_size
Definition: fmt.h:344
M0_INTERNAL uint32_t m0_be_group_format_reg_nr(const struct m0_be_group_format *gft)
M0_INTERNAL void m0_be_log_record_assign(struct m0_be_log_record *record, struct m0_be_log_record_iter *iter, bool need_discard)
Definition: log.c:467
M0_INTERNAL void m0_be_pd_io_add(struct m0_be_pd *pd, struct m0_be_pd_io *pdio, struct m0_ext *ext, struct m0_be_op *op)
Definition: pd.c:149
M0_INTERNAL void m0_be_fmt_group_decoded_free(struct m0_be_fmt_group *fg)
Definition: fmt.c:362
static void be_group_format_module_fini(struct m0_be_group_format *gft, bool deallocate)
struct m0_mutex * lc_lock
Definition: log.h:256
M0_INTERNAL void m0_be_group_format_module_setup(struct m0_be_group_format *gft, struct m0_be_group_format_cfg *gft_cfg)
return M0_ERR(-EOPNOTSUPP)
uint64_t fgc_reg_size_max
Definition: fmt.h:241
M0_INTERNAL struct m0_be_fmt_group_info * m0_be_fmt_group_info_get(struct m0_be_fmt_group *fg)
Definition: fmt.c:460
static void be_tx_group_format_seg_io_starting(struct m0_be_op *op, void *param)
struct m0_be_fmt_group_cfg gfc_fmt_cfg
struct m0_be_log_discard * gfc_log_discard
M0_INTERNAL void m0_be_log_discard_item_get(struct m0_be_log_discard *ld, struct m0_be_op *op, struct m0_be_log_discard_item **ldi)
Definition: log_discard.c:444
M0_INTERNAL void m0_be_group_format_seg_place(struct m0_be_group_format *gft, struct m0_be_op *op)
M0_INTERNAL void m0_be_group_format_log_write(struct m0_be_group_format *gft, struct m0_be_op *op)
m0_time_t m0_time_now(void)
Definition: time.c:134
struct m0_be_op gft_pd_io_get
M0_INTERNAL void m0_be_group_format_tx_add(struct m0_be_group_format *gft, struct m0_be_fmt_tx *ftx)
M0_INTERNAL m0_bcount_t m0_be_fmt_group_size_max(const struct m0_be_fmt_group_cfg *cfg)
Definition: fmt.c:324
static struct m0_bufvec bvec
Definition: xcode.c:169
M0_INTERNAL void m0_be_log_record_fini(struct m0_be_log_record *record)
Definition: log.c:410
M0_INTERNAL void m0_bufvec_cursor_init(struct m0_bufvec_cursor *cur, const struct m0_bufvec *bvec)
Definition: vec.c:563
M0_INTERNAL void m0_module_setup(struct m0_module *module, const char *name, const struct m0_modlev *level, int level_nr, struct m0 *instance)
Definition: module.c:193
M0_INTERNAL void m0_be_group_format_log_use(struct m0_be_group_format *gft, m0_bcount_t size_reserved)
M0_INTERNAL void m0_be_log_discard_item_ext_set(struct m0_be_log_discard_item *ldi, struct m0_ext *ext)
Definition: log_discard.c:474
struct m0_be_op gft_all_get
M0_INTERNAL void m0_be_group_format_reg_log_add(struct m0_be_group_format *gft, const struct m0_be_reg_d *rd)
m0_bcount_t tc_reg_nr
Definition: tx_credit.h:84
struct m0_be_fmt_group gft_fmt_group
static void be_tx_group_format_seg_io_finished(struct m0_be_op *op, void *param)
M0_INTERNAL void m0_be_log_record_discard(struct m0_be_log *log, m0_bcount_t size)
Definition: log.c:523
#define gft_fmt_group_choose(gft)
M0_INTERNAL void m0_be_op_done(struct m0_be_op *op)
Definition: stubs.c:104
static struct m0_be_group_format * be_group_format_module2gft(struct m0_module *module)
static void group(void)
Definition: sm.c:386
static void be_tx_group_format_seg_io_op_gc(struct m0_be_op *op, void *param)
M0_INTERNAL int m0_be_group_format_init(struct m0_be_group_format *gft, struct m0_be_group_format_cfg *gft_cfg, struct m0_be_tx_group *group, struct m0_be_log *log)
M0_INTERNAL void m0_be_log_record_reset(struct m0_be_log_record *record)
Definition: log.c:433
struct m0_be_fmt_cblock * gft_fmt_cblock_decoded
M0_INTERNAL m0_bindex_t m0_be_group_format_log_position(const struct m0_be_group_format *gft)
#define M0_BE_IO_CREDIT(reg_nr, reg_size, part_nr)
Definition: io.h:76
#define PRId64
Definition: types.h:57
uint64_t fgc_seg_nr_max
Definition: fmt.h:242
#define EXT_P(x)
Definition: ext.h:86
M0_INTERNAL void m0_be_group_format_deallocate(struct m0_be_group_format *gft)
M0_INTERNAL m0_bcount_t m0_be_fmt_group_size(struct m0_be_fmt_group *fg)
Definition: fmt.c:318
M0_INTERNAL void m0_be_log_recovery_record_get(struct m0_be_log *log, struct m0_be_log_record_iter *iter)
Definition: log.c:1221
M0_INTERNAL void m0_be_group_format_seg_place_prepare(struct m0_be_group_format *gft)
M0_INTERNAL void m0_be_pd_io_put(struct m0_be_pd *pd, struct m0_be_pd_io *pdio)
Definition: pd.c:176
struct m0_be_log_cfg lg_cfg
Definition: log.h:262
void * fr_addr
Definition: fmt.h:345
uint64_t fgc_reg_nr_max
Definition: fmt.h:239
M0_INTERNAL void m0_be_op_reset(struct m0_be_op *op)
Definition: op.c:152
M0_INTERNAL void m0_be_fmt_group_fini(struct m0_be_fmt_group *fg)
Definition: fmt.c:286
M0_INTERNAL void m0_be_group_format_fini(struct m0_be_group_format *gft)
#define EXT_F
Definition: ext.h:85
M0_INTERNAL void m0_be_op_active(struct m0_be_op *op)
Definition: stubs.c:100
M0_INTERNAL void m0_be_fmt_group_reg_by_id(const struct m0_be_fmt_group *fg, uint32_t index, struct m0_be_fmt_reg *freg)
Definition: fmt.c:397
M0_INTERNAL m0_bindex_t m0_be_log_record_position(const struct m0_be_log_record *record)
Definition: log.c:838
M0_INTERNAL uint32_t m0_be_group_format_tx_nr(const struct m0_be_group_format *gft)
Definition: ext.h:37
m0_bindex_t e_start
Definition: ext.h:39
struct m0_be_pd_io * gft_pd_io
M0_INTERNAL m0_bindex_t m0_be_reg_offset(const struct m0_be_reg *reg)
Definition: seg.c:425
struct m0_ext gft_ext
Definition: op.h:64
void * rd_buf
Definition: tx_regmap.h:58
int m_cur
Definition: module.h:160
M0_INTERNAL void m0_be_op_fini(struct m0_be_op *op)
Definition: stubs.c:92
M0_INTERNAL void m0_be_op_set_add(struct m0_be_op *parent, struct m0_be_op *child)
Definition: op.c:297
M0_INTERNAL void m0_be_fmt_group_tx_add(struct m0_be_fmt_group *fg, const struct m0_be_fmt_tx *ftx)
Definition: fmt.c:414
M0_INTERNAL m0_bcount_t m0_be_group_format_log_reserved_size(struct m0_be_log *log, struct m0_be_tx_credit *cred, m0_bcount_t cred_payload)
struct m0_be_op gft_pd_io_op
Definition: record.py:1
struct m0_be_log * gft_log
M0_INTERNAL bool m0_be_group_format__invariant(struct m0_be_group_format *go)
M0_INTERNAL void * m0_be_log_discard_item_user_data(struct m0_be_log_discard_item *ldi)
Definition: log_discard.c:468
M0_INTERNAL void m0_be_log_record_iter_fini(struct m0_be_log_record_iter *iter)
Definition: log.c:1156
struct m0_stob * bs_stob
Definition: seg.h:68
#define M0_ASSERT_INFO(cond, fmt,...)
M0_INTERNAL int m0_be_group_format_decode(struct m0_be_group_format *gft)
#define M0_BE_FMT_REG(size, addr, buf)
Definition: fmt.h:349
M0_INTERNAL struct m0_ext * m0_be_log_discard_item_ext(struct m0_be_log_discard_item *ldi)
Definition: log_discard.c:481
Definition: log.h:261
struct m0_module gft_module
M0_INTERNAL void m0_be_log_record_deallocate(struct m0_be_log_record *record)
Definition: log.c:630
Definition: io.h:229
Definition: op.h:59
M0_INTERNAL void m0_be_log_discard_item_user_data_set(struct m0_be_log_discard_item *ldi, void *data)
Definition: log_discard.c:461
M0_INTERNAL void m0_be_fmt_group_reset(struct m0_be_fmt_group *fg)
Definition: fmt.c:297
Definition: op.h:74
static void be_group_format_level_leave(struct m0_module *module)
M0_INTERNAL void m0_be_op_init(struct m0_be_op *op)
Definition: stubs.c:87
M0_INTERNAL void m0_be_io_add(struct m0_be_io *bio, struct m0_stob *stob, void *ptr_user, m0_bindex_t offset_stob, m0_bcount_t size)
Definition: io.c:280
struct m0_be_seg * br_seg
Definition: seg.h:143
M0_INTERNAL struct m0_be_fmt_group_info * m0_be_group_format_group_info(struct m0_be_group_format *gft)
void * br_addr
Definition: seg.h:145
M0_INTERNAL void m0_be_log_record_init(struct m0_be_log_record *record, struct m0_be_log *log)
Definition: log.c:390
M0_INTERNAL int m0_be_fmt_group_init(struct m0_be_fmt_group *fg, const struct m0_be_fmt_group_cfg *cfg)
Definition: fmt.c:237
M0_INTERNAL uint32_t m0_be_fmt_group_tx_nr(const struct m0_be_fmt_group *fg)
Definition: fmt.c:438
void * fr_buf
Definition: fmt.h:346
M0_INTERNAL int m0_be_fmt_group_encode(struct m0_be_fmt_group *fg, struct m0_bufvec_cursor *cur)
Definition: fmt.c:347
struct m0_be_log_discard_item * gft_log_discard_item
int32_t rc
Definition: trigger_fop.h:47
#define ARRAY_SIZE(a)
Definition: misc.h:45
struct m0_be_op gft_tmp_op
M0_INTERNAL void m0_be_group_format_tx_get(const struct m0_be_group_format *gft, uint32_t index, struct m0_be_fmt_tx *ftx)
M0_INTERNAL void m0_module_fini(struct m0_module *module, int level)
Definition: module.c:142
M0_INTERNAL void m0_be_log_record_ext(struct m0_be_log_record *record, struct m0_ext *ext)
Definition: log.c:496
m0_bcount_t tc_reg_size
Definition: tx_credit.h:86
Definition: vec.h:145
M0_INTERNAL int m0_module_init(struct m0_module *module, int level)
Definition: module.c:131
#define M0_IMPOSSIBLE(fmt,...)