X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flov%2Flovsub_object.c;h=77930742f064e5c536496b9c7c64e97dcab80e68;hb=9f7e47cfc7f0346ac2eb0ab45c8dff058c271fa1;hp=39f4edd23ef93dc9000e9f3ddfffe633d5469f49;hpb=b401ba0c214b184424146dda994470aa3c4356c9;p=fs%2Flustre-release.git diff --git a/lustre/lov/lovsub_object.c b/lustre/lov/lovsub_object.c index 39f4edd..7793074 100644 --- a/lustre/lov/lovsub_object.c +++ b/lustre/lov/lovsub_object.c @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -42,7 +42,9 @@ #include "lov_cl_internal.h" -/** \addtogroup lov lov @{ */ +/** \addtogroup lov + * @{ + */ /***************************************************************************** * @@ -75,12 +77,19 @@ 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; - LASSERT(lov->lo_type == LLT_RAID0); - LASSERT(lov->u.raid0.lo_sub[los->lso_index] == los); + /* 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); + cfs_spin_lock(&lov->u.raid0.lo_sub_lock); + lov->u.raid0.lo_sub[los->lso_index] = NULL; + cfs_spin_unlock(&lov->u.raid0.lo_sub_lock); + } - ENTRY; - 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); @@ -134,7 +143,7 @@ static const struct lu_object_operations lovsub_lu_obj_ops = { }; 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;