Whamcloud - gitweb
LU-8130 lu_object: convert lu_object cache to rhashtable
[fs/lustre-release.git] / lustre / lov / lovsub_dev.c
index 359def4..c694c66 100644 (file)
@@ -1,6 +1,4 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
  * GPL HEADER START
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * You should have received a copy of the GNU General Public License
  * version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
  *
  * 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.
+ *
+ * Copyright (c) 2013, 2015, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
 
 #include "lov_cl_internal.h"
 
-/** \addtogroup lov lov @{ */
-
-/*****************************************************************************
- *
- * Lovsub transfer operations.
- *
+/** \addtogroup lov
+ *  @{
  */
 
-static void lovsub_req_completion(const struct lu_env *env,
-                                  const struct cl_req_slice *slice, int ioret)
-{
-        struct lovsub_req *lsr;
-
-        ENTRY;
-        lsr = cl2lovsub_req(slice);
-        OBD_SLAB_FREE_PTR(lsr, lovsub_req_kmem);
-        EXIT;
-}
-
-/**
- * Implementation of struct cl_req_operations::cro_attr_set() for lovsub
- * layer. Lov and lovsub are responsible only for struct obdo::o_stripe_idx
- * field, which is filled there.
- */
-static void lovsub_req_attr_set(const struct lu_env *env,
-                                const struct cl_req_slice *slice,
-                                const struct cl_object *obj,
-                                struct cl_req_attr *attr, obd_valid flags)
-{
-        struct lovsub_object *subobj;
-
-        ENTRY;
-        subobj = cl2lovsub(obj);
-        /*
-         * There is no OBD_MD_* flag for obdo::o_stripe_idx, so set it
-         * unconditionally. It never changes anyway.
-         */
-        attr->cra_oa->o_stripe_idx = subobj->lso_index;
-        EXIT;
-}
-
-static const struct cl_req_operations lovsub_req_ops = {
-        .cro_attr_set   = lovsub_req_attr_set,
-        .cro_completion = lovsub_req_completion
-};
-
 /*****************************************************************************
  *
  * Lov-sub device and device type functions.
@@ -95,116 +49,96 @@ static const struct cl_req_operations lovsub_req_ops = {
  */
 
 static int lovsub_device_init(const struct lu_env *env, struct lu_device *d,
-                              const char *name, struct lu_device *next)
+                             const char *name, struct lu_device *next)
 {
-        struct lovsub_device  *lsd = lu2lovsub_dev(d);
-        struct lu_device_type *ldt;
-        int rc;
-
-        ENTRY;
-        next->ld_site = d->ld_site;
-        ldt = next->ld_type;
-        LASSERT(ldt != NULL);
-        rc = ldt->ldt_ops->ldto_device_init(env, next, ldt->ldt_name, NULL);
-        if (rc) {
-                next->ld_site = NULL;
-                RETURN(rc);
-        }
-
-        lu_device_get(next);
-        lu_ref_add(&next->ld_reference, "lu-stack", &lu_site_init);
-        lsd->acid_next = lu2cl_dev(next);
-        RETURN(rc);
+       struct lovsub_device  *lsd = lu2lovsub_dev(d);
+       struct lu_device_type *ldt;
+       int rc;
+
+       ENTRY;
+       next->ld_site = d->ld_site;
+       ldt = next->ld_type;
+       LASSERT(ldt != NULL);
+       rc = ldt->ldt_ops->ldto_device_init(env, next, ldt->ldt_name, NULL);
+       if (rc) {
+               next->ld_site = NULL;
+               RETURN(rc);
+       }
+
+       lu_device_get(next);
+       lu_ref_add(&next->ld_reference, "lu-stack", &lu_site_init);
+       lsd->acid_next = lu2cl_dev(next);
+       RETURN(rc);
 }
 
 static struct lu_device *lovsub_device_fini(const struct lu_env *env,
-                                            struct lu_device *d)
+                                           struct lu_device *d)
 {
-        struct lu_device *next;
-        struct lovsub_device *lsd;
-
-        ENTRY;
-        lsd = lu2lovsub_dev(d);
-        next = cl2lu_dev(lsd->acid_next);
-        lsd->acid_super = NULL;
-        lsd->acid_next = NULL;
-        RETURN(next);
+       struct lu_device *next;
+       struct lovsub_device *lsd;
+
+       ENTRY;
+       lsd = lu2lovsub_dev(d);
+       next = cl2lu_dev(lsd->acid_next);
+       lsd->acid_next = NULL;
+       RETURN(next);
 }
 
 static struct lu_device *lovsub_device_free(const struct lu_env *env,
-                                            struct lu_device *d)
+                                           struct lu_device *d)
 {
-        struct lovsub_device *lsd  = lu2lovsub_dev(d);
-        struct lu_device     *next = cl2lu_dev(lsd->acid_next);
+       struct lovsub_device *lsd = lu2lovsub_dev(d);
+       struct lu_device *next = cl2lu_dev(lsd->acid_next);
 
-        cl_device_fini(lu2cl_dev(d));
-        OBD_FREE_PTR(lsd);
-        return next;
-}
-
-static int lovsub_req_init(const struct lu_env *env, struct cl_device *dev,
-                           struct cl_req *req)
-{
-        struct lovsub_req *lsr;
-        int result;
-
-        OBD_SLAB_ALLOC_PTR(lsr, lovsub_req_kmem);
-        if (lsr != NULL) {
-                cl_req_slice_add(req, &lsr->lsrq_cl, dev, &lovsub_req_ops);
-                result = 0;
-        } else
-                result = -ENOMEM;
-        return result;
+       lu_site_print(env, d->ld_site, &d->ld_ref, D_ERROR, lu_cdebug_printer);
+       cl_device_fini(lu2cl_dev(d));
+       OBD_FREE_PTR(lsd);
+       return next;
 }
 
 static const struct lu_device_operations lovsub_lu_ops = {
-        .ldo_object_alloc      = lovsub_object_alloc,
-        .ldo_process_config    = NULL,
-        .ldo_recovery_complete = NULL
-};
-
-static const struct cl_device_operations lovsub_cl_ops = {
-        .cdo_req_init = lovsub_req_init
+       .ldo_object_alloc      = lovsub_object_alloc,
+       .ldo_process_config    = NULL,
+       .ldo_recovery_complete = NULL
 };
 
 static struct lu_device *lovsub_device_alloc(const struct lu_env *env,
-                                             struct lu_device_type *t,
-                                             struct lustre_cfg *cfg)
+                                            struct lu_device_type *t,
+                                            struct lustre_cfg *cfg)
 {
-        struct lu_device     *d;
-        struct lovsub_device *lsd;
-
-        OBD_ALLOC_PTR(lsd);
-        if (lsd != NULL) {
-                int result;
-
-                result = cl_device_init(&lsd->acid_cl, t);
-                if (result == 0) {
-                        d = lovsub2lu_dev(lsd);
-                        d->ld_ops         = &lovsub_lu_ops;
-                        lsd->acid_cl.cd_ops = &lovsub_cl_ops;
-                } else
-                        d = ERR_PTR(result);
-        } else
-                d = ERR_PTR(-ENOMEM);
-        return d;
+       struct lu_device *d;
+       struct lovsub_device *lsd;
+
+       OBD_ALLOC_PTR(lsd);
+       if (lsd) {
+               int result;
+
+               result = cl_device_init(&lsd->acid_cl, t);
+               if (result == 0) {
+                       d = lovsub2lu_dev(lsd);
+                       d->ld_ops         = &lovsub_lu_ops;
+               } else
+                       d = ERR_PTR(result);
+       } else
+               d = ERR_PTR(-ENOMEM);
+       return d;
 }
 
 static const struct lu_device_type_operations lovsub_device_type_ops = {
-        .ldto_device_alloc = lovsub_device_alloc,
-        .ldto_device_free  = lovsub_device_free,
+       .ldto_device_alloc = lovsub_device_alloc,
+       .ldto_device_free = lovsub_device_free,
 
-        .ldto_device_init    = lovsub_device_init,
-        .ldto_device_fini    = lovsub_device_fini
+       .ldto_device_init = lovsub_device_init,
+       .ldto_device_fini = lovsub_device_fini
 };
 
 #define LUSTRE_LOVSUB_NAME         "lovsub"
 
 struct lu_device_type lovsub_device_type = {
-        .ldt_tags     = LU_DEVICE_CL,
-        .ldt_name     = LUSTRE_LOVSUB_NAME,
-        .ldt_ops      = &lovsub_device_type_ops,
-        .ldt_ctx_tags = LCT_CL_THREAD
+       .ldt_tags     = LU_DEVICE_CL,
+       .ldt_name     = LUSTRE_LOVSUB_NAME,
+       .ldt_ops      = &lovsub_device_type_ops,
+       .ldt_ctx_tags = LCT_CL_THREAD
 };