static void lovsub_object_free(const struct lu_env *env, struct lu_object *obj)
{
struct lovsub_object *los = lu2lovsub(obj);
-
+ struct lov_object *lov = los->lso_super;
ENTRY;
+
+ /* We can't assume lov was assigned here, because of the shadow
+ * object handling in lu_object_find.
+ */
+ if (lov) {
+ LASSERT(lov->lo_type == LLT_RAID0);
+ LASSERT(lov->u.raid0.lo_sub[los->lso_index] == los);
+ lov->u.raid0.lo_sub[los->lso_index] = NULL;
+ }
+
lu_object_fini(obj);
lu_object_header_fini(&los->lso_header.coh_lu);
OBD_SLAB_FREE_PTR(los, lovsub_object_kmem);
};
struct lu_object *lovsub_object_alloc(const struct lu_env *env,
- const struct lu_object_header *_,
+ const struct lu_object_header *unused,
struct lu_device *dev)
{
struct lovsub_object *los;
struct lu_object *obj;
ENTRY;
- OBD_SLAB_ALLOC_PTR(los, lovsub_object_kmem);
+ OBD_SLAB_ALLOC_PTR_GFP(los, lovsub_object_kmem, CFS_ALLOC_IO);
if (los != NULL) {
struct cl_object_header *hdr;