Whamcloud - gitweb
LU-10650 obd: add check to obd_statfs
[fs/lustre-release.git] / lustre / include / obd_class.h
index 562029f..748cc47 100644 (file)
@@ -23,7 +23,7 @@
  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2011, 2016, Intel Corporation.
+ * Copyright (c) 2011, 2017, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
@@ -138,6 +138,7 @@ struct cfg_interop_param {
 char *lustre_cfg_string(struct lustre_cfg *lcfg, u32 index);
 struct lustre_cfg *lustre_cfg_rename(struct lustre_cfg *cfg,
                                     const char *new_name);
+void print_lustre_cfg(struct lustre_cfg *lcfg);
 int class_process_config(struct lustre_cfg *lcfg);
 int class_process_proc_param(char *prefix, struct lprocfs_vars *lvars,
                             struct lustre_cfg *lcfg, void *data);
@@ -222,7 +223,7 @@ static inline bool logname_is_barrier(const char *logname)
 struct config_llog_data {
        struct ldlm_res_id          cld_resid;
        struct config_llog_instance cld_cfg;
-       struct list_head            cld_list_chain;
+       struct list_head            cld_list_chain;/* on config_llog_list */
        atomic_t                    cld_refcount;
        struct config_llog_data    *cld_sptlrpc;/* depended sptlrpc log */
        struct config_llog_data    *cld_params; /* common parameters log */
@@ -639,7 +640,7 @@ static inline int obd_cleanup(struct obd_device *obd)
                 }
         }
        if (!obd->obd_type->typ_dt_ops->o_cleanup)
-               RETURN(-EOPNOTSUPP);
+               RETURN(0);
 
         OBD_COUNTER_INCREMENT(obd, cleanup);
 
@@ -1078,7 +1079,7 @@ static inline int obd_destroy_export(struct obd_export *exp)
  * target.  Use a value of "cfs_time_current() + HZ" to guarantee freshness. */
 static inline int obd_statfs_async(struct obd_export *exp,
                                   struct obd_info *oinfo,
-                                  __u64 max_age,
+                                  time64_t max_age,
                                   struct ptlrpc_request_set *rqset)
 {
        int rc = 0;
@@ -1096,9 +1097,9 @@ static inline int obd_statfs_async(struct obd_export *exp,
        }
        OBD_COUNTER_INCREMENT(obd, statfs);
 
-       CDEBUG(D_SUPER, "%s: osfs %p age %llu, max_age %llu\n",
+       CDEBUG(D_SUPER, "%s: osfs %p age %lld, max_age %lld\n",
               obd->obd_name, &obd->obd_osfs, obd->obd_osfs_age, max_age);
-       if (cfs_time_before_64(obd->obd_osfs_age, max_age)) {
+       if (obd->obd_osfs_age < max_age) {
                rc = OBP(obd, statfs_async)(exp, oinfo, max_age, rqset);
        } else {
                CDEBUG(D_SUPER,
@@ -1117,37 +1118,11 @@ static inline int obd_statfs_async(struct obd_export *exp,
        RETURN(rc);
 }
 
-static inline int obd_statfs_rqset(struct obd_export *exp,
-                                   struct obd_statfs *osfs, __u64 max_age,
-                                   __u32 flags)
-{
-       struct ptlrpc_request_set *set = NULL;
-       struct obd_info oinfo = {
-               .oi_osfs = osfs,
-               .oi_flags = flags,
-       };
-       int rc = 0;
-
-       ENTRY;
-
-       set = ptlrpc_prep_set();
-       if (set == NULL)
-               RETURN(-ENOMEM);
-
-       rc = obd_statfs_async(exp, &oinfo, max_age, set);
-       if (rc == 0)
-               rc = ptlrpc_set_wait(set);
-
-       ptlrpc_set_destroy(set);
-
-       RETURN(rc);
-}
-
 /* @max_age is the oldest time in jiffies that we accept using a cached data.
  * If the cache is older than @max_age we will get a new value from the
  * target.  Use a value of "cfs_time_current() + HZ" to guarantee freshness. */
 static inline int obd_statfs(const struct lu_env *env, struct obd_export *exp,
-                             struct obd_statfs *osfs, __u64 max_age,
+                            struct obd_statfs *osfs, time64_t max_age,
                              __u32 flags)
 {
         int rc = 0;
@@ -1157,20 +1132,22 @@ static inline int obd_statfs(const struct lu_env *env, struct obd_export *exp,
         if (obd == NULL)
                 RETURN(-EINVAL);
 
+       OBD_CHECK_DEV_ACTIVE(obd);
+
        if (!obd->obd_type || !obd->obd_type->typ_dt_ops->o_statfs) {
                CERROR("%s: no %s operation\n", obd->obd_name, __func__);
                RETURN(-EOPNOTSUPP);
        }
         OBD_COUNTER_INCREMENT(obd, statfs);
 
-       CDEBUG(D_SUPER, "osfs %llu, max_age %llu\n",
+       CDEBUG(D_SUPER, "osfs %lld, max_age %lld\n",
                obd->obd_osfs_age, max_age);
-        if (cfs_time_before_64(obd->obd_osfs_age, max_age)) {
+       if (obd->obd_osfs_age < max_age) {
                 rc = OBP(obd, statfs)(env, exp, osfs, max_age, flags);
                 if (rc == 0) {
                        spin_lock(&obd->obd_osfs_lock);
                        memcpy(&obd->obd_osfs, osfs, sizeof(obd->obd_osfs));
-                       obd->obd_osfs_age = cfs_time_current_64();
+                       obd->obd_osfs_age = ktime_get_seconds();
                        spin_unlock(&obd->obd_osfs_lock);
                }
        } else {
@@ -1567,6 +1544,23 @@ static inline int md_fsync(struct obd_export *exp, const struct lu_fid *fid,
        RETURN(rc);
 }
 
+/* FLR: resync mirrored files. */
+static inline int md_file_resync(struct obd_export *exp,
+                                struct md_op_data *data)
+{
+       int rc;
+
+       ENTRY;
+       rc = exp_check_ops(exp);
+       if (rc)
+               RETURN(rc);
+
+       EXP_MD_COUNTER_INCREMENT(exp, file_resync);
+       rc = MDP(exp->exp_obd, file_resync)(exp, data);
+
+       RETURN(rc);
+}
+
 static inline int md_read_page(struct obd_export *exp,
                               struct md_op_data *op_data,
                               struct md_callback *cb_op,