Whamcloud - gitweb
LU-13974 llog: check stale osp object
[fs/lustre-release.git] / lustre / include / dt_object.h
index 5146cc1..0330989 100644 (file)
@@ -298,6 +298,17 @@ struct dt_device_operations {
                       struct dt_device *dev);
 
        /**
+        * Wait pending quota update finish
+        *
+        * There might be a window that quota usage has been updated,
+        * but commit callback to reduce pending write have not been
+        * finished, this is used to wait all pending update done.
+        *
+        * \param[in] dev       dt device
+        */
+       void (*dt_wait_quota_pending)(struct dt_device *dev);
+
+       /**
         * Start transaction commit asynchronously.
         *
 
@@ -1052,6 +1063,18 @@ struct dt_object_operations {
        int   (*do_invalidate)(const struct lu_env *env, struct dt_object *dt);
 
        /**
+        * Check object stale state.
+        *
+        * OSP only.
+        *
+        * \param[in] dt        object
+        *
+        * \retval true         for stale object
+        * \retval false        for not stale object
+        */
+       bool (*do_check_stale)(struct dt_object *dt);
+
+       /**
         * Declare intention to instaintiate extended layout component.
         *
         * \param[in] env       execution environment
@@ -1989,7 +2012,9 @@ struct thandle {
         * including OSTs */
                                th_complex:1,
        /* whether ignore quota */
-                               th_ignore_quota:1;
+                               th_ignore_quota:1,
+       /* whether restart transaction */
+                               th_restart_tran:1;
 };
 
 /**
@@ -2257,7 +2282,8 @@ static inline int dt_declare_record_write(const struct lu_env *env,
 
        LASSERTF(dt != NULL, "dt is NULL when we want to write record\n");
        LASSERT(th != NULL);
-       LASSERT(dt->do_body_ops);
+       LASSERTF(dt->do_body_ops, DFID" doesn't exit\n",
+                PFID(lu_object_fid(&dt->do_lu)));
        LASSERT(dt->do_body_ops->dbo_declare_write);
        rc = dt->do_body_ops->dbo_declare_write(env, dt, buf, pos, th);
        return rc;
@@ -2372,6 +2398,15 @@ static inline int dt_write_locked(const struct lu_env *env,
         return dt->do_ops->do_write_locked(env, dt);
 }
 
+static inline bool dt_object_stale(struct dt_object *dt)
+{
+       LASSERT(dt);
+       LASSERT(dt->do_ops);
+       LASSERT(dt->do_ops->do_check_stale);
+
+       return dt->do_ops->do_check_stale(dt);
+}
+
 static inline int dt_declare_attr_get(const struct lu_env *env,
                                      struct dt_object *dt)
 {
@@ -2587,9 +2622,9 @@ static inline int dt_ladvise(const struct lu_env *env, struct dt_object *dt,
        return dt->do_body_ops->dbo_ladvise(env, dt, start, end, advice);
 }
 
-static inline int dt_declare_falloc(const struct lu_env *env,
-                                   struct dt_object *dt, __u64 start,
-                                   __u64 end, int mode, struct thandle *th)
+static inline int dt_declare_fallocate(const struct lu_env *env,
+                                      struct dt_object *dt, __u64 start,
+                                      __u64 end, int mode, struct thandle *th)
 {
        LASSERT(dt);
        if (!dt->do_body_ops)
@@ -2696,6 +2731,14 @@ static inline int dt_ro(const struct lu_env *env, struct dt_device *dev)
         return dev->dd_ops->dt_ro(env, dev);
 }
 
+static inline void dt_wait_quota_pending(struct dt_device *dev)
+{
+       LASSERT(dev);
+       LASSERT(dev->dd_ops);
+       if (dev->dd_ops->dt_wait_quota_pending)
+               dev->dd_ops->dt_wait_quota_pending(dev);
+}
+
 static inline int dt_declare_insert(const struct lu_env *env,
                                     struct dt_object *dt,
                                     const struct dt_rec *rec,