22 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_COB 52 #define M0_MD_FAKE_BLOCKSIZE 4096 53 #define M0_MD_FAKE_VOLUME 250000 93 return M0_RC(-ENOENT);
237 attr->ca_name.b_nob);
260 linklen =
attr->ca_link.b_addr ?
attr->ca_link.b_nob : 0;
276 if (S_ISDIR(
attr->ca_mode)) {
312 return M0_RC(-EOPNOTSUPP);
371 }
else if (
rc == -ENOENT)
401 (
int)
name->b_nob, (
char *)
name->b_addr);
441 "failed with %d",
rc);
453 "name, find new statdata with %d or more nlinks",
466 "failed with %d",
rc);
479 M0_LOG(
M0_DEBUG,
"m0_mdstore_unlink(): update statdata on store");
488 "update failed with %d",
rc);
497 "failed with %d",
rc);
595 unlink = (tncob !=
NULL &&
693 (
unsigned)
attr->ca_nlink);
695 (
unsigned)
attr->ca_size,
696 (
unsigned)
attr->ca_lid);
741 }
else if (
s_len == 2 && strncmp(
s_buf,
"..", 2) == 0) {
759 while (
rc == 0 || dot) {
762 }
else if (dot == 2) {
780 "Readdir filled entry \"%.*s\" recsize %d",
808 rc =
rc ? ENOENT : 0;
841 FID_P(&(*cob)->co_nsrec.cnr_fid),
842 FID_P(&(*cob)->co_nskey->cnk_pfid),
897 #define MDSTORE_PATH_MAX 1024 898 #define MDSTORE_NAME_MAX 255 931 memmove(*path + strlen(
name), *path, strlen(*path));
937 if (
rc == -EDEADLK) {
947 #undef M0_TRACE_SUBSYSTEM
struct m0_cob_nsrec co_nsrec
M0_INTERNAL void m0_mdstore_fini(struct m0_mdstore *md)
struct m0_cob_domain * md_dom
int const char const void size_t int flags
#define M0_MD_MAX_NAME_LEN
M0_INTERNAL int m0_mdstore_init(struct m0_mdstore *md, struct m0_be_seg *db, bool init_root)
M0_INTERNAL int m0_mdstore_dir_empty_check(struct m0_mdstore *md, struct m0_cob *cob)
M0_INTERNAL void m0_cob_iterator_fini(struct m0_cob_iterator *it)
static void mdstore_fini(struct m0_mdstore *md, bool pre_destroy)
M0_INTERNAL int m0_cob_alloc_omgid(struct m0_cob_domain *dom, uint64_t *omgid)
M0_INTERNAL int m0_cob_nskey_cmp(const struct m0_cob_nskey *k0, const struct m0_cob_nskey *k1)
#define M0_LOG(level,...)
M0_INTERNAL int m0_mdstore_locate(struct m0_mdstore *md, const struct m0_fid *fid, struct m0_cob **cob, int flags)
void m0_cob_domain_fini(struct m0_cob_domain *dom)
M0_INTERNAL uint32_t m0_bitstring_len_get(const struct m0_bitstring *c)
M0_INTERNAL void m0_buf_init(struct m0_buf *buf, void *data, uint32_t nob)
M0_INTERNAL int m0_mdstore_statfs(struct m0_mdstore *md, struct m0_statfs *statfs)
M0_INTERNAL void m0_cob_put(struct m0_cob *cob)
static struct m0_be_emap_cursor it
M0_INTERNAL const struct m0_fid M0_DOT_MOTR_FID_FID
int m0_cob_domain_create(struct m0_cob_domain **dom, struct m0_sm_group *grp, const struct m0_cob_domain_id *cdid, struct m0_be_domain *bedom, struct m0_be_seg *seg)
M0_INTERNAL int m0_cob_fabrec_make(struct m0_cob_fabrec **rech, const char *link, size_t linklen)
M0_INTERNAL int m0_fid_cmp(const struct m0_fid *fid0, const struct m0_fid *fid1)
M0_INTERNAL bool m0_fid_is_set(const struct m0_fid *fid)
M0_INTERNAL int m0_cob_name_update(struct m0_cob *cob, struct m0_cob_nskey *srckey, struct m0_cob_nskey *tgtkey, struct m0_be_tx *tx)
M0_INTERNAL int m0_cob_nskey_make(struct m0_cob_nskey **keyh, const struct m0_fid *pfid, const char *name, size_t namelen)
M0_INTERNAL int m0_mdstore_close(struct m0_mdstore *md, struct m0_cob *cob, struct m0_be_tx *tx)
M0_INTERNAL int m0_mdstore_fcreate(struct m0_mdstore *md, struct m0_fid *pfid, struct m0_cob_attr *attr, struct m0_cob **out, struct m0_be_tx *tx)
M0_INTERNAL void m0_cob_tx_credit(struct m0_cob_domain *dom, enum m0_cob_op optype, struct m0_be_tx_credit *accum)
M0_INTERNAL void m0_mdstore_unlink_credit(struct m0_mdstore *md, struct m0_be_tx_credit *accum)
struct m0_cob_nskey * co_nskey
M0_INTERNAL int m0_mdstore_link(struct m0_mdstore *md, struct m0_fid *pfid, struct m0_cob *cob, struct m0_buf *name, struct m0_be_tx *tx)
M0_INTERNAL void m0_mdstore_create_credit(struct m0_mdstore *md, struct m0_be_tx_credit *accum)
return M0_ERR(-EOPNOTSUPP)
M0_INTERNAL const struct m0_fid M0_MDSERVICE_SLASH_FID
M0_INTERNAL int m0_cob_iterator_next(struct m0_cob_iterator *it)
M0_INTERNAL const char M0_DOT_MOTR_NAME[]
static void attr(struct m0_addb2__context *ctx, const uint64_t *v, char *buf)
M0_INTERNAL void m0_bitstring_copy(struct m0_bitstring *dst, const char *src, size_t count)
struct m0_bitstring * r_pos
M0_INTERNAL struct m0_bitstring * m0_bitstring_alloc(const char *name, size_t len)
M0_INTERNAL int m0_cob_name_add(struct m0_cob *cob, struct m0_cob_nskey *nskey, struct m0_cob_nsrec *nsrec, struct m0_be_tx *tx)
static struct m0_cob * cob
struct m0_bitstring cnk_name
M0_INTERNAL void m0_cob_nsrec_init(struct m0_cob_nsrec *nsrec)
int m0_cob_domain_destroy(struct m0_cob_domain *dom, struct m0_sm_group *grp, struct m0_be_domain *bedom)
M0_INTERNAL void m0_cob_oikey_make(struct m0_cob_oikey *oikey, const struct m0_fid *fid, int linkno)
M0_INTERNAL int m0_cob_create(struct m0_cob *cob, struct m0_cob_nskey *nskey, struct m0_cob_nsrec *nsrec, struct m0_cob_fabrec *fabrec, struct m0_cob_omgrec *omgrec, struct m0_be_tx *tx)
void * m0_alloc(size_t size)
M0_INTERNAL int m0_mdstore_open(struct m0_mdstore *md, struct m0_cob *cob, m0_mdstore_locate_flags_t flags, struct m0_be_tx *tx)
static struct m0_sm_group * grp
M0_INTERNAL int m0_mdstore_mod_init(void)
struct m0_cob_oikey co_oikey
M0_INTERNAL int m0_cob_lookup(struct m0_cob_domain *dom, struct m0_cob_nskey *nskey, uint64_t flags, struct m0_cob **out)
M0_INTERNAL void m0_mdstore_dir_nlink_update_credit(struct m0_mdstore *md, struct m0_be_tx_credit *accum)
M0_INTERNAL int m0_mdstore_readdir(struct m0_mdstore *md, struct m0_cob *cob, struct m0_rdpg *rdpg)
M0_INTERNAL int m0_fid_sscanf(const char *s, struct m0_fid *fid)
int m0_cob_domain_init(struct m0_cob_domain *dom, struct m0_be_seg *seg)
M0_INTERNAL void m0_mdstore_mod_fini(void)
M0_INTERNAL int m0_mdstore_path(struct m0_mdstore *md, struct m0_fid *fid, char **path)
M0_INTERNAL int m0_mdstore_rename(struct m0_mdstore *md, struct m0_fid *pfid_tgt, struct m0_fid *pfid_src, struct m0_cob *cob_tgt, struct m0_cob *cob_src, struct m0_buf *tname, struct m0_buf *sname, struct m0_be_tx *tx)
M0_INTERNAL bool m0_fid_eq(const struct m0_fid *fid0, const struct m0_fid *fid1)
static struct m0_mdstore md
M0_INTERNAL void m0_mdstore_rename_credit(struct m0_mdstore *md, struct m0_be_tx_credit *accum)
M0_INTERNAL int m0_mdstore_create(struct m0_mdstore *md, struct m0_sm_group *grp, struct m0_cob_domain_id *id, struct m0_be_domain *bedom, struct m0_be_seg *db)
M0_INTERNAL void m0_mdstore_setattr_credit(struct m0_mdstore *md, struct m0_be_tx_credit *accum)
M0_INTERNAL int m0_mdstore_unlink(struct m0_mdstore *md, struct m0_fid *pfid, struct m0_cob *cob, struct m0_buf *name, struct m0_be_tx *tx)
M0_INTERNAL void * m0_bitstring_buf_get(struct m0_bitstring *c)
M0_INTERNAL const char M0_COB_ROOT_NAME[]
enum m0_mdstore_locate_flags m0_mdstore_locate_flags_t
#define M0_MD_FAKE_BLOCKSIZE
struct m0_cob_omgrec co_omgrec
M0_INTERNAL int m0_cob_update(struct m0_cob *cob, struct m0_cob_nsrec *nsrec, struct m0_cob_fabrec *fabrec, struct m0_cob_omgrec *omgrec, struct m0_be_tx *tx)
M0_INTERNAL int m0_cob_delete(struct m0_cob *cob, struct m0_be_tx *tx)
M0_INTERNAL void m0_mdstore_link_credit(struct m0_mdstore *md, struct m0_be_tx_credit *accum)
M0_INTERNAL int m0_cob_iterator_get(struct m0_cob_iterator *it)
M0_INTERNAL int m0_cob_locate(struct m0_cob_domain *dom, struct m0_cob_oikey *oikey, uint64_t flags, struct m0_cob **out)
M0_INTERNAL int m0_cob_setattr(struct m0_cob *cob, struct m0_cob_attr *attr, struct m0_be_tx *tx)
static void restart(void)
M0_INTERNAL int m0_mdstore_destroy(struct m0_mdstore *md, struct m0_sm_group *grp, struct m0_be_domain *bedom)
M0_INTERNAL int m0_cob_name_del(struct m0_cob *cob, struct m0_cob_nskey *nskey, struct m0_be_tx *tx)
M0_INTERNAL int m0_mdstore_setattr(struct m0_mdstore *md, struct m0_cob *cob, struct m0_cob_attr *attr, struct m0_be_tx *tx)
M0_INTERNAL int m0_cob_alloc(struct m0_cob_domain *dom, struct m0_cob **out)
M0_INTERNAL const struct m0_fid * m0_cob_fid(const struct m0_cob *cob)
M0_INTERNAL int m0_mdstore_lookup(struct m0_mdstore *md, struct m0_fid *pfid, struct m0_buf *name, struct m0_cob **cob)
struct m0_bitstring * r_end
M0_INTERNAL int m0_mdstore_dir_nlink_update(struct m0_mdstore *md, struct m0_fid *fid, int inc, struct m0_be_tx *tx)
M0_INTERNAL int m0_mdstore_getattr(struct m0_mdstore *md, struct m0_cob *cob, struct m0_cob_attr *attr)
#define M0_MD_FAKE_VOLUME
static uint64_t m0_align(uint64_t val, uint64_t alignment)
M0_INTERNAL int m0_cob_iterator_init(struct m0_cob *cob, struct m0_cob_iterator *it, struct m0_bitstring *name)
M0_INTERNAL const struct m0_fid M0_COB_ROOT_FID
static struct m0_addb2_frame_header last