Whamcloud - gitweb
LU-13004 ptlrpc: Allow BULK_BUF_KIOV to accept a kvec
[fs/lustre-release.git] / lustre / ptlrpc / nrs_orr.c
index ce15db2..38e2d05 100644 (file)
@@ -20,7 +20,7 @@
  * GPL HEADER END
  */
 /*
- * Copyright (c) 2013, Intel Corporation.
+ * Copyright (c) 2013, 2017, Intel Corporation.
  *
  * Copyright 2012 Xyratex Technology Limited
  */
@@ -45,7 +45,6 @@
 #include <obd_support.h>
 #include <obd_class.h>
 #include <lustre_net.h>
-#include <lustre/lustre_idl.h>
 #include <lustre_req_layout.h>
 #include "ptlrpc_internal.h"
 
@@ -154,6 +153,10 @@ static int nrs_orr_key_fill(struct nrs_orr_data *orrd,
                return 0;
        }
 
+       /* Bounce unconnected requests to the default policy. */
+       if (req->rq_export == NULL)
+               return -ENOTCONN;
+
        if (nrq->nr_u.orr.or_orr_set || nrq->nr_u.orr.or_trr_set)
                memset(&nrq->nr_u.orr.or_key, 0, sizeof(nrq->nr_u.orr.or_key));
 
@@ -196,9 +199,9 @@ static void nrs_orr_range_fill_logical(struct niobuf_remote *nb, int niocount,
                                       struct nrs_orr_req_range *range)
 {
        /* Should we do this at page boundaries ? */
-       range->or_start = nb[0].offset & CFS_PAGE_MASK;
-       range->or_end = (nb[niocount - 1].offset +
-                        nb[niocount - 1].len - 1) | ~CFS_PAGE_MASK;
+       range->or_start = nb[0].rnb_offset & PAGE_MASK;
+       range->or_end = (nb[niocount - 1].rnb_offset +
+                        nb[niocount - 1].rnb_len - 1) | ~PAGE_MASK;
 }
 
 /**
@@ -228,18 +231,18 @@ static int nrs_orr_range_fill_physical(struct ptlrpc_nrs_request *nrq,
        struct ptlrpc_request     *req = container_of(nrq,
                                                      struct ptlrpc_request,
                                                      rq_nrq);
-       char                       fiemap_buf[offsetof(struct ll_user_fiemap,
+       char                       fiemap_buf[offsetof(struct fiemap,
                                                  fm_extents[ORR_NUM_EXTENTS])];
-       struct ll_user_fiemap     *fiemap = (struct ll_user_fiemap *)fiemap_buf;
+       struct fiemap              *fiemap = (struct fiemap *)fiemap_buf;
        struct ll_fiemap_info_key  key;
        loff_t                     start;
        loff_t                     end;
        int                        rc;
 
        key = (typeof(key)) {
-               .name = KEY_FIEMAP,
-               .oa = *oa,
-               .fiemap = {
+               .lfik_name = KEY_FIEMAP,
+               .lfik_oa = *oa,
+               .lfik_fiemap = {
                        .fm_start = range->or_start,
                        .fm_length = range->or_end - range->or_start,
                        .fm_extent_count = ORR_NUM_EXTENTS
@@ -247,7 +250,7 @@ static int nrs_orr_range_fill_physical(struct ptlrpc_nrs_request *nrq,
        };
 
        rc = obd_get_info(req->rq_svc_thread->t_env, req->rq_export,
-                         sizeof(key), &key, NULL, fiemap, NULL);
+                         sizeof(key), &key, NULL, fiemap);
        if (rc < 0)
                GOTO(out, rc);
 
@@ -384,22 +387,23 @@ static void nrs_orr_genobjname(struct ptlrpc_nrs_policy *policy, char *name)
 #define NRS_TRR_BKT_BITS       2
 #define NRS_TRR_HASH_FLAGS     CFS_HASH_SPIN_BKTLOCK
 
-static unsigned nrs_orr_hop_hash(cfs_hash_t *hs, const void *key, unsigned mask)
+static unsigned
+nrs_orr_hop_hash(struct cfs_hash *hs, const void *key, unsigned mask)
 {
        return cfs_hash_djb2_hash(key, sizeof(struct nrs_orr_key), mask);
 }
 
-static void *nrs_orr_hop_key(cfs_hlist_node_t *hnode)
+static void *nrs_orr_hop_key(struct hlist_node *hnode)
 {
-       struct nrs_orr_object *orro = cfs_hlist_entry(hnode,
+       struct nrs_orr_object *orro = hlist_entry(hnode,
                                                      struct nrs_orr_object,
                                                      oo_hnode);
        return &orro->oo_key;
 }
 
-static int nrs_orr_hop_keycmp(const void *key, cfs_hlist_node_t *hnode)
+static int nrs_orr_hop_keycmp(const void *key, struct hlist_node *hnode)
 {
-       struct nrs_orr_object *orro = cfs_hlist_entry(hnode,
+       struct nrs_orr_object *orro = hlist_entry(hnode,
                                                      struct nrs_orr_object,
                                                      oo_hnode);
 
@@ -407,14 +411,14 @@ static int nrs_orr_hop_keycmp(const void *key, cfs_hlist_node_t *hnode)
                         &((struct nrs_orr_key *)key)->ok_fid);
 }
 
-static void *nrs_orr_hop_object(cfs_hlist_node_t *hnode)
+static void *nrs_orr_hop_object(struct hlist_node *hnode)
 {
-       return cfs_hlist_entry(hnode, struct nrs_orr_object, oo_hnode);
+       return hlist_entry(hnode, struct nrs_orr_object, oo_hnode);
 }
 
-static void nrs_orr_hop_get(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+static void nrs_orr_hop_get(struct cfs_hash *hs, struct hlist_node *hnode)
 {
-       struct nrs_orr_object *orro = cfs_hlist_entry(hnode,
+       struct nrs_orr_object *orro = hlist_entry(hnode,
                                                      struct nrs_orr_object,
                                                      oo_hnode);
        orro->oo_ref++;
@@ -424,14 +428,14 @@ static void nrs_orr_hop_get(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
  * Removes an nrs_orr_object the hash and frees its memory, if the object has
  * no active users.
  */
