Whamcloud - gitweb
LU-1330 obdclass: splits server-side object stack from client
[fs/lustre-release.git] / lustre / include / dt_object.h
index 07f9a4b..2d7c0df 100644 (file)
@@ -67,6 +67,7 @@ struct dt_object;
 struct dt_index_features;
 struct niobuf_local;
 struct niobuf_remote;
+struct ldlm_enqueue_info;
 
 typedef enum {
         MNTOPT_USERXATTR        = 0x00000001,
@@ -212,6 +213,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_features;
 
 /* index features supported by the accounting objects */
 extern const struct dt_index_features dt_acct_features;
@@ -524,6 +526,12 @@ struct dt_body_operations {
                           struct lustre_capa *capa);
 };
 
+struct dt_lock_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);
+};
 /**
  * Incomplete type of index record.
  */
@@ -667,6 +675,7 @@ struct dt_object {
         const struct dt_object_operations *do_ops;
         const struct dt_body_operations   *do_body_ops;
         const struct dt_index_operations  *do_index_ops;
+       const struct dt_lock_operations   *do_lock_ops;
 };
 
 /*
@@ -703,6 +712,11 @@ static inline int dt_object_exists(const struct dt_object *dt)
         return lu_object_exists(&dt->do_lu);
 }
 
+static inline int dt_object_remote(const struct dt_object *dt)
+{
+       return lu_object_remote(&dt->do_lu);
+}
+
 static inline struct dt_object *lu2dt_obj(struct lu_object *o)
 {
        LASSERT(ergo(o != NULL, lu_device_is_dt(o->lo_dev)));
@@ -738,10 +752,10 @@ struct thandle {
        __s32             th_result;
 
        /** whether we need sync commit */
-       int               th_sync:1;
+       unsigned int            th_sync:1;
 
        /* local transation, no need to inform other layers */
-       int               th_local:1;
+       unsigned int            th_local:1;
 
        /* In DNE, one transaction can be disassemblied into
         * updates on several different MDTs, and these updates
@@ -798,6 +812,10 @@ int dt_path_parser(const struct lu_env *env,
                    char *local, dt_entry_func_t entry_func,
                    void *data);
 
+struct dt_object *
+dt_store_resolve(const struct lu_env *env, struct dt_device *dt,
+                const char *path, struct lu_fid *fid);
+
 struct dt_object *dt_store_open(const struct lu_env *env,
                                 struct dt_device *dt,
                                 const char *dirname,
@@ -865,6 +883,17 @@ local_index_find_or_create_with_fid(const struct lu_env *env,
                                    const char *name, __u32 mode,
                                    const struct dt_index_features *ft);
 
+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)
+{
+       LASSERT(o);
+       LASSERT(o->do_lock_ops);
+       LASSERT(o->do_lock_ops->do_object_lock);
+       return o->do_lock_ops->do_object_lock(env, o, lh, einfo, policy);
+}
+
 int dt_lookup_dir(const struct lu_env *env, struct dt_object *dir,
                  const char *name, struct lu_fid *fid);
 
@@ -1445,4 +1474,7 @@ static inline struct dt_thread_info *dt_info(const struct lu_env *env)
        return dti;
 }
 
+int dt_global_init(void);
+void dt_global_fini(void);
+
 #endif /* __LUSTRE_DT_OBJECT_H */