Whamcloud - gitweb
LU-3285 lvbo: pass lock as parameter to lvbo_update()
[fs/lustre-release.git] / lustre / include / lustre_dlm.h
index 0cd6641..2d0952e 100644 (file)
@@ -62,7 +62,7 @@ extern struct kset *ldlm_svc_kset;
 #define OBD_LDLM_DEVICENAME  "ldlm"
 
 #define LDLM_DEFAULT_LRU_SIZE (100 * num_online_cpus())
-#define LDLM_DEFAULT_MAX_ALIVE (cfs_time_seconds(3900)) /* 65 min */
+#define LDLM_DEFAULT_MAX_ALIVE         3900    /* 3900 seconds ~65 min */
 #define LDLM_CTIME_AGE_LIMIT (10)
 #define LDLM_DEFAULT_PARALLEL_AST_LIMIT 1024
 
@@ -289,11 +289,10 @@ typedef int (*ldlm_cancel_cbt)(struct ldlm_lock *lock);
  * of ldlm_[res_]lvbo_[init,update,fill]() functions.
  */
 struct ldlm_valblock_ops {
-        int (*lvbo_init)(struct ldlm_resource *res);
-        int (*lvbo_update)(struct ldlm_resource *res,
-                           struct ptlrpc_request *r,
-                           int increase);
-        int (*lvbo_free)(struct ldlm_resource *res);
+       int (*lvbo_init)(struct ldlm_resource *res);
+       int (*lvbo_update)(struct ldlm_resource *res, struct ldlm_lock *lock,
+                          struct ptlrpc_request *r,  int increase);
+       int (*lvbo_free)(struct ldlm_resource *res);
        /* Return size of lvb data appropriate RPC size can be reserved */
        int (*lvbo_size)(struct ldlm_lock *lock);
        /* Called to fill in lvb data to RPC buffer @buf */
@@ -423,8 +422,10 @@ struct ldlm_namespace {
         * controlled by available memory on this client and on server.
         */
        unsigned int            ns_max_unused;
+
        /** Maximum allowed age (last used time) for locks in the LRU */
-       unsigned int            ns_max_age;
+       ktime_t                 ns_max_age;
+
        /**
         * Server only: number of times we evicted clients due to lack of reply
         * to ASTs.
@@ -607,8 +608,8 @@ struct ldlm_cb_async_args {
        struct ldlm_lock        *ca_lock;
 };
 
-/** The ldlm_glimpse_work is allocated on the stack and should not be freed. */
-#define LDLM_GL_WORK_NOFREE 0x1
+/** The ldlm_glimpse_work was slab allocated & must be freed accordingly.*/
+#define LDLM_GL_WORK_SLAB_ALLOCATED 0x1
 
 /** Interval node data for each LDLM_EXTENT lock. */
 struct ldlm_interval {
@@ -819,10 +820,9 @@ struct ldlm_lock {
        time64_t                l_last_activity;
 
        /**
-        * Time last used by e.g. being matched by lock match.
-        * Jiffies. Should be converted to time if needed.
+        * Time, in nanoseconds, last used by e.g. being matched by lock match.
         */
-       cfs_time_t              l_last_used;
+       ktime_t                 l_last_used;
 
        /** Originally requested extent for the extent lock. */
        struct ldlm_extent      l_req_extent;
@@ -859,8 +859,7 @@ struct ldlm_lock {
         * The lists this could be linked into are:
         * waiting_locks_list (protected by waiting_locks_spinlock),
         * then if the lock timed out, it is moved to
-        * expired_lock_thread.elt_expired_locks for further processing.
-        * Protected by elt_lock.
+        * expired_lock_list for further processing.
         */
        struct list_head        l_pending_chain;
 
@@ -1124,8 +1123,7 @@ struct ldlm_enqueue_info {
        void            *ei_cb_gl;      /** lock glimpse callback */
        void            *ei_cbdata;     /** Data to be passed into callbacks. */
        void            *ei_namespace;  /** lock namespace **/
-       unsigned int    ei_enq_slave:1, /** whether enqueue slave stripes */
-                       ei_nonblock:1;  /** non block enqueue */
+       unsigned int    ei_enq_slave:1; /** whether enqueue slave stripes */
 };
 
 #define ei_res_id      ei_cb_gl
@@ -1361,9 +1359,11 @@ ldlm_handle2lock_long(const struct lustre_handle *h, __u64 flags)
  * Update Lock Value Block Operations (LVBO) on a resource taking into account
  * data from request \a r
  */
-static inline int ldlm_res_lvbo_update(struct ldlm_resource *res,
-                                      struct ptlrpc_request *req, int increase)
+static inline int ldlm_lvbo_update(struct ldlm_resource *res,
+                                  struct ldlm_lock *lock,
+                                  struct ptlrpc_request *req, int increase)
 {
+       struct ldlm_namespace *ns = ldlm_res_to_ns(res);
        int rc;
 
        /* delayed lvb init may be required */
@@ -1373,14 +1373,18 @@ static inline int ldlm_res_lvbo_update(struct ldlm_resource *res,
                return rc;
        }
 
-       if (ldlm_res_to_ns(res)->ns_lvbo &&
-           ldlm_res_to_ns(res)->ns_lvbo->lvbo_update) {
-               return ldlm_res_to_ns(res)->ns_lvbo->lvbo_update(res, req,
-                                                                increase);
-       }
+       if (ns->ns_lvbo && ns->ns_lvbo->lvbo_update)
+               return ns->ns_lvbo->lvbo_update(res, lock, req, increase);
+
        return 0;
 }
 
+static inline int ldlm_res_lvbo_update(struct ldlm_resource *res,
+                                      struct ptlrpc_request *req, int increase)
+{
+       return ldlm_lvbo_update(res, NULL, req, increase);
+}
+
 int ldlm_error2errno(enum ldlm_error error);
 enum ldlm_error ldlm_errno2error(int err_no); /* don't call it `errno': this
                                               * confuses user-space. */