Whamcloud - gitweb
LU-427 test: Test failure on test suite lfsck
[fs/lustre-release.git] / lustre / lmv / lmv_object.c
index 6b3d821..60631c8 100644 (file)
  * GPL HEADER END
  */
 /*
- * Copyright  2008 Sun Microsystems, Inc. All rights reserved
+ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  */
 /*
+ * Copyright (c) 2011 Whamcloud, Inc.
+ */
+/*
  * This file is part of Lustre, http://www.lustre.org/
  * Lustre is a trademark of Sun Microsystems, Inc.
  */
@@ -50,8 +53,8 @@
 #include <liblustre.h>
 #endif
 
-#include <lustre/lustre_idl.h>
 #include <obd_support.h>
+#include <lustre/lustre_idl.h>
 #include <lustre_lib.h>
 #include <lustre_net.h>
 #include <lustre_dlm.h>
@@ -96,12 +99,10 @@ struct lmv_object *lmv_object_alloc(struct obd_device *obd,
         obj_size = sizeof(struct lmv_stripe) * 
                 lmv->desc.ld_tgt_count;
 
-        OBD_ALLOC(obj->lo_stripes, obj_size);
+        OBD_ALLOC_LARGE(obj->lo_stripes, obj_size);
         if (!obj->lo_stripes)
                 goto err_obj;
 
-        memset(obj->lo_stripes, 0, obj_size);
-
         CDEBUG(D_INODE, "Allocate object for "DFID"\n", 
                PFID(fid));
         for (i = 0; i < mea->mea_count; i++) {
@@ -138,7 +139,7 @@ void lmv_object_free(struct lmv_object *obj)
         obj_size = sizeof(struct lmv_stripe) *
                 lmv->desc.ld_tgt_count;
 
-        OBD_FREE(obj->lo_stripes, obj_size);
+        OBD_FREE_LARGE(obj->lo_stripes, obj_size);
         OBD_SLAB_FREE(obj, lmv_object_cache, sizeof(*obj));
         cfs_atomic_dec(&lmv_object_count);
 }
@@ -243,15 +244,19 @@ static struct lmv_object *__lmv_object_find(struct obd_device *obd, const struct
         return NULL;
 }
 
-struct lmv_object *lmv_object_find(struct obd_device *obd, 
+struct lmv_object *lmv_object_find(struct obd_device *obd,
                                    const struct lu_fid *fid)
 {
-        struct lmv_object       *obj;
+        struct lmv_obd          *lmv = &obd->u.lmv;
+        struct lmv_object       *obj = NULL;
         ENTRY;
 
-        cfs_spin_lock(&obj_list_lock);
-        obj = __lmv_object_find(obd, fid);
-        cfs_spin_unlock(&obj_list_lock);
+        /* For single MDT case, lmv_object list is always empty. */
+        if (lmv->desc.ld_tgt_count > 1) {
+                cfs_spin_lock(&obj_list_lock);
+                obj = __lmv_object_find(obd, fid);
+                cfs_spin_unlock(&obj_list_lock);
+        }
 
         RETURN(obj);
 }