Whamcloud - gitweb
LU-9728 osd: use GFP_HIGHUSER for non-local IO
[fs/lustre-release.git] / lustre / include / dt_object.h
index 5c568ee..436139f 100644 (file)
@@ -966,10 +966,8 @@ struct dt_object_operations {
         * \retval 0            on success
         * \retval negative     negated errno on error
         */
-       int (*do_object_sync)(const struct lu_env *env,
-                             struct dt_object *obj,
-                             __u64 start,
-                             __u64 end);
+       int (*do_object_sync)(const struct lu_env *env, struct dt_object *obj,
+                             __u64 start, __u64 end);
 
        /**
         * Lock object.
@@ -1026,6 +1024,47 @@ struct dt_object_operations {
         * \retval negative     negated errno on error
         */
        int   (*do_invalidate)(const struct lu_env *env, struct dt_object *dt);
+
+       /**
+        * Declare intention to instaintiate extended layout component.
+        *
+        * \param[in] env       execution environment
+        * \param[in] dt        DT object
+        * \param[in] layout    data structure to describe the changes to
+        *                      the DT object's layout
+        * \param[in] buf       buffer containing client's lovea or empty
+        *
+        * \retval 0            success
+        * \retval -ne          error code
+        */
+       int (*do_declare_layout_change)(const struct lu_env *env,
+                                       struct dt_object *dt,
+                                       struct layout_intent *layout,
+                                       const struct lu_buf *buf,
+                                       struct thandle *th);
+
+       /**
+        * Client is trying to write to un-instantiated layout component.
+        *
+        * \param[in] env       execution environment
+        * \param[in] dt        DT object
+        * \param[in] layout    data structure to describe the changes to
+        *                      the DT object's layout
+        * \param[in] buf       buffer containing client's lovea or empty
+        *
+        * \retval 0            success
+        * \retval -ne          error code
+        */
+       int (*do_layout_change)(const struct lu_env *env, struct dt_object *dt,
+                               struct layout_intent *layout,
+                               const struct lu_buf *buf, struct thandle *th);
+};
+
+enum dt_bufs_type {
+       DT_BUFS_TYPE_READ       = 0x0000,
+       DT_BUFS_TYPE_WRITE      = 0x0001,
+       DT_BUFS_TYPE_READAHEAD  = 0x0002,
+       DT_BUFS_TYPE_LOCAL      = 0x0004,
 };
 
 /**
@@ -1145,7 +1184,7 @@ struct dt_body_operations {
                            loff_t pos,
                            ssize_t len,
                            struct niobuf_local *lb,
-                           int rw);
+                           enum dt_bufs_type rw);
 
        /**
         * Release reference granted by ->dbo_bufs_get().
@@ -1956,6 +1995,18 @@ dt_object_locate(struct dt_object *dto, struct dt_device *dt_dev)
        return NULL;
 }
 
+static inline void dt_object_put(const struct lu_env *env,
+                                struct dt_object *dto)
+{
+       lu_object_put(env, &dto->do_lu);
+}
+
+static inline void dt_object_put_nocache(const struct lu_env *env,
+                                        struct dt_object *dto)
+{
+       lu_object_put_nocache(env, &dto->do_lu);
+}
+
 int local_oid_storage_init(const struct lu_env *env, struct dt_device *dev,
                           const struct lu_fid *first_fid,
                           struct local_oid_storage **los);
@@ -2335,7 +2386,7 @@ static inline int dt_ref_del(const struct lu_env *env,
 
 static inline int dt_bufs_get(const struct lu_env *env, struct dt_object *d,
                              struct niobuf_remote *rnb,
-                             struct niobuf_local *lnb, int rw)
+                             struct niobuf_local *lnb, enum dt_bufs_type rw)
 {
        LASSERT(d);
        LASSERT(d->do_body_ops);
@@ -2700,6 +2751,30 @@ static inline int dt_lookup(const struct lu_env *env,
         return ret;
 }
 
+static inline int dt_declare_layout_change(const struct lu_env *env,
+                                          struct dt_object *o,
+                                          struct layout_intent *layout,
+                                          const struct lu_buf *buf,
+                                          struct thandle *th)
+{
+       LASSERT(o);
+       LASSERT(o->do_ops);
+       LASSERT(o->do_ops->do_declare_layout_change);
+       return o->do_ops->do_declare_layout_change(env, o, layout, buf, th);
+}
+
+static inline int dt_layout_change(const struct lu_env *env,
+                                  struct dt_object *o,
+                                  struct layout_intent *layout,
+                                  const struct lu_buf *buf,
+                                  struct thandle *th)
+{
+       LASSERT(o);
+       LASSERT(o->do_ops);
+       LASSERT(o->do_ops->do_layout_change);
+       return o->do_ops->do_layout_change(env, o, layout, buf, th);
+}
+
 struct dt_find_hint {
        struct lu_fid        *dfh_fid;
        struct dt_device     *dfh_dt;