struct lu_object *lovsub_object_alloc(const struct lu_env *env, const struct lu_object_header *unused, struct lu_device *dev) { struct lovsub_object *los; struct lu_object *obj; OBD_SLAB_ALLOC_PTR_GFP(los, lovsub_object_kmem, GFP_NOFS); if (los != NULL) { struct cl_object_header *hdr; obj = lovsub2lu(los); hdr = &los->lso_header; cl_object_header_init(hdr); lu_object_init(obj, &hdr->coh_lu, dev); lu_object_add_top(&hdr->coh_lu, obj); los->lso_cl.co_ops = &lovsub_ops; obj->lo_ops = &lovsub_lu_obj_ops; } else obj = NULL; return obj; }
struct lu_object *lovsub_object_alloc(const struct lu_env *env, const struct lu_object_header *unused, struct lu_device *dev) { struct lovsub_object *los; struct lu_object *obj; los = kmem_cache_zalloc(lovsub_object_kmem, GFP_NOFS); if (los) { struct cl_object_header *hdr; obj = lovsub2lu(los); hdr = &los->lso_header; cl_object_header_init(hdr); lu_object_init(obj, &hdr->coh_lu, dev); lu_object_add_top(&hdr->coh_lu, obj); los->lso_cl.co_ops = &lovsub_ops; obj->lo_ops = &lovsub_lu_obj_ops; } else { obj = NULL; } return obj; }
static int lov_print_raid0(const struct lu_env *env, void *cookie, lu_printer_t p, const struct lu_object *o) { struct lov_object *lov = lu2lov(o); struct lov_layout_raid0 *r0 = lov_r0(lov); struct lov_stripe_md *lsm = lov->lo_lsm; int i; (*p)(env, cookie, "stripes: %d, %svalid, lsm{%p 0x%08X %d %u %u}: \n", r0->lo_nr, lov->lo_layout_invalid ? "in" : "", lsm, lsm->lsm_magic, atomic_read(&lsm->lsm_refc), lsm->lsm_stripe_count, lsm->lsm_layout_gen); for (i = 0; i < r0->lo_nr; ++i) { struct lu_object *sub; if (r0->lo_sub[i] != NULL) { sub = lovsub2lu(r0->lo_sub[i]); lu_object_print(env, cookie, p, sub); } else (*p)(env, cookie, "sub %d absent\n", i); } return 0; }