Exemplo n.º 1
0
/*
 * Concurrency: no concurrent access is possible that early in object
 * life-cycle.
 */
struct lu_object *osd_object_alloc(const struct lu_env *env,
				   const struct lu_object_header *hdr,
				   struct lu_device *d)
{
	struct osd_object *mo;

	OBD_SLAB_ALLOC_PTR_GFP(mo, osd_object_kmem, GFP_NOFS);
	if (mo != NULL) {
		struct lu_object *l;

		l = &mo->oo_dt.do_lu;
		dt_object_init(&mo->oo_dt, NULL, d);
		mo->oo_dt.do_ops = &osd_obj_ops;
		l->lo_ops = &osd_lu_obj_ops;
		INIT_LIST_HEAD(&mo->oo_sa_linkage);
		INIT_LIST_HEAD(&mo->oo_unlinked_linkage);
		init_rwsem(&mo->oo_sem);
		init_rwsem(&mo->oo_guard);
		rwlock_init(&mo->oo_attr_lock);
		mo->oo_destroy = OSD_DESTROY_NONE;
		return l;
	} else {
		return NULL;
	}
}
Exemplo n.º 2
0
/*
 * Concurrency: no concurrent access is possible that early in object
 * life-cycle.
 */
struct lu_object *osd_object_alloc(const struct lu_env *env,
				   const struct lu_object_header *hdr,
				   struct lu_device *d)
{
	struct osd_object *mo;

	OBD_SLAB_ALLOC_PTR_GFP(mo, osd_object_kmem, CFS_ALLOC_IO);
	if (mo != NULL) {
		struct lu_object *l;

		l = &mo->oo_dt.do_lu;
		dt_object_init(&mo->oo_dt, NULL, d);
		mo->oo_dt.do_ops = &osd_obj_ops;
		l->lo_ops = &osd_lu_obj_ops;
		CFS_INIT_LIST_HEAD(&mo->oo_sa_linkage);
		init_rwsem(&mo->oo_sem);
		sema_init(&mo->oo_guard, 1);
		rwlock_init(&mo->oo_attr_lock);
		return l;
	} else {
		return NULL;
	}
}