-static void nrs_orr_hop_put_free(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+static void nrs_orr_hop_put_free(struct cfs_hash *hs, struct hlist_node *hnode)
 {
-       struct nrs_orr_object *orro = cfs_hlist_entry(hnode,
+       struct nrs_orr_object *orro = hlist_entry(hnode,
                                                      struct nrs_orr_object,
                                                      oo_hnode);
        struct nrs_orr_data   *orrd = container_of(orro->oo_res.res_parent,
                                                   struct nrs_orr_data, od_res);
-       cfs_hash_bd_t          bd;
+       struct cfs_hash_bd     bd;
 
        cfs_hash_bd_get_and_lock(hs, &orro->oo_key, &bd, 1);
 
@@ -448,26 +452,26 @@ static void nrs_orr_hop_put_free(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
        OBD_SLAB_FREE_PTR(orro, orrd->od_cache);
 }
 
-static void nrs_orr_hop_put(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+static void nrs_orr_hop_put(struct cfs_hash *hs, struct hlist_node *hnode)
 {
-       struct nrs_orr_object *orro = cfs_hlist_entry(hnode,
+       struct nrs_orr_object *orro = hlist_entry(hnode,
                                                      struct nrs_orr_object,
                                                      oo_hnode);
        orro->oo_ref--;
 }
 
-static int nrs_trr_hop_keycmp(const void *key, cfs_hlist_node_t *hnode)
+static int nrs_trr_hop_keycmp(const void *key, struct hlist_node *hnode)
 {
-       struct nrs_orr_object *orro = cfs_hlist_entry(hnode,
+       struct nrs_orr_object *orro = hlist_entry(hnode,
                                                      struct nrs_orr_object,
                                                      oo_hnode);
 
        return orro->oo_key.ok_idx == ((struct nrs_orr_key *)key)->ok_idx;
 }
 
-static void nrs_trr_hop_exit(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+static void nrs_trr_hop_exit(struct cfs_hash *hs, struct hlist_node *hnode)
 {
-       struct nrs_orr_object *orro = cfs_hlist_entry(hnode,
+       struct nrs_orr_object *orro = hlist_entry(hnode,
                                                      struct nrs_orr_object,
                                                      oo_hnode);
        struct nrs_orr_data   *orrd = container_of(orro->oo_res.res_parent,
@@ -480,7 +484,7 @@ static void nrs_trr_hop_exit(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
        OBD_SLAB_FREE_PTR(orro, orrd->od_cache);
 }
 
-static cfs_hash_ops_t nrs_orr_hash_ops = {
+static struct cfs_hash_ops nrs_orr_hash_ops = {
        .hs_hash        = nrs_orr_hop_hash,
        .hs_key         = nrs_orr_hop_key,
        .hs_keycmp      = nrs_orr_hop_keycmp,
@@ -490,7 +494,7 @@ static cfs_hash_ops_t nrs_orr_hash_ops = {
        .hs_put_locked  = nrs_orr_hop_put,
 };
 
-static cfs_hash_ops_t nrs_trr_hash_ops = {
+static struct cfs_hash_ops nrs_trr_hash_ops = {
        .hs_hash        = nrs_orr_hop_hash,
        .hs_key         = nrs_orr_hop_key,
        .hs_keycmp      = nrs_trr_hop_keycmp,
@@ -519,7 +523,8 @@ static cfs_hash_ops_t nrs_trr_hash_ops = {
  * \retval 0 e1 > e2
  * \retval 1 e1 < e2
  */
-static int orr_req_compare(cfs_binheap_node_t *e1, cfs_binheap_node_t *e2)
+static int
+orr_req_compare(struct cfs_binheap_node *e1, struct cfs_binheap_node *e2)
 {
        struct ptlrpc_nrs_request *nrq1;
        struct ptlrpc_nrs_request *nrq2;
@@ -574,7 +579,7 @@ static int orr_req_compare(cfs_binheap_node_t *e1, cfs_binheap_node_t *e2)
 /**
  * ORR binary heap operations
  */
-static cfs_binheap_ops_t nrs_orr_heap_ops = {
+static struct cfs_binheap_ops nrs_orr_heap_ops = {
        .hop_enter      = NULL,
        .hop_exit       = NULL,
        .hop_compare    = orr_req_compare,
@@ -612,7 +617,7 @@ static int nrs_orr_init(struct ptlrpc_nrs_policy *policy)
 static int nrs_orr_start(struct ptlrpc_nrs_policy *policy, char *arg)
 {
        struct nrs_orr_data    *orrd;
-       cfs_hash_ops_t         *ops;
+       struct cfs_hash_ops            *ops;
        unsigned                cur_bits;
        unsigned                max_bits;
        unsigned                bkt_bits;
@@ -632,7 +637,7 @@ static int nrs_orr_start(struct ptlrpc_nrs_policy *policy, char *arg)
                                              nrs_pol2cptab(policy),
                                              nrs_pol2cptid(policy));
        if (orrd->od_binheap == NULL)
-               GOTO(failed, rc = -ENOMEM);
+               GOTO(out_orrd, rc = -ENOMEM);
 
        nrs_orr_genobjname(policy, orrd->od_objname);
 
@@ -643,7 +648,7 @@ static int nrs_orr_start(struct ptlrpc_nrs_policy *policy, char *arg)
                                           sizeof(struct nrs_orr_object),
                                           0, 0, NULL);
        if (orrd->od_cache == NULL)
-               GOTO(failed, rc = -ENOMEM);
+               GOTO(out_binheap, rc = -ENOMEM);
 
        if (strncmp(policy->pol_desc->pd_name, NRS_POL_NAME_ORR,
                    NRS_POL_NAME_MAX) == 0) {
@@ -671,7 +676,7 @@ static int nrs_orr_start(struct ptlrpc_nrs_policy *policy, char *arg)
                                            CFS_HASH_MIN_THETA,
                                            CFS_HASH_MAX_THETA, ops, flags);
        if (orrd->od_obj_hash == NULL)
-               GOTO(failed, rc = -ENOMEM);
+               GOTO(out_cache, rc = -ENOMEM);
 
        /* XXX: Fields accessed unlocked */
        orrd->od_quantum = NRS_ORR_QUANTUM_DFLT;
@@ -687,14 +692,11 @@ static int nrs_orr_start(struct ptlrpc_nrs_policy *policy, char *arg)
 
        RETURN(rc);
 
-failed:
-       if (orrd->od_cache) {
-               kmem_cache_destroy(orrd->od_cache);
-               LASSERTF(rc == 0, "Could not destroy od_cache slab\n");
-       }
-       if (orrd->od_binheap != NULL)
-               cfs_binheap_destroy(orrd->od_binheap);
-
+out_cache:
+       kmem_cache_destroy(orrd->od_cache);
+out_binheap:
+       cfs_binheap_destroy(orrd->od_binheap);
+out_orrd:
        OBD_FREE_PTR(orrd);
 
        RETURN(rc);
@@ -735,16 +737,16 @@ static void nrs_orr_stop(struct ptlrpc_nrs_policy *policy)
  * \param[in]    opc    the opcode
  * \param[in,out] arg   used for passing parameters and information
  *
- * \pre spin_is_locked(&policy->pol_nrs->->nrs_lock)
- * \post spin_is_locked(&policy->pol_nrs->->nrs_lock)
+ * \pre assert_spin_locked(&policy->pol_nrs->->nrs_lock)
+ * \post assert_spin_locked(&policy->pol_nrs->->nrs_lock)
  *
  * \retval 0   operation carried successfully
  * \retval -ve error
  */
-int nrs_orr_ctl(struct ptlrpc_nrs_policy *policy, enum ptlrpc_nrs_ctl opc,
-               void *arg)
+static int nrs_orr_ctl(struct ptlrpc_nrs_policy *policy,
+                      enum ptlrpc_nrs_ctl opc, void *arg)
 {
-       LASSERT(spin_is_locked(&policy->pol_nrs->nrs_lock));
+       assert_spin_locked(&policy->pol_nrs->nrs_lock);
 
        switch((enum nrs_ctl_orr)opc) {
        default:
@@ -819,10 +821,10 @@ int nrs_orr_ctl(struct ptlrpc_nrs_policy *policy, enum ptlrpc_nrs_ctl opc,
  *
  * \see nrs_resource_get_safe()
  */
-int nrs_orr_res_get(struct ptlrpc_nrs_policy *policy,
-                   struct ptlrpc_nrs_request *nrq,
-                   const struct ptlrpc_nrs_resource *parent,
-                   struct ptlrpc_nrs_resource **resp, bool moving_req)
+static int nrs_orr_res_get(struct ptlrpc_nrs_policy *policy,
+                          struct ptlrpc_nrs_request *nrq,
+                          const struct ptlrpc_nrs_resource *parent,
+                          struct ptlrpc_nrs_resource **resp, bool moving_req)
 {
        struct nrs_orr_data            *orrd;
        struct nrs_orr_object          *orro;
@@ -869,7 +871,7 @@ int nrs_orr_res_get(struct ptlrpc_nrs_policy *policy,
 
        OBD_SLAB_CPT_ALLOC_PTR_GFP(orro, orrd->od_cache,
                                   nrs_pol2cptab(policy), nrs_pol2cptid(policy),
-                                  moving_req ? GFP_ATOMIC : __GFP_IO);
+                                  moving_req ? GFP_ATOMIC : GFP_NOFS);
        if (orro == NULL)
                RETURN(-ENOMEM);
 
@@ -941,7 +943,7 @@ struct ptlrpc_nrs_request *nrs_orr_req_get(struct ptlrpc_nrs_policy *policy,
                                           bool peek, bool force)
 {
        struct nrs_orr_data       *orrd = policy->pol_private;
-       cfs_binheap_node_t        *node = cfs_binheap_root(orrd->od_binheap);
+       struct cfs_binheap_node   *node = cfs_binheap_root(orrd->od_binheap);
        struct ptlrpc_nrs_request *nrq;
 
        nrq = unlikely(node == NULL) ? NULL :
@@ -963,14 +965,14 @@ struct ptlrpc_nrs_request *nrs_orr_req_get(struct ptlrpc_nrs_policy *policy,
                        CDEBUG(D_RPCTRACE,
                               "NRS: starting to handle %s request for object "
                               "with FID "DFID", from OST with index %u, with "
-                              "round "LPU64"\n", NRS_POL_NAME_ORR,
+                              "round %llu\n", NRS_POL_NAME_ORR,
                               PFID(&orro->oo_key.ok_fid),
                               nrq->nr_u.orr.or_key.ok_idx,
                               nrq->nr_u.orr.or_round);
                else
                        CDEBUG(D_RPCTRACE,
                               "NRS: starting to handle %s request from OST "
-                              "with index %u, with round "LPU64"\n",
+                              "with index %u, with round %llu\n",
                               NRS_POL_NAME_TRR, nrq->nr_u.orr.or_key.ok_idx,
                               nrq->nr_u.orr.or_round);
 
@@ -1116,7 +1118,7 @@ static void nrs_orr_req_del(struct ptlrpc_nrs_policy *policy,
         */
        if (unlikely(is_root)) {
                /** Peek at the next request to be served */
-               cfs_binheap_node_t *node = cfs_binheap_root(orrd->od_binheap);
+               struct cfs_binheap_node *node = cfs_binheap_root(orrd->od_binheap);
 
                /** No more requests */
                if (unlikely(node == NULL)) {
@@ -1146,29 +1148,27 @@ static void nrs_orr_req_stop(struct ptlrpc_nrs_policy *policy,
                    NRS_POL_NAME_MAX) == 0)
                CDEBUG(D_RPCTRACE,
                       "NRS: finished handling %s request for object with FID "
-                      DFID", from OST with index %u, with round "LPU64"\n",
+                      DFID", from OST with index %u, with round %llu\n",
                       NRS_POL_NAME_ORR, PFID(&nrq->nr_u.orr.or_key.ok_fid),
                       nrq->nr_u.orr.or_key.ok_idx, nrq->nr_u.orr.or_round);
        else
                CDEBUG(D_RPCTRACE,
                       "NRS: finished handling %s request from OST with index %u,"
-                      " with round "LPU64"\n",
+                      " with round %llu\n",
                       NRS_POL_NAME_TRR, nrq->nr_u.orr.or_key.ok_idx,
                       nrq->nr_u.orr.or_round);
 }
 
 /**
- * lprocfs interface
+ * debugfs interface
  */
 
-#ifdef LPROCFS
-
 /**
  * This allows to bundle the policy name into the lprocfs_vars::data pointer
  * so that lprocfs read/write functions can be used by both the ORR and TRR
  * policies.
  */
-struct nrs_lprocfs_orr_data {
+static struct nrs_lprocfs_orr_data {
        struct ptlrpc_service   *svc;
        char                    *name;
 } lprocfs_orr_data = {
@@ -1274,7 +1274,8 @@ no_hp:
  * almost identical; it can be reworked and then reused for ORR/TRR.
  */
 static ssize_t
-ptlrpc_lprocfs_nrs_orr_quantum_seq_write(struct file *file, const char *buffer,
+ptlrpc_lprocfs_nrs_orr_quantum_seq_write(struct file *file,
+                                        const char __user *buffer,
                                         size_t count, loff_t *off)
 {
        struct seq_file             *m = file->private_data;
@@ -1306,8 +1307,9 @@ ptlrpc_lprocfs_nrs_orr_quantum_seq_write(struct file *file, const char *buffer,
        val = lprocfs_find_named_value(kernbuf, NRS_LPROCFS_QUANTUM_NAME_REG,
                                       &count_copy);
        if (val != kernbuf) {
-               quantum_reg = simple_strtol(val, NULL, 10);
-
+               rc = kstrtol(val, 10, &quantum_reg);
+               if (rc)
+                       return rc;
                queue |= PTLRPC_NRS_QUEUE_REG;
        }
 
@@ -1322,7 +1324,9 @@ ptlrpc_lprocfs_nrs_orr_quantum_seq_write(struct file *file, const char *buffer,
                if (!nrs_svc_has_hp(svc))
                        return -ENODEV;
 
-               quantum_hp = simple_strtol(val, NULL, 10);
+               rc = kstrtol(val, 10, &quantum_hp);
+               if (rc)
+                       return rc;
 
                queue |= PTLRPC_NRS_QUEUE_HP;
        }
@@ -1332,10 +1336,9 @@ ptlrpc_lprocfs_nrs_orr_quantum_seq_write(struct file *file, const char *buffer,
         * value
         */
        if (queue == 0) {
-               if (!isdigit(kernbuf[0]))
-                       return -EINVAL;
-
-               quantum_reg = simple_strtol(kernbuf, NULL, 10);
+               rc = kstrtol(kernbuf, 10, &quantum_reg);
+               if (rc)
+                       return rc;
 
                queue = PTLRPC_NRS_QUEUE_REG;
 
@@ -1383,7 +1386,8 @@ ptlrpc_lprocfs_nrs_orr_quantum_seq_write(struct file *file, const char *buffer,
 
        return rc == -ENODEV && rc2 == -ENODEV ? -ENODEV : count;
 }
-LPROC_SEQ_FOPS(ptlrpc_lprocfs_nrs_orr_quantum);
+
+LDEBUGFS_SEQ_FOPS(ptlrpc_lprocfs_nrs_orr_quantum);
 
 #define LPROCFS_NRS_OFF_NAME_REG               "reg_offset_type:"
 #define LPROCFS_NRS_OFF_NAME_HP                        "hp_offset_type:"
@@ -1488,7 +1492,8 @@ no_hp:
  */
 static ssize_t
 ptlrpc_lprocfs_nrs_orr_offset_type_seq_write(struct file *file,
-                                            const char *buffer, size_t count,
+                                            const char __user *buffer,
+                                             size_t count,
                                             loff_t *off)
 {
        struct seq_file             *m = file->private_data;
@@ -1602,7 +1607,8 @@ ptlrpc_lprocfs_nrs_orr_offset_type_seq_write(struct file *file,
 
        return rc == -ENODEV && rc2 == -ENODEV ? -ENODEV : count;
 }
-LPROC_SEQ_FOPS(ptlrpc_lprocfs_nrs_orr_offset_type);
+
+LDEBUGFS_SEQ_FOPS(ptlrpc_lprocfs_nrs_orr_offset_type);
 
 #define NRS_LPROCFS_REQ_SUPP_NAME_REG          "reg_supported:"
 #define NRS_LPROCFS_REQ_SUPP_NAME_HP           "hp_supported:"
@@ -1747,7 +1753,8 @@ no_hp:
  */
 static ssize_t
 ptlrpc_lprocfs_nrs_orr_supported_seq_write(struct file *file,
-                                          const char *buffer, size_t count,
+                                          const char __user *buffer,
+                                          size_t count,
                                           loff_t *off)
 {
        struct seq_file             *m = file->private_data;
@@ -1852,13 +1859,14 @@ ptlrpc_lprocfs_nrs_orr_supported_seq_write(struct file *file,
 
        return rc == -ENODEV && rc2 == -ENODEV ? -ENODEV : count;
 }
-LPROC_SEQ_FOPS(ptlrpc_lprocfs_nrs_orr_supported);
 
-int nrs_orr_lprocfs_init(struct ptlrpc_service *svc)
+LDEBUGFS_SEQ_FOPS(ptlrpc_lprocfs_nrs_orr_supported);
+
+static int nrs_orr_lprocfs_init(struct ptlrpc_service *svc)
 {
        int     i;
 
-       struct lprocfs_seq_vars nrs_orr_lprocfs_vars[] = {
+       struct lprocfs_vars nrs_orr_lprocfs_vars[] = {
                { .name         = "nrs_orr_quantum",
                  .fops         = &ptlrpc_lprocfs_nrs_orr_quantum_fops  },
                { .name         = "nrs_orr_offset_type",
@@ -1868,7 +1876,7 @@ int nrs_orr_lprocfs_init(struct ptlrpc_service *svc)
                { NULL }
        };
 
-       if (svc->srv_procroot == NULL)
+       if (!svc->srv_debugfs_entry)
                return 0;
 
        lprocfs_orr_data.svc = svc;
@@ -1876,21 +1884,10 @@ int nrs_orr_lprocfs_init(struct ptlrpc_service *svc)
        for (i = 0; i < ARRAY_SIZE(nrs_orr_lprocfs_vars); i++)
                nrs_orr_lprocfs_vars[i].data = &lprocfs_orr_data;
 
-       return lprocfs_seq_add_vars(svc->srv_procroot, nrs_orr_lprocfs_vars, NULL);
+       return ldebugfs_add_vars(svc->srv_debugfs_entry, nrs_orr_lprocfs_vars,
+                                NULL);
 }
 
-void nrs_orr_lprocfs_fini(struct ptlrpc_service *svc)
-{
-       if (svc->srv_procroot == NULL)
-               return;
-
-       lprocfs_remove_proc_entry("nrs_orr_quantum", svc->srv_procroot);
-       lprocfs_remove_proc_entry("nrs_orr_offset_type", svc->srv_procroot);
-       lprocfs_remove_proc_entry("nrs_orr_supported", svc->srv_procroot);
-}
-
-#endif /* LPROCFS */
-
 static const struct ptlrpc_nrs_pol_ops nrs_orr_ops = {
        .op_policy_init         = nrs_orr_init,
        .op_policy_start        = nrs_orr_start,
@@ -1902,10 +1899,7 @@ static const struct ptlrpc_nrs_pol_ops nrs_orr_ops = {
        .op_req_enqueue         = nrs_orr_req_add,
        .op_req_dequeue         = nrs_orr_req_del,
        .op_req_stop            = nrs_orr_req_stop,
-#ifdef LPROCFS
        .op_lprocfs_init        = nrs_orr_lprocfs_init,
-       .op_lprocfs_fini        = nrs_orr_lprocfs_fini,
-#endif
 };
 
 struct ptlrpc_nrs_pol_conf nrs_conf_orr = {
@@ -1920,15 +1914,11 @@ struct ptlrpc_nrs_pol_conf nrs_conf_orr = {
  *
  * TRR reuses much of the functions and data structures of ORR
  */
-
-#ifdef LPROCFS
-
-int nrs_trr_lprocfs_init(struct ptlrpc_service *svc)
+static int nrs_trr_lprocfs_init(struct ptlrpc_service *svc)
 {
-       int     rc;
        int     i;
 
-       struct lprocfs_seq_vars nrs_trr_lprocfs_vars[] = {
+       struct lprocfs_vars nrs_trr_lprocfs_vars[] = {
                { .name         = "nrs_trr_quantum",
                  .fops         = &ptlrpc_lprocfs_nrs_orr_quantum_fops },
                { .name         = "nrs_trr_offset_type",
@@ -1938,7 +1928,7 @@ int nrs_trr_lprocfs_init(struct ptlrpc_service *svc)
                { NULL }
        };
 
-       if (svc->srv_procroot == NULL)
+       if (!svc->srv_debugfs_entry)
                return 0;
 
        lprocfs_trr_data.svc = svc;
@@ -1946,23 +1936,10 @@ int nrs_trr_lprocfs_init(struct ptlrpc_service *svc)
        for (i = 0; i < ARRAY_SIZE(nrs_trr_lprocfs_vars); i++)
                nrs_trr_lprocfs_vars[i].data = &lprocfs_trr_data;
 
-       rc = lprocfs_seq_add_vars(svc->srv_procroot, nrs_trr_lprocfs_vars, NULL);
-
-       return rc;
-}
-
-void nrs_trr_lprocfs_fini(struct ptlrpc_service *svc)
-{
-       if (svc->srv_procroot == NULL)
-               return;
-
-       lprocfs_remove_proc_entry("nrs_trr_quantum", svc->srv_procroot);
-       lprocfs_remove_proc_entry("nrs_trr_offset_type", svc->srv_procroot);
-       lprocfs_remove_proc_entry("nrs_trr_supported", svc->srv_procroot);
+       return ldebugfs_add_vars(svc->srv_debugfs_entry, nrs_trr_lprocfs_vars,
+                                NULL);
 }
 
-#endif /* LPROCFS */
-
 /**
  * Reuse much of the ORR functionality for TRR.
  */
@@ -1977,10 +1954,7 @@ static const struct ptlrpc_nrs_pol_ops nrs_trr_ops = {
        .op_req_enqueue         = nrs_orr_req_add,
        .op_req_dequeue         = nrs_orr_req_del,
        .op_req_stop            = nrs_orr_req_stop,
-#ifdef LPROCFS
        .op_lprocfs_init        = nrs_trr_lprocfs_init,
-       .op_lprocfs_fini        = nrs_trr_lprocfs_fini,
-#endif
 };
 
 struct ptlrpc_nrs_pol_conf nrs_conf_trr = {