Whamcloud - gitweb
LU-5823 clio: add coo_getstripe interface
[fs/lustre-release.git] / lustre / lov / lov_object.c
index f7ef365..718d035 100644 (file)
@@ -80,6 +80,29 @@ struct lov_layout_operations {
 
 static int lov_layout_wait(const struct lu_env *env, struct lov_object *lov);
 
+struct lov_stripe_md *lov_lsm_get(struct cl_object *clobj)
+{
+       struct lu_object *luobj;
+       struct lov_stripe_md *lsm = NULL;
+
+       if (clobj == NULL)
+               return NULL;
+
+       luobj = lu_object_locate(&cl_object_header(clobj)->coh_lu,
+                                &lov_device_type);
+       if (luobj != NULL)
+               lsm = lov_lsm_addref(lu2lov(luobj));
+       return lsm;
+}
+EXPORT_SYMBOL(lov_lsm_get);
+
+void lov_lsm_put(struct cl_object *unused, struct lov_stripe_md *lsm)
+{
+       if (lsm != NULL)
+               lov_free_memmd(&lsm);
+}
+EXPORT_SYMBOL(lov_lsm_put);
+
 /*****************************************************************************
  *
  * Lov object layout operations.
@@ -917,13 +940,31 @@ int lov_lock_init(const struct lu_env *env, struct cl_object *obj,
                                    io);
 }
 
+static int lov_object_getstripe(const struct lu_env *env, struct cl_object *obj,
+                               struct lov_user_md __user *lum)
+{
+       struct lov_object       *lov = cl2lov(obj);
+       struct lov_stripe_md    *lsm;
+       int                     rc = 0;
+       ENTRY;
+
+       lsm = lov_lsm_addref(lov);
+       if (lsm == NULL)
+               RETURN(-ENODATA);
+
+       rc = lov_getstripe(cl2lov(obj), lsm, lum);
+       lov_lsm_put(obj, lsm);
+       RETURN(rc);
+}
+
 static const struct cl_object_operations lov_ops = {
         .coo_page_init = lov_page_init,
         .coo_lock_init = lov_lock_init,
         .coo_io_init   = lov_io_init,
         .coo_attr_get  = lov_attr_get,
         .coo_attr_set  = lov_attr_set,
-        .coo_conf_set  = lov_conf_set
+       .coo_conf_set  = lov_conf_set,
+       .coo_getstripe = lov_object_getstripe
 };
 
 static const struct lu_object_operations lov_lu_obj_ops = {
@@ -975,29 +1016,6 @@ struct lov_stripe_md *lov_lsm_addref(struct lov_object *lov)
        return lsm;
 }
 
-struct lov_stripe_md *lov_lsm_get(struct cl_object *clobj)
-{
-       struct lu_object *luobj;
-       struct lov_stripe_md *lsm = NULL;
-
-       if (clobj == NULL)
-               return NULL;
-
-       luobj = lu_object_locate(&cl_object_header(clobj)->coh_lu,
-                                &lov_device_type);
-       if (luobj != NULL)
-               lsm = lov_lsm_addref(lu2lov(luobj));
-       return lsm;
-}
-EXPORT_SYMBOL(lov_lsm_get);
-
-void lov_lsm_put(struct cl_object *unused, struct lov_stripe_md *lsm)
-{
-       if (lsm != NULL)
-               lov_free_memmd(&lsm);
-}
-EXPORT_SYMBOL(lov_lsm_put);
-
 int lov_read_and_clear_async_rc(struct cl_object *clob)
 {
        struct lu_object *luobj;