本文整理汇总了C++中osd_invariant函数的典型用法代码示例。如果您正苦于以下问题:C++ osd_invariant函数的具体用法?C++ osd_invariant怎么用?C++ osd_invariant使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了osd_invariant函数的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: osd_object_init
/*
* Concurrency: no concurrent access is possible that early in object
* life-cycle.
*/
static int osd_object_init(const struct lu_env *env, struct lu_object *l,
const struct lu_object_conf *conf)
{
struct osd_object *obj = osd_obj(l);
struct osd_device *osd = osd_obj2dev(obj);
uint64_t oid;
int rc;
ENTRY;
LASSERT(osd_invariant(obj));
if (fid_is_otable_it(&l->lo_header->loh_fid)) {
obj->oo_dt.do_ops = &osd_obj_otable_it_ops;
l->lo_header->loh_attr |= LOHA_EXISTS;
RETURN(0);
}
if (conf != NULL && conf->loc_flags & LOC_F_NEW)
GOTO(out, rc = 0);
rc = osd_fid_lookup(env, osd, lu_object_fid(l), &oid);
if (rc == 0) {
LASSERT(obj->oo_db == NULL);
rc = __osd_obj2dbuf(env, osd->od_os, oid, &obj->oo_db);
/* EEXIST will be returned if object is being deleted in ZFS */
if (rc == -EEXIST) {
rc = 0;
GOTO(out, rc);
}
if (rc != 0) {
CERROR("%s: lookup "DFID"/%#llx failed: rc = %d\n",
osd->od_svname, PFID(lu_object_fid(l)), oid, rc);
GOTO(out, rc);
}
LASSERT(obj->oo_db);
rc = osd_object_init0(env, obj);
if (rc != 0)
GOTO(out, rc);
rc = osd_check_lma(env, obj);
if (rc != 0)
GOTO(out, rc);
} else if (rc == -ENOENT) {
rc = 0;
}
LASSERT(osd_invariant(obj));
out:
RETURN(rc);
}
开发者ID:sdsc,项目名称:lustre-release,代码行数:53,代码来源:osd_object.c
示例2: osd_oi_iam_delete
static int osd_oi_iam_delete(struct osd_thread_info *oti, struct osd_oi *oi,
const struct dt_key *key, handle_t *th)
{
struct iam_container *bag;
struct iam_path_descr *ipd;
int rc;
ENTRY;
LASSERT(oi);
LASSERT(oi->oi_inode);
ll_vfs_dq_init(oi->oi_inode);
bag = &oi->oi_dir.od_container;
ipd = osd_idx_ipd_get(oti->oti_env, bag);
if (unlikely(ipd == NULL))
RETURN(-ENOMEM);
LASSERT(th != NULL);
LASSERT(th->h_transaction != NULL);
rc = iam_delete(th, bag, (const struct iam_key *)key, ipd);
osd_ipd_put(oti->oti_env, bag, ipd);
LINVRNT(osd_invariant(obj));
RETURN(rc);
}
开发者ID:Keeper-of-the-Keys,项目名称:Lustre,代码行数:25,代码来源:osd_oi.c
示例3: osd_oi_iam_lookup
static int osd_oi_iam_lookup(struct osd_thread_info *oti,
struct osd_oi *oi, struct dt_rec *rec,
const struct dt_key *key)
{
struct iam_container *bag;
struct iam_iterator *it = &oti->oti_idx_it;
struct iam_path_descr *ipd;
int rc;
ENTRY;
LASSERT(oi);
LASSERT(oi->oi_inode);
bag = &oi->oi_dir.od_container;
ipd = osd_idx_ipd_get(oti->oti_env, bag);
if (IS_ERR(ipd))
RETURN(-ENOMEM);
/* got ipd now we can start iterator. */
iam_it_init(it, bag, 0, ipd);
rc = iam_it_get(it, (struct iam_key *)key);
if (rc > 0)
iam_reccpy(&it->ii_path.ip_leaf, (struct iam_rec *)rec);
iam_it_put(it);
iam_it_fini(it);
osd_ipd_put(oti->oti_env, bag, ipd);
LINVRNT(osd_invariant(obj));
RETURN(rc);
}
开发者ID:Keeper-of-the-Keys,项目名称:Lustre,代码行数:32,代码来源:osd_oi.c
示例4: osd_xattr_get
int osd_xattr_get(const struct lu_env *env, struct dt_object *dt,
struct lu_buf *buf, const char *name)
{
struct osd_object *obj = osd_dt_obj(dt);
int rc, size = 0;
ENTRY;
LASSERT(obj->oo_db != NULL);
LASSERT(osd_invariant(obj));
if (!osd_obj2dev(obj)->od_posix_acl &&
(strcmp(name, POSIX_ACL_XATTR_ACCESS) == 0 ||
strcmp(name, POSIX_ACL_XATTR_DEFAULT) == 0))
RETURN(-EOPNOTSUPP);
down_read(&obj->oo_guard);
rc = __osd_xattr_get(env, obj, buf, name, &size);
up_read(&obj->oo_guard);
if (rc == -ENOENT)
rc = -ENODATA;
else if (rc == 0)
rc = size;
RETURN(rc);
}
开发者ID:nkzxw,项目名称:lustre-stable,代码行数:25,代码来源:osd_xattr.c
示例5: osd_object_ref_del
/*
* Concurrency: @dt is write locked.
*/
static int osd_object_ref_del(const struct lu_env *env,
struct dt_object *dt,
struct thandle *handle)
{
struct osd_object *obj = osd_dt_obj(dt);
struct osd_thandle *oh;
struct osd_device *osd = osd_obj2dev(obj);
uint64_t nlink;
int rc;
ENTRY;
down_read(&obj->oo_guard);
if (unlikely(!dt_object_exists(dt) || obj->oo_destroyed))
GOTO(out, rc = -ENOENT);
LASSERT(osd_invariant(obj));
LASSERT(obj->oo_sa_hdl != NULL);
oh = container_of0(handle, struct osd_thandle, ot_super);
LASSERT(!lu_object_is_dying(dt->do_lu.lo_header));
write_lock(&obj->oo_attr_lock);
nlink = --obj->oo_attr.la_nlink;
write_unlock(&obj->oo_attr_lock);
rc = osd_object_sa_update(obj, SA_ZPL_LINKS(osd), &nlink, 8, oh);
out:
up_read(&obj->oo_guard);
RETURN(rc);
}
开发者ID:sdsc,项目名称:lustre-release,代码行数:36,代码来源:osd_object.c
示例6: osd_xattr_set
int osd_xattr_set(const struct lu_env *env, struct dt_object *dt,
const struct lu_buf *buf, const char *name, int fl,
struct thandle *handle)
{
struct osd_object *obj = osd_dt_obj(dt);
struct osd_thandle *oh;
int rc = 0;
ENTRY;
LASSERT(handle != NULL);
LASSERT(osd_invariant(obj));
if (!osd_obj2dev(obj)->od_posix_acl &&
(strcmp(name, POSIX_ACL_XATTR_ACCESS) == 0 ||
strcmp(name, POSIX_ACL_XATTR_DEFAULT) == 0))
RETURN(-EOPNOTSUPP);
if (OBD_FAIL_CHECK(OBD_FAIL_LFSCK_LINKEA_OVERFLOW) &&
strcmp(name, XATTR_NAME_LINK) == 0)
RETURN(-ENOSPC);
oh = container_of0(handle, struct osd_thandle, ot_super);
down_write(&obj->oo_guard);
CDEBUG(D_INODE, "Setting xattr %s with size %d\n",
name, (int)buf->lb_len);
rc = osd_xattr_set_internal(env, obj, buf, name, fl, oh);
up_write(&obj->oo_guard);
RETURN(rc);
}
开发者ID:nkzxw,项目名称:lustre-stable,代码行数:31,代码来源:osd_xattr.c
示例7: osd_index_insert
static int osd_index_insert(const struct lu_env *env, struct dt_object *dt,
const struct dt_rec *rec, const struct dt_key *key,
struct thandle *th, struct lustre_capa *capa,
int ignore_quota)
{
struct osd_object *obj = osd_dt_obj(dt);
struct osd_device *osd = osd_obj2dev(obj);
struct osd_thandle *oh;
__u64 *k = osd_oti_get(env)->oti_key64;
int rc;
ENTRY;
LASSERT(obj->oo_db);
LASSERT(dt_object_exists(dt));
LASSERT(osd_invariant(obj));
LASSERT(th != NULL);
oh = container_of0(th, struct osd_thandle, ot_super);
rc = osd_prepare_key_uint64(obj, k, key);
/* Insert (key,oid) into ZAP */
rc = -zap_add_uint64(osd->od_objset.os, obj->oo_db->db_object,
k, rc, obj->oo_recusize, obj->oo_recsize,
(void *)rec, oh->ot_tx);
RETURN(rc);
}
开发者ID:hejin,项目名称:lustre-stable,代码行数:27,代码来源:osd_index.c
示例8: osd_xattr_del
int osd_xattr_del(const struct lu_env *env, struct dt_object *dt,
const char *name, struct thandle *handle)
{
struct osd_object *obj = osd_dt_obj(dt);
struct osd_thandle *oh;
int rc;
ENTRY;
LASSERT(handle != NULL);
LASSERT(obj->oo_db != NULL);
LASSERT(osd_invariant(obj));
LASSERT(dt_object_exists(dt));
oh = container_of0(handle, struct osd_thandle, ot_super);
LASSERT(oh->ot_tx != NULL);
if (!osd_obj2dev(obj)->od_posix_acl &&
(strcmp(name, POSIX_ACL_XATTR_ACCESS) == 0 ||
strcmp(name, POSIX_ACL_XATTR_DEFAULT) == 0))
RETURN(-EOPNOTSUPP);
down_write(&obj->oo_guard);
rc = __osd_xattr_del(env, obj, name, oh);
up_write(&obj->oo_guard);
RETURN(rc);
}
开发者ID:nkzxw,项目名称:lustre-stable,代码行数:26,代码来源:osd_xattr.c
示例9: osd_xattr_set
int osd_xattr_set(const struct lu_env *env, struct dt_object *dt,
const struct lu_buf *buf, const char *name, int fl,
struct thandle *handle, struct lustre_capa *capa)
{
struct osd_object *obj = osd_dt_obj(dt);
struct osd_thandle *oh;
int rc = 0;
ENTRY;
LASSERT(handle != NULL);
LASSERT(osd_invariant(obj));
LASSERT(dt_object_exists(dt));
LASSERT(obj->oo_db);
if (!osd_obj2dev(obj)->od_posix_acl &&
(strcmp(name, POSIX_ACL_XATTR_ACCESS) == 0 ||
strcmp(name, POSIX_ACL_XATTR_DEFAULT) == 0))
RETURN(-EOPNOTSUPP);
oh = container_of0(handle, struct osd_thandle, ot_super);
down(&obj->oo_guard);
CDEBUG(D_INODE, "Setting xattr %s with size %d\n",
name, (int)buf->lb_len);
rc = osd_xattr_set_internal(env, obj, buf, name, fl, oh, capa);
up(&obj->oo_guard);
RETURN(rc);
}
开发者ID:karig,项目名称:lustre-stable,代码行数:29,代码来源:osd_xattr.c
示例10: osd_object_ref_add
/*
* Concurrency: @dt is write locked.
*/
static int osd_object_ref_add(const struct lu_env *env,
struct dt_object *dt,
struct thandle *handle)
{
struct osd_object *obj = osd_dt_obj(dt);
struct osd_thandle *oh;
struct osd_device *osd = osd_obj2dev(obj);
uint64_t nlink;
int rc;
ENTRY;
LASSERT(osd_invariant(obj));
LASSERT(dt_object_exists(dt));
LASSERT(obj->oo_sa_hdl != NULL);
oh = container_of0(handle, struct osd_thandle, ot_super);
write_lock(&obj->oo_attr_lock);
nlink = ++obj->oo_attr.la_nlink;
write_unlock(&obj->oo_attr_lock);
rc = osd_object_sa_update(obj, SA_ZPL_LINKS(osd), &nlink, 8, oh);
return rc;
}
开发者ID:dinatale2,项目名称:lustre-stable,代码行数:28,代码来源:osd_object.c
示例11: osd_attr_get
static int osd_attr_get(const struct lu_env *env,
struct dt_object *dt,
struct lu_attr *attr)
{
struct osd_object *obj = osd_dt_obj(dt);
uint64_t blocks;
uint32_t blksize;
int rc = 0;
down_read(&obj->oo_guard);
if (unlikely(!dt_object_exists(dt) || obj->oo_destroyed))
GOTO(out, rc = -ENOENT);
LASSERT(osd_invariant(obj));
LASSERT(obj->oo_db);
read_lock(&obj->oo_attr_lock);
*attr = obj->oo_attr;
if (obj->oo_lma_flags & LUSTRE_ORPHAN_FL)
attr->la_flags |= LUSTRE_ORPHAN_FL;
read_unlock(&obj->oo_attr_lock);
/* with ZFS_DEBUG zrl_add_debug() called by DB_DNODE_ENTER()
* from within sa_object_size() can block on a mutex, so
* we can't call sa_object_size() holding rwlock */
sa_object_size(obj->oo_sa_hdl, &blksize, &blocks);
/* we do not control size of indices, so always calculate
* it from number of blocks reported by DMU */
if (S_ISDIR(attr->la_mode))
attr->la_size = 512 * blocks;
/* Block size may be not set; suggest maximal I/O transfers. */
if (blksize == 0)
blksize = osd_spa_maxblocksize(
dmu_objset_spa(osd_obj2dev(obj)->od_os));
attr->la_blksize = blksize;
attr->la_blocks = blocks;
attr->la_valid |= LA_BLOCKS | LA_BLKSIZE;
out:
up_read(&obj->oo_guard);
return rc;
}
开发者ID:sdsc,项目名称:lustre-release,代码行数:44,代码来源:osd_object.c
示例12: osd_declare_index_delete
static int osd_declare_index_delete(const struct lu_env *env,
struct dt_object *dt,
const struct dt_key *key,
struct thandle *th)
{
struct osd_object *obj = osd_dt_obj(dt);
struct osd_thandle *oh;
ENTRY;
LASSERT(dt_object_exists(dt));
LASSERT(osd_invariant(obj));
LASSERT(th != NULL);
LASSERT(obj->oo_db);
oh = container_of0(th, struct osd_thandle, ot_super);
dmu_tx_hold_zap(oh->ot_tx, obj->oo_db->db_object, TRUE, NULL);
RETURN(0);
}
开发者ID:hejin,项目名称:lustre-stable,代码行数:19,代码来源:osd_index.c
示例13: osd_declare_xattr_del
int osd_declare_xattr_del(const struct lu_env *env, struct dt_object *dt,
const char *name, struct thandle *handle)
{
struct osd_object *obj = osd_dt_obj(dt);
struct osd_thandle *oh;
ENTRY;
LASSERT(handle != NULL);
LASSERT(osd_invariant(obj));
oh = container_of0(handle, struct osd_thandle, ot_super);
LASSERT(oh->ot_tx != NULL);
LASSERT(obj->oo_db != NULL);
down_read(&obj->oo_guard);
if (likely(dt_object_exists(&obj->oo_dt) && !obj->oo_destroyed))
__osd_xattr_declare_del(env, obj, name, oh);
up_read(&obj->oo_guard);
RETURN(0);
}
开发者ID:nkzxw,项目名称:lustre-stable,代码行数:21,代码来源:osd_xattr.c
示例14: osd_xattr_list
int osd_xattr_list(const struct lu_env *env, struct dt_object *dt,
const struct lu_buf *lb)
{
struct osd_object *obj = osd_dt_obj(dt);
struct osd_device *osd = osd_obj2dev(obj);
zap_attribute_t *za = &osd_oti_get(env)->oti_za;
zap_cursor_t *zc;
int rc, counted;
ENTRY;
LASSERT(obj->oo_db != NULL);
LASSERT(osd_invariant(obj));
LASSERT(dt_object_exists(dt));
down_read(&obj->oo_guard);
rc = osd_sa_xattr_list(env, obj, lb);
if (rc < 0)
GOTO(out, rc);
counted = rc;
/* continue with dnode xattr if any */
if (obj->oo_xattr == ZFS_NO_OBJECT)
GOTO(out, rc = counted);
rc = osd_zap_cursor_init(&zc, osd->od_os, obj->oo_xattr, 0);
if (rc)
GOTO(out, rc);
while ((rc = -zap_cursor_retrieve(zc, za)) == 0) {
if (!osd_obj2dev(obj)->od_posix_acl &&
(strcmp(za->za_name, POSIX_ACL_XATTR_ACCESS) == 0 ||
strcmp(za->za_name, POSIX_ACL_XATTR_DEFAULT) == 0)) {
zap_cursor_advance(zc);
continue;
}
rc = strlen(za->za_name);
if (lb->lb_buf != NULL) {
if (counted + rc + 1 > lb->lb_len)
GOTO(out_fini, rc = -ERANGE);
memcpy(lb->lb_buf + counted, za->za_name, rc + 1);
}
counted += rc + 1;
zap_cursor_advance(zc);
}
if (rc == -ENOENT) /* no more kes in the index */
rc = 0;
else if (unlikely(rc < 0))
GOTO(out_fini, rc);
rc = counted;
out_fini:
osd_zap_cursor_fini(zc);
out:
up_read(&obj->oo_guard);
RETURN(rc);
}
开发者ID:nkzxw,项目名称:lustre-stable,代码行数:62,代码来源:osd_xattr.c
注:本文中的osd_invariant函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论