Whamcloud - gitweb
LU-6070 libcfs: provide separate buffers for libcfs_*2str()
[fs/lustre-release.git] / lustre / obdclass / obd_config.c
index 3914193..b386331 100644 (file)
@@ -27,7 +27,7 @@
  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
  * Use is subject to license terms.
  *
- * Copyright (c) 2011, 2013, Intel Corporation.
+ * Copyright (c) 2011, 2014, Intel Corporation.
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
  */
 
 #define DEBUG_SUBSYSTEM S_CLASS
-#ifdef __KERNEL__
 #include <obd_class.h>
 #include <linux/string.h>
 #include <lustre_disk.h>
-#else
-#include <liblustre.h>
-#include <string.h>
-#include <obd_class.h>
-#include <obd.h>
-#endif
 #include <lustre_ioctl.h>
 #include <lustre_log.h>
 #include <lprocfs_status.h>
@@ -190,7 +183,7 @@ EXPORT_SYMBOL(class_get_next_param);
 
 /* returns 0 if this is the first key in the buffer, else 1.
    valp points to first char after key. */
-int class_match_param(char *buf, char *key, char **valp)
+int class_match_param(char *buf, const char *key, char **valp)
 {
         if (!buf)
                 return 1;
@@ -291,7 +284,6 @@ int class_parse_net(char *buf, __u32 *net, char **endh)
 {
        return class_parse_value(buf, CLASS_PARSE_NET, (void *)net, endh, 0);
 }
-EXPORT_SYMBOL(class_parse_net);
 
 /* 1 param contains key and match
  * 0 param contains key and not match
@@ -313,7 +305,6 @@ int class_match_nid(char *buf, char *key, lnet_nid_t nid)
         }
         return rc;
 }
-EXPORT_SYMBOL(class_match_nid);
 
 int class_match_net(char *buf, char *key, __u32 net)
 {
@@ -331,7 +322,6 @@ int class_match_net(char *buf, char *key, __u32 net)
         }
         return rc;
 }
-EXPORT_SYMBOL(class_match_net);
 
 /********************** class fns **********************/
 
@@ -388,11 +378,11 @@ int class_attach(struct lustre_cfg *lcfg)
        obd->obd_pool_limit = 0;
        obd->obd_pool_slv = 0;
 
-       CFS_INIT_LIST_HEAD(&obd->obd_exports);
-       CFS_INIT_LIST_HEAD(&obd->obd_unlinked_exports);
-       CFS_INIT_LIST_HEAD(&obd->obd_delayed_exports);
-       CFS_INIT_LIST_HEAD(&obd->obd_exports_timed);
-       CFS_INIT_LIST_HEAD(&obd->obd_nid_stats);
+       INIT_LIST_HEAD(&obd->obd_exports);
+       INIT_LIST_HEAD(&obd->obd_unlinked_exports);
+       INIT_LIST_HEAD(&obd->obd_delayed_exports);
+       INIT_LIST_HEAD(&obd->obd_exports_timed);
+       INIT_LIST_HEAD(&obd->obd_nid_stats);
        spin_lock_init(&obd->obd_nid_lock);
        spin_lock_init(&obd->obd_dev_lock);
        mutex_init(&obd->obd_dev_mutex);
@@ -408,10 +398,10 @@ int class_attach(struct lustre_cfg *lcfg)
        spin_lock_init(&obd->obd_recovery_task_lock);
        init_waitqueue_head(&obd->obd_next_transno_waitq);
        init_waitqueue_head(&obd->obd_evict_inprogress_waitq);
-       CFS_INIT_LIST_HEAD(&obd->obd_req_replay_queue);
-       CFS_INIT_LIST_HEAD(&obd->obd_lock_replay_queue);
-       CFS_INIT_LIST_HEAD(&obd->obd_final_req_queue);
-       CFS_INIT_LIST_HEAD(&obd->obd_evict_list);
+       INIT_LIST_HEAD(&obd->obd_req_replay_queue);
+       INIT_LIST_HEAD(&obd->obd_lock_replay_queue);
+       INIT_LIST_HEAD(&obd->obd_final_req_queue);
+       INIT_LIST_HEAD(&obd->obd_evict_list);
        INIT_LIST_HEAD(&obd->obd_lwp_list);
 
        llog_group_init(&obd->obd_olg);
@@ -528,7 +518,7 @@ int class_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
                 GOTO(err_hash, err = PTR_ERR(exp));
 
         obd->obd_self_export = exp;
-        cfs_list_del_init(&exp->exp_obd_chain_timed);
+       list_del_init(&exp->exp_obd_chain_timed);
         class_export_put(exp);
 
         err = obd_setup(obd, lcfg);
@@ -697,7 +687,6 @@ int class_cleanup(struct obd_device *obd, struct lustre_cfg *lcfg)
 
         RETURN(0);
 }
