Whamcloud - gitweb
LU-5099 api: transfer object type via dt_insert API
[fs/lustre-release.git] / lustre / include / dt_object.h
index cdd321a..a39c461 100644 (file)
@@ -212,6 +212,7 @@ enum dt_index_flags {
  */
 extern const struct dt_index_features dt_directory_features;
 extern const struct dt_index_features dt_otable_features;
+extern const struct dt_index_features dt_lfsck_orphan_features;
 extern const struct dt_index_features dt_lfsck_features;
 
 /* index features supported by the accounting objects */
@@ -278,6 +279,8 @@ enum dt_format_type dt_mode_to_dft(__u32 mode);
 
 typedef __u64 dt_obj_version_t;
 
+union ldlm_policy_data;
+
 /**
  * Per-dt-object operations.
  */
@@ -448,18 +451,19 @@ struct dt_object_operations {
         int   (*do_ref_del)(const struct lu_env *env,
                             struct dt_object *dt, struct thandle *th);
 
-        struct obd_capa *(*do_capa_get)(const struct lu_env *env,
-                                        struct dt_object *dt,
-                                        struct lustre_capa *old,
-                                        __u64 opc);
-        int (*do_object_sync)(const struct lu_env *, struct dt_object *);
-        /**
-         * Get object info of next level. Currently, only get inode from osd.
-         * This is only used by quota b=16542
-         * precondition: dt_object_exists(dt);
-         */
-        int (*do_data_get)(const struct lu_env *env, struct dt_object *dt,
-                           void **data);
+       struct obd_capa *(*do_capa_get)(const struct lu_env *env,
+                                       struct dt_object *dt,
+                                       struct lustre_capa *old,
+                                       __u64 opc);
+       int (*do_object_sync)(const struct lu_env *env, struct dt_object *obj,
+                             __u64 start, __u64 end);
+       /**
+        * Get object info of next level. Currently, only get inode from osd.
+        * This is only used by quota b=16542
+        * precondition: dt_object_exists(dt);
+        */
+       int (*do_data_get)(const struct lu_env *env, struct dt_object *dt,
+                          void **data);
 
        /**
         * Lock object.
@@ -467,7 +471,11 @@ struct dt_object_operations {
        int (*do_object_lock)(const struct lu_env *env, struct dt_object *dt,
                              struct lustre_handle *lh,
                              struct ldlm_enqueue_info *einfo,
-                             void *policy);
+                             union ldlm_policy_data *policy);
+
+       int (*do_object_unlock)(const struct lu_env *env, struct dt_object *dt,
+                               struct ldlm_enqueue_info *einfo,
+                               union ldlm_policy_data *policy);
 };
 
 /**
@@ -480,17 +488,17 @@ struct dt_body_operations {
         ssize_t (*dbo_read)(const struct lu_env *env, struct dt_object *dt,
                             struct lu_buf *buf, loff_t *pos,
                             struct lustre_capa *capa);
-        /**
-         * precondition: dt_object_exists(dt);
-         */
-        ssize_t (*dbo_declare_write)(const struct lu_env *env,
-                                     struct dt_object *dt,
-                                     const loff_t size, loff_t pos,
-                                     struct thandle *handle);
-        ssize_t (*dbo_write)(const struct lu_env *env, struct dt_object *dt,
-                             const struct lu_buf *buf, loff_t *pos,
-                             struct thandle *handle, struct lustre_capa *capa,
-                             int ignore_quota);
+       /**
+        * precondition: dt_object_exists(dt);
+        */
+       ssize_t (*dbo_declare_write)(const struct lu_env *env,
+                                    struct dt_object *dt,
+                                    const struct lu_buf *buf, loff_t pos,
+                                    struct thandle *handle);
+       ssize_t (*dbo_write)(const struct lu_env *env, struct dt_object *dt,
+                            const struct lu_buf *buf, loff_t *pos,
+                            struct thandle *handle, struct lustre_capa *capa,
+                            int ignore_quota);
         /*
          * methods for zero-copy IO
          */
@@ -622,6 +630,9 @@ struct dt_index_operations {
                                       const struct dt_it *di,
                                       struct dt_rec *rec,
                                       __u32 attr);
+               int        (*rec_size)(const struct lu_env *env,
+                                      const struct dt_it *di,
+                                     __u32 attr);
                 __u64        (*store)(const struct lu_env *env,
                                       const struct dt_it *di);
                 int           (*load)(const struct lu_env *env,
@@ -936,24 +947,35 @@ int local_object_unlink(const struct lu_env *env, struct dt_device *dt,
 static inline int dt_object_lock(const struct lu_env *env,
                                 struct dt_object *o, struct lustre_handle *lh,
                                 struct ldlm_enqueue_info *einfo,
-                                void *policy)
+                                union ldlm_policy_data *policy)
 {
-       LASSERT(o);
-       LASSERT(o->do_ops);
-       LASSERT(o->do_ops->do_object_lock);
+       LASSERT(o != NULL);
+       LASSERT(o->do_ops != NULL);
+       LASSERT(o->do_ops->do_object_lock != NULL);
        return o->do_ops->do_object_lock(env, o, lh, einfo, policy);
 }
 
+static inline int dt_object_unlock(const struct lu_env *env,
+                                  struct dt_object *o,
+                                  struct ldlm_enqueue_info *einfo,
+                                  union ldlm_policy_data *policy)
+{
+       LASSERT(o != NULL);
+       LASSERT(o->do_ops != NULL);
+       LASSERT(o->do_ops->do_object_unlock != NULL);
+       return o->do_ops->do_object_unlock(env, o, einfo, policy);
+}
+
 int dt_lookup_dir(const struct lu_env *env, struct dt_object *dir,
                  const char *name, struct lu_fid *fid);
 
-static inline int dt_object_sync(const struct lu_env *env,
-                                 struct dt_object *o)
+static inline int dt_object_sync(const struct lu_env *env, struct dt_object *o,
+                                __u64 start, __u64 end)
 {
-        LASSERT(o);
-        LASSERT(o->do_ops);
-        LASSERT(o->do_ops->do_object_sync);
-        return o->do_ops->do_object_sync(env, o);
+       LASSERT(o);
+       LASSERT(o->do_ops);
+       LASSERT(o->do_ops->do_object_sync);
+       return o->do_ops->do_object_sync(env, o, start, end);
 }
 
 int dt_declare_version_set(const struct lu_env *env, struct dt_object *o,
@@ -1020,18 +1042,19 @@ static inline int dt_trans_cb_add(struct thandle *th,
 
 
 static inline int dt_declare_record_write(const struct lu_env *env,
-                                          struct dt_object *dt,
-                                          int size, loff_t pos,
-                                          struct thandle *th)
+                                         struct dt_object *dt,
+                                         const struct lu_buf *buf,
+                                         loff_t pos,
+                                         struct thandle *th)
 {
-        int rc;
+       int rc;
 
-        LASSERTF(dt != NULL, "dt is NULL when we want to write record\n");
-        LASSERT(th != NULL);
-        LASSERT(dt->do_body_ops);
-        LASSERT(dt->do_body_ops->dbo_declare_write);
-        rc = dt->do_body_ops->dbo_declare_write(env, dt, size, pos, th);
-        return rc;
+       LASSERTF(dt != NULL, "dt is NULL when we want to write record\n");
+       LASSERT(th != NULL);
+       LASSERT(dt->do_body_ops);
+       LASSERT(dt->do_body_ops->dbo_declare_write);
+       rc = dt->do_body_ops->dbo_declare_write(env, dt, buf, pos, th);
+       return rc;
 }
 
 static inline int dt_declare_create(const struct lu_env *env,
@@ -1524,6 +1547,20 @@ struct dt_find_hint {
        struct dt_object     *dfh_o;
 };
 
+struct dt_insert_rec {
+       union {
+               const struct lu_fid     *rec_fid;
+               void                    *rec_data;
+       };
+       union {
+               struct {
+                       __u32            rec_type;
+                       __u32            rec_padding;
+               };
+               __u64                    rec_misc;
+       };
+};
+
 struct dt_thread_info {
        char                     dti_buf[DT_MAX_PATH];
        struct dt_find_hint      dti_dfh;
@@ -1534,6 +1571,7 @@ struct dt_thread_info {
        struct lu_buf            dti_lb;
        struct lu_object_conf    dti_conf;
        loff_t                   dti_off;
+       struct dt_insert_rec     dti_dt_rec;
 };
 
 extern struct lu_context_key dt_key;