-EXPORT_SYMBOL(class_cleanup);
 
 struct obd_device *class_incref(struct obd_device *obd,
                                 const char *scope, const void *source)
@@ -789,11 +778,10 @@ int class_add_conn(struct obd_device *obd, struct lustre_cfg *lcfg)
 
         RETURN(rc);
 }
-EXPORT_SYMBOL(class_add_conn);
 
 /** Remove a failover nid location.
  */
-int class_del_conn(struct obd_device *obd, struct lustre_cfg *lcfg)
+static int class_del_conn(struct obd_device *obd, struct lustre_cfg *lcfg)
 {
         struct obd_import *imp;
         struct obd_uuid uuid;
@@ -823,14 +811,15 @@ int class_del_conn(struct obd_device *obd, struct lustre_cfg *lcfg)
         RETURN(rc);
 }
 
-CFS_LIST_HEAD(lustre_profile_list);
+static struct list_head lustre_profile_list =
+       LIST_HEAD_INIT(lustre_profile_list);
 
 struct lustre_profile *class_get_profile(const char * prof)
 {
         struct lustre_profile *lprof;
 
         ENTRY;
-        cfs_list_for_each_entry(lprof, &lustre_profile_list, lp_list) {
+       list_for_each_entry(lprof, &lustre_profile_list, lp_list) {
                 if (!strcmp(lprof->lp_profile, prof)) {
                         RETURN(lprof);
                 }
@@ -843,8 +832,8 @@ EXPORT_SYMBOL(class_get_profile);
  * This defines the mdc and osc names to use for a client.
  * This also is used to define the lov to be used by a mdt.
  */
-int class_add_profile(int proflen, char *prof, int osclen, char *osc,
-                      int mdclen, char *mdc)
+static int class_add_profile(int proflen, char *prof, int osclen, char *osc,
+                            int mdclen, char *mdc)
 {
         struct lustre_profile *lprof;
         int err = 0;
@@ -855,7 +844,7 @@ int class_add_profile(int proflen, char *prof, int osclen, char *osc,
         OBD_ALLOC(lprof, sizeof(*lprof));
         if (lprof == NULL)
                 RETURN(-ENOMEM);
-        CFS_INIT_LIST_HEAD(&lprof->lp_list);
+       INIT_LIST_HEAD(&lprof->lp_list);
 
         LASSERT(proflen == (strlen(prof) + 1));
         OBD_ALLOC(lprof->lp_profile, proflen);
@@ -877,7 +866,7 @@ int class_add_profile(int proflen, char *prof, int osclen, char *osc,
                 memcpy(lprof->lp_md, mdc, mdclen);
         }
 
-        cfs_list_add(&lprof->lp_list, &lustre_profile_list);
+       list_add(&lprof->lp_list, &lustre_profile_list);
         RETURN(err);
 
 out:
@@ -900,7 +889,7 @@ void class_del_profile(const char *prof)
 
         lprof = class_get_profile(prof);
         if (lprof) {
-                cfs_list_del(&lprof->lp_list);
+               list_del(&lprof->lp_list);
                 OBD_FREE(lprof->lp_profile, strlen(lprof->lp_profile) + 1);
                 OBD_FREE(lprof->lp_dt, strlen(lprof->lp_dt) + 1);
                 if (lprof->lp_md)
@@ -917,8 +906,8 @@ void class_del_profiles(void)
         struct lustre_profile *lprof, *n;
         ENTRY;
 
-        cfs_list_for_each_entry_safe(lprof, n, &lustre_profile_list, lp_list) {
-                cfs_list_del(&lprof->lp_list);
+       list_for_each_entry_safe(lprof, n, &lustre_profile_list, lp_list) {
+               list_del(&lprof->lp_list);
                 OBD_FREE(lprof->lp_profile, strlen(lprof->lp_profile) + 1);
                 OBD_FREE(lprof->lp_dt, strlen(lprof->lp_dt) + 1);
                 if (lprof->lp_md)
@@ -1022,7 +1011,6 @@ struct lustre_cfg *lustre_cfg_rename(struct lustre_cfg *cfg,
        lustre_cfg_bufs_set_string(bufs, 1, new_param);
 
        new_cfg = lustre_cfg_new(cfg->lcfg_command, bufs);
-
        OBD_FREE(new_param, new_len);
        OBD_FREE_PTR(bufs);
        if (new_cfg == NULL)
@@ -1059,7 +1047,7 @@ static int process_param2_config(struct lustre_cfg *lcfg)
        }
 
        do_gettimeofday(&start);
-       rc = call_usermodehelper(argv[0], argv, NULL, 0);
+       rc = call_usermodehelper(argv[0], argv, NULL, UMH_WAIT_PROC);
        do_gettimeofday(&end);
 
        if (rc < 0) {
@@ -1169,7 +1157,7 @@ int class_process_config(struct lustre_cfg *lcfg)
                 char *tmp;
                 /* llite has no obd */
                 if ((class_match_param(lustre_cfg_string(lcfg, 1),
-                                       PARAM_LLITE, 0) == 0) &&
+                                      PARAM_LLITE, NULL) == 0) &&
                     client_process_config) {
                         err = (*client_process_config)(lcfg);
                         GOTO(out, err);
@@ -1266,102 +1254,10 @@ out:
 }
 EXPORT_SYMBOL(class_process_config);
 
-#ifndef HAVE_ONLY_PROCFS_SEQ
 int class_process_proc_param(char *prefix, struct lprocfs_vars *lvars,
-                             struct lustre_cfg *lcfg, void *data)
-{
-#ifdef __KERNEL__
-        struct lprocfs_vars *var;
-        char *key, *sval;
-        int i, keylen, vallen;
-        int matched = 0, j = 0;
-        int rc = 0;
-        int skip = 0;
-        ENTRY;
-
-        if (lcfg->lcfg_command != LCFG_PARAM) {
-                CERROR("Unknown command: %d\n", lcfg->lcfg_command);
-                RETURN(-EINVAL);
-        }
-
-        /* e.g. tunefs.lustre --param mdt.group_upcall=foo /r/tmp/lustre-mdt
-           or   lctl conf_param lustre-MDT0000.mdt.group_upcall=bar
-           or   lctl conf_param lustre-OST0000.osc.max_dirty_mb=36 */
-        for (i = 1; i < lcfg->lcfg_bufcount; i++) {
-                key = lustre_cfg_buf(lcfg, i);
-                /* Strip off prefix */
-               if (class_match_param(key, prefix, &key))
-                       /* If the prefix doesn't match, return error so we
-                        * can pass it down the stack */
-                       RETURN(-ENOSYS);
-                sval = strchr(key, '=');
-                if (!sval || (*(sval + 1) == 0)) {
-                        CERROR("Can't parse param %s (missing '=')\n", key);
-                        /* rc = -EINVAL;        continue parsing other params */
-                        continue;
-                }
-                keylen = sval - key;
-                sval++;
-                vallen = strlen(sval);
-                matched = 0;
-                j = 0;
-                /* Search proc entries */
-                while (lvars[j].name) {
-                        var = &lvars[j];
-                        if (class_match_param(key, (char *)var->name, 0) == 0 &&
-                            keylen == strlen(var->name)) {
-                                matched++;
-                                rc = -EROFS;
-
-                               if (var->write_fptr) {
-                                       mm_segment_t oldfs;
-                                       oldfs = get_fs();
-                                       set_fs(KERNEL_DS);
-                                       rc = (var->write_fptr)(NULL, sval,
-                                                               vallen, data);
-                                       set_fs(oldfs);
-                               }
-                               break;
-                        }
-                        j++;
-                }
-               if (!matched) {
-                       CERROR("%.*s: %s unknown param %s\n",
-                              (int)strlen(prefix) - 1, prefix,
-                              (char *)lustre_cfg_string(lcfg, 0), key);
-                       /* rc = -EINVAL;        continue parsing other params */
-                       skip++;
-               } else if (rc < 0) {
-                       CERROR("%s: error writing proc entry '%s': rc = %d\n",
-                              prefix, var->name, rc);
-                       rc = 0;
-               } else {
-                       CDEBUG(D_CONFIG, "%s.%.*s: Set parameter %.*s=%s\n",
-                                        lustre_cfg_string(lcfg, 0),
-                                        (int)strlen(prefix) - 1, prefix,
-                                        (int)(sval - key - 1), key, sval);
-               }
-        }
-
-        if (rc > 0)
-                rc = 0;
-        if (!rc && skip)
-                rc = skip;
-        RETURN(rc);
-#else
-        CDEBUG(D_CONFIG, "liblustre can't process params.\n");
-        /* Don't throw config error */
-        RETURN(0);
-#endif
-}
-EXPORT_SYMBOL(class_process_proc_param);
-#endif
-
-int class_process_proc_seq_param(char *prefix, struct lprocfs_seq_vars *lvars,
-                                struct lustre_cfg *lcfg, void *data)
+                            struct lustre_cfg *lcfg, void *data)
 {
-#ifdef __KERNEL__
-       struct lprocfs_seq_vars *var;
+       struct lprocfs_vars *var;
        struct file fakefile;
        struct seq_file fake_seqfile;
        char *key, *sval;
@@ -1403,7 +1299,7 @@ int class_process_proc_seq_param(char *prefix, struct lprocfs_seq_vars *lvars,
                /* Search proc entries */
                while (lvars[j].name) {
                        var = &lvars[j];
-                       if (class_match_param(key, (char *)var->name, 0) == 0 &&
+                       if (class_match_param(key, var->name, NULL) == 0 &&
                            keylen == strlen(var->name)) {
                                matched++;
                                rc = -EROFS;
@@ -1443,19 +1339,8 @@ int class_process_proc_seq_param(char *prefix, struct lprocfs_seq_vars *lvars,
        if (!rc && skip)
                rc = skip;
        RETURN(rc);
-#else
-       CDEBUG(D_CONFIG, "liblustre can't process params.\n");
-       /* Don't throw config error */
-       RETURN(0);
-#endif
 }
-EXPORT_SYMBOL(class_process_proc_seq_param);
-
-#ifdef __KERNEL__
-extern int lustre_check_exclusion(struct super_block *sb, char *svname);
-#else
-#define lustre_check_exclusion(a,b)  0
-#endif
+EXPORT_SYMBOL(class_process_proc_param);
 
 /*
  * Supplemental functions for config logs, it allocates lustre_cfg
@@ -1598,7 +1483,7 @@ int class_config_llog_handler(const struct lu_env *env,
                         }
                 }
 
-#if defined(HAVE_SERVER_SUPPORT) && defined(__KERNEL__)
+#ifdef HAVE_SERVER_SUPPORT
                /* newer MDS replaces LOV/OSC with LOD/OSP */
                {
                        char *typename = lustre_cfg_string(lcfg, 1);
@@ -1622,7 +1507,7 @@ int class_config_llog_handler(const struct lu_env *env,
                                strcpy(typename, LUSTRE_OSP_NAME);
                        }
                }
-#endif
+#endif /* HAVE_SERVER_SUPPORT */
 
                if (clli->cfg_flags & CFG_F_EXCLUDE) {
                        CDEBUG(D_CONFIG, "cmd: %x marked EXCLUDED\n",
@@ -1762,7 +1647,7 @@ parse_out:
 }
 EXPORT_SYMBOL(class_config_parse_llog);
 
-struct lcfg_type_data {
+static struct lcfg_type_data {
        __u32    ltd_type;
        char    *ltd_name;
        char    *ltd_bufs[4];
@@ -1848,10 +1733,13 @@ int class_config_yaml_output(struct llog_rec_hdr *rec, char *buf, int size)
        if (lcfg->lcfg_num)
                ptr += snprintf(ptr, end - ptr, ", num: %#08x",
                                lcfg->lcfg_num);
-       if (lcfg->lcfg_nid)
+       if (lcfg->lcfg_nid) {
+               char nidstr[LNET_NIDSTR_SIZE];
+
+               libcfs_nid2str_r(lcfg->lcfg_nid, nidstr, sizeof(nidstr));
                ptr += snprintf(ptr, end - ptr, ", nid: %s("LPX64")",
-                               libcfs_nid2str(lcfg->lcfg_nid),
-                               lcfg->lcfg_nid);
+                               nidstr, lcfg->lcfg_nid);
+       }
 
        if (LUSTRE_CFG_BUFLEN(lcfg, 0) > 0)
                ptr += snprintf(ptr, end - ptr, ", device: %s",
@@ -1875,7 +1763,7 @@ int class_config_yaml_output(struct llog_rec_hdr *rec, char *buf, int size)
  * This is separated from class_config_dump_handler() to use
  * for ioctl needs as well
  */
-int class_config_parse_rec(struct llog_rec_hdr *rec, char *buf, int size)
+static int class_config_parse_rec(struct llog_rec_hdr *rec, char *buf, int size)
 {
        struct lustre_cfg       *lcfg = (struct lustre_cfg *)(rec + 1);
        char                    *ptr = buf;
@@ -1897,10 +1785,13 @@ int class_config_parse_rec(struct llog_rec_hdr *rec, char *buf, int size)
        if (lcfg->lcfg_num)
                ptr += snprintf(ptr, end-ptr, "num=%#08x ", lcfg->lcfg_num);
 
-       if (lcfg->lcfg_nid)
+       if (lcfg->lcfg_nid) {
+               char nidstr[LNET_NIDSTR_SIZE];
+
+               libcfs_nid2str_r(lcfg->lcfg_nid, nidstr, sizeof(nidstr));
                ptr += snprintf(ptr, end-ptr, "nid=%s("LPX64")\n     ",
-                               libcfs_nid2str(lcfg->lcfg_nid),
-                               lcfg->lcfg_nid);
+                               nidstr, lcfg->lcfg_nid);
+       }
 
        if (lcfg->lcfg_command == LCFG_MARKER) {
                struct cfg_marker *marker = lustre_cfg_buf(lcfg, 1);
@@ -1998,11 +1889,11 @@ int class_manual_cleanup(struct obd_device *obd)
         CDEBUG(D_CONFIG, "Manual cleanup of %s (flags='%s')\n",
                obd->obd_name, flags);
 
-        lustre_cfg_bufs_reset(&bufs, obd->obd_name);
-        lustre_cfg_bufs_set_string(&bufs, 1, flags);
-        lcfg = lustre_cfg_new(LCFG_CLEANUP, &bufs);
-        if (!lcfg)
-                RETURN(-ENOMEM);
+       lustre_cfg_bufs_reset(&bufs, obd->obd_name);
+       lustre_cfg_bufs_set_string(&bufs, 1, flags);
+       lcfg = lustre_cfg_new(LCFG_CLEANUP, &bufs);
+       if (lcfg == NULL)
+               RETURN(-ENOMEM);
 
         rc = class_process_config(lcfg);
         if (rc) {
@@ -2033,13 +1924,13 @@ uuid_hash(cfs_hash_t *hs, const void *key, unsigned mask)
 }
 
 static void *
-uuid_key(cfs_hlist_node_t *hnode)
+uuid_key(struct hlist_node *hnode)
 {
-        struct obd_export *exp;
+       struct obd_export *exp;
 
-        exp = cfs_hlist_entry(hnode, struct obd_export, exp_uuid_hash);
+       exp = hlist_entry(hnode, struct obd_export, exp_uuid_hash);
 
-        return &exp->exp_client_uuid;
+       return &exp->exp_client_uuid;
 }
 
 /*
@@ -2047,38 +1938,38 @@ uuid_key(cfs_hlist_node_t *hnode)
  *       state with this function
  */
 static int
-uuid_keycmp(const void *key, cfs_hlist_node_t *hnode)
+uuid_keycmp(const void *key, struct hlist_node *hnode)
 {
         struct obd_export *exp;
 
         LASSERT(key);
-        exp = cfs_hlist_entry(hnode, struct obd_export, exp_uuid_hash);
+       exp = hlist_entry(hnode, struct obd_export, exp_uuid_hash);
 
         return obd_uuid_equals(key, &exp->exp_client_uuid) &&
                !exp->exp_failed;
 }
 
 static void *
-uuid_export_object(cfs_hlist_node_t *hnode)
+uuid_export_object(struct hlist_node *hnode)
 {
-        return cfs_hlist_entry(hnode, struct obd_export, exp_uuid_hash);
+       return hlist_entry(hnode, struct obd_export, exp_uuid_hash);
 }
 
 static void
-uuid_export_get(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+uuid_export_get(cfs_hash_t *hs, struct hlist_node *hnode)
 {
         struct obd_export *exp;
 
-        exp = cfs_hlist_entry(hnode, struct obd_export, exp_uuid_hash);
+       exp = hlist_entry(hnode, struct obd_export, exp_uuid_hash);
         class_export_get(exp);
 }
 
 static void
-uuid_export_put_locked(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+uuid_export_put_locked(cfs_hash_t *hs, struct hlist_node *hnode)
 {
         struct obd_export *exp;
 
-        exp = cfs_hlist_entry(hnode, struct obd_export, exp_uuid_hash);
+       exp = hlist_entry(hnode, struct obd_export, exp_uuid_hash);
         class_export_put(exp);
 }
 
@@ -2103,11 +1994,11 @@ nid_hash(cfs_hash_t *hs, const void *key, unsigned mask)
 }
 
 static void *
-nid_key(cfs_hlist_node_t *hnode)
+nid_key(struct hlist_node *hnode)
 {
         struct obd_export *exp;
 
-        exp = cfs_hlist_entry(hnode, struct obd_export, exp_nid_hash);
+       exp = hlist_entry(hnode, struct obd_export, exp_nid_hash);
 
         RETURN(&exp->exp_connection->c_peer.nid);
 }
@@ -2117,38 +2008,38 @@ nid_key(cfs_hlist_node_t *hnode)
  *       state with this function
  */
 static int
-nid_kepcmp(const void *key, cfs_hlist_node_t *hnode)
+nid_kepcmp(const void *key, struct hlist_node *hnode)
 {
         struct obd_export *exp;
 
         LASSERT(key);
-        exp = cfs_hlist_entry(hnode, struct obd_export, exp_nid_hash);
+       exp = hlist_entry(hnode, struct obd_export, exp_nid_hash);
 
         RETURN(exp->exp_connection->c_peer.nid == *(lnet_nid_t *)key &&
                !exp->exp_failed);
 }
 
 static void *
-nid_export_object(cfs_hlist_node_t *hnode)
+nid_export_object(struct hlist_node *hnode)
 {
-        return cfs_hlist_entry(hnode, struct obd_export, exp_nid_hash);
+       return hlist_entry(hnode, struct obd_export, exp_nid_hash);
 }
 
 static void
-nid_export_get(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+nid_export_get(cfs_hash_t *hs, struct hlist_node *hnode)
 {
         struct obd_export *exp;
 
-        exp = cfs_hlist_entry(hnode, struct obd_export, exp_nid_hash);
+       exp = hlist_entry(hnode, struct obd_export, exp_nid_hash);
         class_export_get(exp);
 }
 
 static void
-nid_export_put_locked(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+nid_export_put_locked(cfs_hash_t *hs, struct hlist_node *hnode)
 {
         struct obd_export *exp;
 
-        exp = cfs_hlist_entry(hnode, struct obd_export, exp_nid_hash);
+       exp = hlist_entry(hnode, struct obd_export, exp_nid_hash);
         class_export_put(exp);
 }
 
@@ -2167,42 +2058,42 @@ static cfs_hash_ops_t nid_hash_ops = {
  */
 
 static void *
-nidstats_key(cfs_hlist_node_t *hnode)
+nidstats_key(struct hlist_node *hnode)
 {
         struct nid_stat *ns;
 
-        ns = cfs_hlist_entry(hnode, struct nid_stat, nid_hash);
+       ns = hlist_entry(hnode, struct nid_stat, nid_hash);
 
         return &ns->nid;
 }
 
 static int
-nidstats_keycmp(const void *key, cfs_hlist_node_t *hnode)
+nidstats_keycmp(const void *key, struct hlist_node *hnode)
 {
         return *(lnet_nid_t *)nidstats_key(hnode) == *(lnet_nid_t *)key;
 }
 
 static void *
-nidstats_object(cfs_hlist_node_t *hnode)
+nidstats_object(struct hlist_node *hnode)
 {
-        return cfs_hlist_entry(hnode, struct nid_stat, nid_hash);
+       return hlist_entry(hnode, struct nid_stat, nid_hash);
 }
 
 static void
-nidstats_get(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+nidstats_get(cfs_hash_t *hs, struct hlist_node *hnode)
 {
         struct nid_stat *ns;
 
-        ns = cfs_hlist_entry(hnode, struct nid_stat, nid_hash);
+       ns = hlist_entry(hnode, struct nid_stat, nid_hash);
         nidstat_getref(ns);
 }
 
 static void
-nidstats_put_locked(cfs_hash_t *hs, cfs_hlist_node_t *hnode)
+nidstats_put_locked(cfs_hash_t *hs, struct hlist_node *hnode)
 {
         struct nid_stat *ns;
 
-        ns = cfs_hlist_entry(hnode, struct nid_stat, nid_hash);
+       ns = hlist_entry(hnode, struct nid_stat, nid_hash);
         nidstat_putref(ns);
 }