These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / staging / lustre / lustre / obdclass / genops.c
index 66b5678..6477aeb 100644 (file)
@@ -45,7 +45,7 @@
 
 spinlock_t obd_types_lock;
 
-struct kmem_cache *obd_device_cachep;
+static struct kmem_cache *obd_device_cachep;
 struct kmem_cache *obdo_cachep;
 EXPORT_SYMBOL(obdo_cachep);
 static struct kmem_cache *import_cachep;
@@ -56,8 +56,6 @@ static spinlock_t  obd_zombie_impexp_lock;
 static void obd_zombie_impexp_notify(void);
 static void obd_zombie_export_add(struct obd_export *exp);
 static void obd_zombie_import_add(struct obd_import *imp);
-static void print_export_data(struct obd_export *exp,
-                             const char *status, int locks);
 
 int (*ptlrpc_put_connection_superhack)(struct ptlrpc_connection *c);
 EXPORT_SYMBOL(ptlrpc_put_connection_superhack);
@@ -70,10 +68,9 @@ static struct obd_device *obd_device_alloc(void)
 {
        struct obd_device *obd;
 
-       OBD_SLAB_ALLOC_PTR_GFP(obd, obd_device_cachep, GFP_NOFS);
-       if (obd != NULL) {
+       obd = kmem_cache_alloc(obd_device_cachep, GFP_NOFS | __GFP_ZERO);
+       if (obd != NULL)
                obd->obd_magic = OBD_DEVICE_MAGIC;
-       }
        return obd;
 }
 
@@ -88,10 +85,10 @@ static void obd_device_free(struct obd_device *obd)
                LBUG();
        }
        lu_ref_fini(&obd->obd_reference);
-       OBD_SLAB_FREE_PTR(obd, obd_device_cachep);
+       kmem_cache_free(obd_device_cachep, obd);
 }
 
-struct obd_type *class_search_type(const char *name)
+static struct obd_type *class_search_type(const char *name)
 {
        struct list_head *tmp;
        struct obd_type *type;
@@ -107,9 +104,8 @@ struct obd_type *class_search_type(const char *name)
        spin_unlock(&obd_types_lock);
        return NULL;
 }
-EXPORT_SYMBOL(class_search_type);
 
-struct obd_type *class_get_type(const char *name)
+static struct obd_type *class_get_type(const char *name)
 {
        struct obd_type *type = class_search_type(name);
 
@@ -141,7 +137,6 @@ struct obd_type *class_get_type(const char *name)
        }
        return type;
 }
-EXPORT_SYMBOL(class_get_type);
 
 void class_put_type(struct obd_type *type)
 {
@@ -156,7 +151,7 @@ EXPORT_SYMBOL(class_put_type);
 #define CLASS_MAX_NAME 1024
 
 int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
-                       struct lprocfs_vars *vars, const char *name,
+                       const char *name,
                        struct lu_device_type *ldt)
 {
        struct obd_type *type;
@@ -171,17 +166,17 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
        }
 
        rc = -ENOMEM;
-       OBD_ALLOC(type, sizeof(*type));
-       if (type == NULL)
+       type = kzalloc(sizeof(*type), GFP_NOFS);
+       if (!type)
                return rc;
 
-       OBD_ALLOC_PTR(type->typ_dt_ops);
-       OBD_ALLOC_PTR(type->typ_md_ops);
-       OBD_ALLOC(type->typ_name, strlen(name) + 1);
+       type->typ_dt_ops = kzalloc(sizeof(*type->typ_dt_ops), GFP_NOFS);
+       type->typ_md_ops = kzalloc(sizeof(*type->typ_md_ops), GFP_NOFS);
+       type->typ_name = kzalloc(strlen(name) + 1, GFP_NOFS);
 
-       if (type->typ_dt_ops == NULL ||
-           type->typ_md_ops == NULL ||
-           type->typ_name == NULL)
+       if (!type->typ_dt_ops ||
+           !type->typ_md_ops ||
+           !type->typ_name)
                goto failed;
 
        *(type->typ_dt_ops) = *dt_ops;
@@ -191,11 +186,19 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
        strcpy(type->typ_name, name);
        spin_lock_init(&type->obd_type_lock);
 
-       type->typ_procroot = lprocfs_register(type->typ_name, proc_lustre_root,
-                                             vars, type);
-       if (IS_ERR(type->typ_procroot)) {
-               rc = PTR_ERR(type->typ_procroot);
-               type->typ_procroot = NULL;
+       type->typ_debugfs_entry = ldebugfs_register(type->typ_name,
+                                                   debugfs_lustre_root,
+                                                   NULL, type);
+       if (IS_ERR_OR_NULL(type->typ_debugfs_entry)) {
+               rc = type->typ_debugfs_entry ? PTR_ERR(type->typ_debugfs_entry)
+                                            : -ENOMEM;
+               type->typ_debugfs_entry = NULL;
+               goto failed;
+       }
+
+       type->typ_kobj = kobject_create_and_add(type->typ_name, lustre_kobj);
+       if (!type->typ_kobj) {
+               rc = -ENOMEM;
                goto failed;
        }
 
@@ -213,13 +216,12 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
        return 0;
 
  failed:
-       if (type->typ_name != NULL)
-               OBD_FREE(type->typ_name, strlen(name) + 1);
-       if (type->typ_md_ops != NULL)
-               OBD_FREE_PTR(type->typ_md_ops);
-       if (type->typ_dt_ops != NULL)
-               OBD_FREE_PTR(type->typ_dt_ops);
-       OBD_FREE(type, sizeof(*type));
+       if (type->typ_kobj)
+               kobject_put(type->typ_kobj);
+       kfree(type->typ_name);
+       kfree(type->typ_md_ops);
+       kfree(type->typ_dt_ops);
+       kfree(type);
        return rc;
 }
 EXPORT_SYMBOL(class_register_type);
@@ -237,14 +239,16 @@ int class_unregister_type(const char *name)
                CERROR("type %s has refcount (%d)\n", name, type->typ_refcnt);
                /* This is a bad situation, let's make the best of it */
                /* Remove ops, but leave the name for debugging */
-               OBD_FREE_PTR(type->typ_dt_ops);
-               OBD_FREE_PTR(type->typ_md_ops);
+               kfree(type->typ_dt_ops);
+               kfree(type->typ_md_ops);
                return -EBUSY;
        }
 
-       if (type->typ_procroot) {
-               lprocfs_remove(&type->typ_procroot);
-       }
+       if (type->typ_kobj)
+               kobject_put(type->typ_kobj);
+
+       if (!IS_ERR_OR_NULL(type->typ_debugfs_entry))
+               ldebugfs_remove(&type->typ_debugfs_entry);
 
        if (type->typ_lu)
                lu_device_type_fini(type->typ_lu);
@@ -252,12 +256,10 @@ int class_unregister_type(const char *name)
        spin_lock(&obd_types_lock);
        list_del(&type->typ_chain);
        spin_unlock(&obd_types_lock);
-       OBD_FREE(type->typ_name, strlen(name) + 1);
-       if (type->typ_dt_ops != NULL)
-               OBD_FREE_PTR(type->typ_dt_ops);
-       if (type->typ_md_ops != NULL)
-               OBD_FREE_PTR(type->typ_md_ops);
-       OBD_FREE(type, sizeof(*type));
+       kfree(type->typ_name);
+       kfree(type->typ_dt_ops);
+       kfree(type->typ_md_ops);
+       kfree(type);
        return 0;
 } /* class_unregister_type */
 EXPORT_SYMBOL(class_unregister_type);
@@ -287,13 +289,13 @@ struct obd_device *class_newdev(const char *type_name, const char *name)
        }
 
        type = class_get_type(type_name);
-       if (type == NULL){
+       if (!type) {
                CERROR("OBD: unknown type: %s\n", type_name);
                return ERR_PTR(-ENODEV);
        }
 
        newdev = obd_device_alloc();
-       if (newdev == NULL) {
+       if (!newdev) {
                result = ERR_PTR(-ENOMEM);
                goto out_type;
        }
@@ -333,7 +335,7 @@ struct obd_device *class_newdev(const char *type_name, const char *name)
        }
        write_unlock(&obd_dev_lock);
 
-       if (result == NULL && i >= class_devno_max()) {
+       if (!result && i >= class_devno_max()) {
                CERROR("all %u OBD devices used, increase MAX_OBD_DEVICES\n",
                       class_devno_max());
                result = ERR_PTR(-EOVERFLOW);
@@ -433,15 +435,6 @@ int class_uuid2dev(struct obd_uuid *uuid)
 }
 EXPORT_SYMBOL(class_uuid2dev);
 
-struct obd_device *class_uuid2obd(struct obd_uuid *uuid)
-{
-       int dev = class_uuid2dev(uuid);
-       if (dev < 0)
-               return NULL;
-       return class_num2obd(dev);
-}
-EXPORT_SYMBOL(class_uuid2obd);
-
 /**
  * Get obd device from ::obd_devs[]
  *
@@ -456,7 +449,7 @@ struct obd_device *class_num2obd(int num)
 
        if (num < class_devno_max()) {
                obd = obd_devs[num];
-               if (obd == NULL)
+               if (!obd)
                        return NULL;
 
                LASSERTF(obd->obd_magic == OBD_DEVICE_MAGIC,
@@ -471,55 +464,6 @@ struct obd_device *class_num2obd(int num)
 }
 EXPORT_SYMBOL(class_num2obd);
 
-/**
- * Get obd devices count. Device in any
- *    state are counted
- * \retval obd device count
- */
-int get_devices_count(void)
-{
-       int index, max_index = class_devno_max(), dev_count = 0;
-
-       read_lock(&obd_dev_lock);
-       for (index = 0; index <= max_index; index++) {
-               struct obd_device *obd = class_num2obd(index);
-               if (obd != NULL)
-                       dev_count++;
-       }
-       read_unlock(&obd_dev_lock);
-
-       return dev_count;
-}
-EXPORT_SYMBOL(get_devices_count);
-
-void class_obd_list(void)
-{
-       char *status;
-       int i;
-
-       read_lock(&obd_dev_lock);
-       for (i = 0; i < class_devno_max(); i++) {
-               struct obd_device *obd = class_num2obd(i);
-
-               if (obd == NULL)
-                       continue;
-               if (obd->obd_stopping)
-                       status = "ST";
-               else if (obd->obd_set_up)
-                       status = "UP";
-               else if (obd->obd_attached)
-                       status = "AT";
-               else
-                       status = "--";
-               LCONSOLE(D_CONFIG, "%3d %s %s %s %s %d\n",
-                        i, status, obd->obd_type->typ_name,
-                        obd->obd_name, obd->obd_uuid.uuid,
-                        atomic_read(&obd->obd_refcount));
-       }
-       read_unlock(&obd_dev_lock);
-       return;
-}
-
 /* Search for a client OBD connected to tgt_uuid.  If grp_uuid is
    specified, then only the client with that uuid is returned,
    otherwise any client connected to the tgt is returned. */
@@ -533,13 +477,13 @@ struct obd_device *class_find_client_obd(struct obd_uuid *tgt_uuid,
        for (i = 0; i < class_devno_max(); i++) {
                struct obd_device *obd = class_num2obd(i);
 
-               if (obd == NULL)
+               if (!obd)
                        continue;
                if ((strncmp(obd->obd_type->typ_name, typ_name,
                             strlen(typ_name)) == 0)) {
                        if (obd_uuid_equals(tgt_uuid,
                                            &obd->u.cli.cl_target_uuid) &&
-                           ((grp_uuid)? obd_uuid_equals(grp_uuid,
+                           ((grp_uuid) ? obd_uuid_equals(grp_uuid,
                                                         &obd->obd_uuid) : 1)) {
                                read_unlock(&obd_dev_lock);
                                return obd;
@@ -560,7 +504,7 @@ struct obd_device *class_devices_in_group(struct obd_uuid *grp_uuid, int *next)
 {
        int i;
 
-       if (next == NULL)
+       if (!next)
                i = 0;
        else if (*next >= 0 && *next < class_devno_max())
                i = *next;
@@ -571,10 +515,10 @@ struct obd_device *class_devices_in_group(struct obd_uuid *grp_uuid, int *next)
        for (; i < class_devno_max(); i++) {
                struct obd_device *obd = class_num2obd(i);
 
-               if (obd == NULL)
+               if (!obd)
                        continue;
                if (obd_uuid_equals(grp_uuid, &obd->obd_uuid)) {
-                       if (next != NULL)
+                       if (next)
                                *next = i+1;
                        read_unlock(&obd_dev_lock);
                        return obd;
@@ -602,7 +546,7 @@ int class_notify_sptlrpc_conf(const char *fsname, int namelen)
        for (i = 0; i < class_devno_max(); i++) {
                obd = class_num2obd(i);
 
-               if (obd == NULL || obd->obd_set_up == 0 || obd->obd_stopping)
+               if (!obd || obd->obd_set_up == 0 || obd->obd_stopping)
                        continue;
 
                /* only notify mdc, osc, mdt, ost */
@@ -632,52 +576,36 @@ EXPORT_SYMBOL(class_notify_sptlrpc_conf);
 
 void obd_cleanup_caches(void)
 {
-       if (obd_device_cachep) {
-               kmem_cache_destroy(obd_device_cachep);
-               obd_device_cachep = NULL;
-       }
-       if (obdo_cachep) {
-               kmem_cache_destroy(obdo_cachep);
-               obdo_cachep = NULL;
-       }
-       if (import_cachep) {
-               kmem_cache_destroy(import_cachep);
-               import_cachep = NULL;
-       }
-       if (capa_cachep) {
-               kmem_cache_destroy(capa_cachep);
-               capa_cachep = NULL;
-       }
+       kmem_cache_destroy(obd_device_cachep);
+       obd_device_cachep = NULL;
+       kmem_cache_destroy(obdo_cachep);
+       obdo_cachep = NULL;
+       kmem_cache_destroy(import_cachep);
+       import_cachep = NULL;
 }
 
 int obd_init_caches(void)
 {
-       LASSERT(obd_device_cachep == NULL);
+       LASSERT(!obd_device_cachep);
        obd_device_cachep = kmem_cache_create("ll_obd_dev_cache",
                                                 sizeof(struct obd_device),
                                                 0, 0, NULL);
        if (!obd_device_cachep)
                goto out;
 
-       LASSERT(obdo_cachep == NULL);
+       LASSERT(!obdo_cachep);
        obdo_cachep = kmem_cache_create("ll_obdo_cache", sizeof(struct obdo),
                                           0, 0, NULL);
        if (!obdo_cachep)
                goto out;
 
-       LASSERT(import_cachep == NULL);
+       LASSERT(!import_cachep);
        import_cachep = kmem_cache_create("ll_import_cache",
                                             sizeof(struct obd_import),
                                             0, 0, NULL);
        if (!import_cachep)
                goto out;
 
-       LASSERT(capa_cachep == NULL);
-       capa_cachep = kmem_cache_create("capa_cache",
-                                          sizeof(struct obd_capa), 0, 0, NULL);
-       if (!capa_cachep)
-               goto out;
-
        return 0;
  out:
        obd_cleanup_caches();
@@ -714,36 +642,15 @@ struct obd_device *class_exp2obd(struct obd_export *exp)
 }
 EXPORT_SYMBOL(class_exp2obd);
 
-struct obd_device *class_conn2obd(struct lustre_handle *conn)
-{
-       struct obd_export *export;
-       export = class_conn2export(conn);
-       if (export) {
-               struct obd_device *obd = export->exp_obd;
-               class_export_put(export);
-               return obd;
-       }
-       return NULL;
-}
-EXPORT_SYMBOL(class_conn2obd);
-
 struct obd_import *class_exp2cliimp(struct obd_export *exp)
 {
        struct obd_device *obd = exp->exp_obd;
-       if (obd == NULL)
-               return NULL;
-       return obd->u.cli.cl_import;
-}
-EXPORT_SYMBOL(class_exp2cliimp);
 
-struct obd_import *class_conn2cliimp(struct lustre_handle *conn)
-{
-       struct obd_device *obd = class_conn2obd(conn);
-       if (obd == NULL)
+       if (!obd)
                return NULL;
        return obd->u.cli.cl_import;
 }
-EXPORT_SYMBOL(class_conn2cliimp);
+EXPORT_SYMBOL(class_exp2cliimp);
 
 /* Export management functions */
 static void class_export_destroy(struct obd_export *exp)
@@ -819,7 +726,7 @@ struct obd_export *class_new_export(struct obd_device *obd,
        struct cfs_hash *hash = NULL;
        int rc = 0;
 
-       OBD_ALLOC_PTR(export);
+       export = kzalloc(sizeof(*export), GFP_NOFS);
        if (!export)
                return ERR_PTR(-ENOMEM);
 
@@ -843,11 +750,9 @@ struct obd_export *class_new_export(struct obd_device *obd,
        INIT_LIST_HEAD(&export->exp_handle.h_link);
        INIT_LIST_HEAD(&export->exp_hp_rpcs);
        class_handle_hash(&export->exp_handle, &export_handle_ops);
-       export->exp_last_request_time = get_seconds();
        spin_lock_init(&export->exp_lock);
        spin_lock_init(&export->exp_rpc_lock);
        INIT_HLIST_NODE(&export->exp_uuid_hash);
-       INIT_HLIST_NODE(&export->exp_nid_hash);
        spin_lock_init(&export->exp_bl_list_lock);
        INIT_LIST_HEAD(&export->exp_bl_list);
 
@@ -864,7 +769,7 @@ struct obd_export *class_new_export(struct obd_device *obd,
        }
 
        hash = cfs_hash_getref(obd->obd_uuid_hash);
-       if (hash == NULL) {
+       if (!hash) {
                rc = -ENODEV;
                goto exit_unlock;
        }
@@ -889,8 +794,6 @@ struct obd_export *class_new_export(struct obd_device *obd,
 
        class_incref(obd, "export", export);
        list_add(&export->exp_obd_chain, &export->exp_obd->obd_exports);
-       list_add_tail(&export->exp_obd_chain_timed,
-                         &export->exp_obd->obd_exports_timed);
        export->exp_obd->obd_num_exports++;
        spin_unlock(&obd->obd_dev_lock);
        cfs_hash_putref(hash);
@@ -904,7 +807,7 @@ exit_err:
        class_handle_unhash(&export->exp_handle);
        LASSERT(hlist_unhashed(&export->exp_uuid_hash));
        obd_destroy_export(export);
-       OBD_FREE_PTR(export);
+       kfree(export);
        return ERR_PTR(rc);
 }
 EXPORT_SYMBOL(class_new_export);
@@ -921,7 +824,6 @@ void class_unlink_export(struct obd_export *exp)
                             &exp->exp_uuid_hash);
 
        list_move(&exp->exp_obd_chain, &exp->exp_obd->obd_unlinked_exports);
-       list_del_init(&exp->exp_obd_chain_timed);
        exp->exp_obd->obd_num_exports--;
        spin_unlock(&exp->exp_obd->obd_dev_lock);
        class_export_put(exp);
@@ -945,10 +847,10 @@ static void class_import_destroy(struct obd_import *imp)
                                          struct obd_import_conn, oic_item);
                list_del_init(&imp_conn->oic_item);
                ptlrpc_put_connection_superhack(imp_conn->oic_conn);
-               OBD_FREE(imp_conn, sizeof(*imp_conn));
+               kfree(imp_conn);
        }
 
-       LASSERT(imp->imp_sec == NULL);
+       LASSERT(!imp->imp_sec);
        class_decref(imp->imp_obd, "import", imp);
        OBD_FREE_RCU(imp, sizeof(*imp), &imp->imp_handle);
 }
@@ -992,8 +894,10 @@ void class_import_put(struct obd_import *imp)
 }
 EXPORT_SYMBOL(class_import_put);
 
-static void init_imp_at(struct imp_at *at) {
+static void init_imp_at(struct imp_at *at)
+{
        int i;
+
        at_init(&at->iat_net_latency, 0, 0);
        for (i = 0; i < IMP_AT_MAX_PORTALS; i++) {
                /* max service estimates are tracked on the server side, so
@@ -1008,8 +912,8 @@ struct obd_import *class_new_import(struct obd_device *obd)
 {
        struct obd_import *imp;
 
-       OBD_ALLOC(imp, sizeof(*imp));
-       if (imp == NULL)
+       imp = kzalloc(sizeof(*imp), GFP_NOFS);
+       if (!imp)
                return NULL;
 
        INIT_LIST_HEAD(&imp->imp_pinger_chain);
@@ -1071,7 +975,7 @@ void __class_export_add_lock_ref(struct obd_export *exp, struct ldlm_lock *lock)
                LCONSOLE_WARN("setting export %p for lock %p which already has export %p\n",
                              exp, lock, lock->l_exp_refs_target);
        }
-       if ((lock->l_exp_refs_nr ++) == 0) {
+       if ((lock->l_exp_refs_nr++) == 0) {
                list_add(&lock->l_exp_refs_link, &exp->exp_locks_list);
                lock->l_exp_refs_target = exp;
        }
@@ -1108,6 +1012,7 @@ int class_connect(struct lustre_handle *conn, struct obd_device *obd,
                  struct obd_uuid *cluuid)
 {
        struct obd_export *export;
+
        LASSERT(conn != NULL);
        LASSERT(obd != NULL);
        LASSERT(cluuid != NULL);
@@ -1125,51 +1030,6 @@ int class_connect(struct lustre_handle *conn, struct obd_device *obd,
 }
 EXPORT_SYMBOL(class_connect);
 
-/* if export is involved in recovery then clean up related things */
-static void class_export_recovery_cleanup(struct obd_export *exp)
-{
-       struct obd_device *obd = exp->exp_obd;
-
-       spin_lock(&obd->obd_recovery_task_lock);
-       if (exp->exp_delayed)
-               obd->obd_delayed_clients--;
-       if (obd->obd_recovering) {
-               if (exp->exp_in_recovery) {
-                       spin_lock(&exp->exp_lock);
-                       exp->exp_in_recovery = 0;
-                       spin_unlock(&exp->exp_lock);
-                       LASSERT_ATOMIC_POS(&obd->obd_connected_clients);
-                       atomic_dec(&obd->obd_connected_clients);
-               }
-
-               /* if called during recovery then should update
-                * obd_stale_clients counter,
-                * lightweight exports are not counted */
-               if (exp->exp_failed &&
-                   (exp_connect_flags(exp) & OBD_CONNECT_LIGHTWEIGHT) == 0)
-                       exp->exp_obd->obd_stale_clients++;
-       }
-       spin_unlock(&obd->obd_recovery_task_lock);
-
-       spin_lock(&exp->exp_lock);
-       /** Cleanup req replay fields */
-       if (exp->exp_req_replay_needed) {
-               exp->exp_req_replay_needed = 0;
-
-               LASSERT(atomic_read(&obd->obd_req_replay_clients));
-               atomic_dec(&obd->obd_req_replay_clients);
-       }
-
-       /** Cleanup lock replay data */
-       if (exp->exp_lock_replay_needed) {
-               exp->exp_lock_replay_needed = 0;
-
-               LASSERT(atomic_read(&obd->obd_lock_replay_clients));
-               atomic_dec(&obd->obd_lock_replay_clients);
-       }
-       spin_unlock(&exp->exp_lock);
-}
-
 /* This function removes 1-3 references from the export:
  * 1 - for export pointer passed
  * and if disconnect really need
@@ -1180,7 +1040,7 @@ int class_disconnect(struct obd_export *export)
 {
        int already_disconnected;
 
-       if (export == NULL) {
+       if (!export) {
                CWARN("attempting to free NULL export %p\n", export);
                return -EINVAL;
        }
@@ -1193,20 +1053,12 @@ int class_disconnect(struct obd_export *export)
        /* class_cleanup(), abort_recovery(), and class_fail_export()
         * all end up in here, and if any of them race we shouldn't
         * call extra class_export_puts(). */
-       if (already_disconnected) {
-               LASSERT(hlist_unhashed(&export->exp_nid_hash));
+       if (already_disconnected)
                goto no_disconn;
-       }
 
        CDEBUG(D_IOCTL, "disconnect: cookie %#llx\n",
               export->exp_handle.h_cookie);
 
-       if (!hlist_unhashed(&export->exp_nid_hash))
-               cfs_hash_del(export->exp_obd->obd_nid_hash,
-                            &export->exp_connection->c_peer.nid,
-                            &export->exp_nid_hash);
-
-       class_export_recovery_cleanup(export);
        class_unlink_export(export);
 no_disconn:
        class_export_put(export);
@@ -1214,135 +1066,6 @@ no_disconn:
 }
 EXPORT_SYMBOL(class_disconnect);
 
-/* Return non-zero for a fully connected export */
-int class_connected_export(struct obd_export *exp)
-{
-       if (exp) {
-               int connected;
-               spin_lock(&exp->exp_lock);
-               connected = exp->exp_conn_cnt > 0;
-               spin_unlock(&exp->exp_lock);
-               return connected;
-       }
-       return 0;
-}
-EXPORT_SYMBOL(class_connected_export);
-
-static void class_disconnect_export_list(struct list_head *list,
-                                        enum obd_option flags)
-{
-       int rc;
-       struct obd_export *exp;
-
-       /* It's possible that an export may disconnect itself, but
-        * nothing else will be added to this list. */
-       while (!list_empty(list)) {
-               exp = list_entry(list->next, struct obd_export,
-                                    exp_obd_chain);
-               /* need for safe call CDEBUG after obd_disconnect */
-               class_export_get(exp);
-
-               spin_lock(&exp->exp_lock);
-               exp->exp_flags = flags;
-               spin_unlock(&exp->exp_lock);
-
-               if (obd_uuid_equals(&exp->exp_client_uuid,
-                                   &exp->exp_obd->obd_uuid)) {
-                       CDEBUG(D_HA,
-                              "exp %p export uuid == obd uuid, don't discon\n",
-                              exp);
-                       /* Need to delete this now so we don't end up pointing
-                        * to work_list later when this export is cleaned up. */
-                       list_del_init(&exp->exp_obd_chain);
-                       class_export_put(exp);
-                       continue;
-               }
-
-               class_export_get(exp);
-               CDEBUG(D_HA, "%s: disconnecting export at %s (%p), last request at " CFS_TIME_T "\n",
-                      exp->exp_obd->obd_name, obd_export_nid2str(exp),
-                      exp, exp->exp_last_request_time);
-               /* release one export reference anyway */
-               rc = obd_disconnect(exp);
-
-               CDEBUG(D_HA, "disconnected export at %s (%p): rc %d\n",
-                      obd_export_nid2str(exp), exp, rc);
-               class_export_put(exp);
-       }
-}
-
-void class_disconnect_exports(struct obd_device *obd)
-{
-       struct list_head work_list;
-
-       /* Move all of the exports from obd_exports to a work list, en masse. */
-       INIT_LIST_HEAD(&work_list);
-       spin_lock(&obd->obd_dev_lock);
-       list_splice_init(&obd->obd_exports, &work_list);
-       list_splice_init(&obd->obd_delayed_exports, &work_list);
-       spin_unlock(&obd->obd_dev_lock);
-
-       if (!list_empty(&work_list)) {
-               CDEBUG(D_HA, "OBD device %d (%p) has exports, disconnecting them\n",
-                      obd->obd_minor, obd);
-               class_disconnect_export_list(&work_list,
-                                            exp_flags_from_obd(obd));
-       } else
-               CDEBUG(D_HA, "OBD device %d (%p) has no exports\n",
-                      obd->obd_minor, obd);
-}
-EXPORT_SYMBOL(class_disconnect_exports);
-
-/* Remove exports that have not completed recovery.
- */
-void class_disconnect_stale_exports(struct obd_device *obd,
-                                   int (*test_export)(struct obd_export *))
-{
-       struct list_head work_list;
-       struct obd_export *exp, *n;
-       int evicted = 0;
-
-       INIT_LIST_HEAD(&work_list);
-       spin_lock(&obd->obd_dev_lock);
-       list_for_each_entry_safe(exp, n, &obd->obd_exports,
-                                    exp_obd_chain) {
-               /* don't count self-export as client */
-               if (obd_uuid_equals(&exp->exp_client_uuid,
-                                   &exp->exp_obd->obd_uuid))
-                       continue;
-
-               /* don't evict clients which have no slot in last_rcvd
-                * (e.g. lightweight connection) */
-               if (exp->exp_target_data.ted_lr_idx == -1)
-                       continue;
-
-               spin_lock(&exp->exp_lock);
-               if (exp->exp_failed || test_export(exp)) {
-                       spin_unlock(&exp->exp_lock);
-                       continue;
-               }
-               exp->exp_failed = 1;
-               spin_unlock(&exp->exp_lock);
-
-               list_move(&exp->exp_obd_chain, &work_list);
-               evicted++;
-               CDEBUG(D_HA, "%s: disconnect stale client %s@%s\n",
-                      obd->obd_name, exp->exp_client_uuid.uuid,
-                      exp->exp_connection == NULL ? "<unknown>" :
-                      libcfs_nid2str(exp->exp_connection->c_peer.nid));
-               print_export_data(exp, "EVICTING", 0);
-       }
-       spin_unlock(&obd->obd_dev_lock);
-
-       if (evicted)
-               LCONSOLE_WARN("%s: disconnecting %d stale clients\n",
-                             obd->obd_name, evicted);
-
-       class_disconnect_export_list(&work_list, exp_flags_from_obd(obd) |
-                                                OBD_OPT_ABORT_RECOV);
-}
-EXPORT_SYMBOL(class_disconnect_stale_exports);
-
 void class_fail_export(struct obd_export *exp)
 {
        int rc, already_failed;
@@ -1381,189 +1104,18 @@ void class_fail_export(struct obd_export *exp)
 }
 EXPORT_SYMBOL(class_fail_export);
 
-char *obd_export_nid2str(struct obd_export *exp)
-{
-       if (exp->exp_connection != NULL)
-               return libcfs_nid2str(exp->exp_connection->c_peer.nid);
-
-       return "(no nid)";
-}
-EXPORT_SYMBOL(obd_export_nid2str);
-
-int obd_export_evict_by_nid(struct obd_device *obd, const char *nid)
-{
-       struct cfs_hash *nid_hash;
-       struct obd_export *doomed_exp = NULL;
-       int exports_evicted = 0;
-
-       lnet_nid_t nid_key = libcfs_str2nid((char *)nid);
-
-       spin_lock(&obd->obd_dev_lock);
-       /* umount has run already, so evict thread should leave
-        * its task to umount thread now */
-       if (obd->obd_stopping) {
-               spin_unlock(&obd->obd_dev_lock);
-               return exports_evicted;
-       }
-       nid_hash = obd->obd_nid_hash;
-       cfs_hash_getref(nid_hash);
-       spin_unlock(&obd->obd_dev_lock);
-
-       do {
-               doomed_exp = cfs_hash_lookup(nid_hash, &nid_key);
-               if (doomed_exp == NULL)
-                       break;
-
-               LASSERTF(doomed_exp->exp_connection->c_peer.nid == nid_key,
-                        "nid %s found, wanted nid %s, requested nid %s\n",
-                        obd_export_nid2str(doomed_exp),
-                        libcfs_nid2str(nid_key), nid);
-               LASSERTF(doomed_exp != obd->obd_self_export,
-                        "self-export is hashed by NID?\n");
-               exports_evicted++;
-               LCONSOLE_WARN("%s: evicting %s (at %s) by administrative request\n",
-                             obd->obd_name,
-                             obd_uuid2str(&doomed_exp->exp_client_uuid),
-                             obd_export_nid2str(doomed_exp));
-               class_fail_export(doomed_exp);
-               class_export_put(doomed_exp);
-       } while (1);
-
-       cfs_hash_putref(nid_hash);
-
-       if (!exports_evicted)
-               CDEBUG(D_HA,
-                      "%s: can't disconnect NID '%s': no exports found\n",
-                      obd->obd_name, nid);
-       return exports_evicted;
-}
-EXPORT_SYMBOL(obd_export_evict_by_nid);
-
-int obd_export_evict_by_uuid(struct obd_device *obd, const char *uuid)
-{
-       struct cfs_hash *uuid_hash;
-       struct obd_export *doomed_exp = NULL;
-       struct obd_uuid doomed_uuid;
-       int exports_evicted = 0;
-
-       spin_lock(&obd->obd_dev_lock);
-       if (obd->obd_stopping) {
-               spin_unlock(&obd->obd_dev_lock);
-               return exports_evicted;
-       }
-       uuid_hash = obd->obd_uuid_hash;
-       cfs_hash_getref(uuid_hash);
-       spin_unlock(&obd->obd_dev_lock);
-
-       obd_str2uuid(&doomed_uuid, uuid);
-       if (obd_uuid_equals(&doomed_uuid, &obd->obd_uuid)) {
-               CERROR("%s: can't evict myself\n", obd->obd_name);
-               cfs_hash_putref(uuid_hash);
-               return exports_evicted;
-       }
-
-       doomed_exp = cfs_hash_lookup(uuid_hash, &doomed_uuid);
-
-       if (doomed_exp == NULL) {
-               CERROR("%s: can't disconnect %s: no exports found\n",
-                      obd->obd_name, uuid);
-       } else {
-               CWARN("%s: evicting %s at administrative request\n",
-                      obd->obd_name, doomed_exp->exp_client_uuid.uuid);
-               class_fail_export(doomed_exp);
-               class_export_put(doomed_exp);
-               exports_evicted++;
-       }
-       cfs_hash_putref(uuid_hash);
-
-       return exports_evicted;
-}
-EXPORT_SYMBOL(obd_export_evict_by_uuid);
-
 #if LUSTRE_TRACKS_LOCK_EXP_REFS
-void (*class_export_dump_hook)(struct obd_export*) = NULL;
+void (*class_export_dump_hook)(struct obd_export *) = NULL;
 EXPORT_SYMBOL(class_export_dump_hook);
 #endif
 
-static void print_export_data(struct obd_export *exp, const char *status,
-                             int locks)
-{
-       struct ptlrpc_reply_state *rs;
-       struct ptlrpc_reply_state *first_reply = NULL;
-       int nreplies = 0;
-
-       spin_lock(&exp->exp_lock);
-       list_for_each_entry(rs, &exp->exp_outstanding_replies,
-                               rs_exp_list) {
-               if (nreplies == 0)
-                       first_reply = rs;
-               nreplies++;
-       }
-       spin_unlock(&exp->exp_lock);
-
-       CDEBUG(D_HA, "%s: %s %p %s %s %d (%d %d %d) %d %d %d %d: %p %s %llu\n",
-              exp->exp_obd->obd_name, status, exp, exp->exp_client_uuid.uuid,
-              obd_export_nid2str(exp), atomic_read(&exp->exp_refcount),
-              atomic_read(&exp->exp_rpc_count),
-              atomic_read(&exp->exp_cb_count),
-              atomic_read(&exp->exp_locks_count),
-              exp->exp_disconnected, exp->exp_delayed, exp->exp_failed,
-              nreplies, first_reply, nreplies > 3 ? "..." : "",
-              exp->exp_last_committed);
-#if LUSTRE_TRACKS_LOCK_EXP_REFS
-       if (locks && class_export_dump_hook != NULL)
-               class_export_dump_hook(exp);
-#endif
-}
-
-void dump_exports(struct obd_device *obd, int locks)
-{
-       struct obd_export *exp;
-
-       spin_lock(&obd->obd_dev_lock);
-       list_for_each_entry(exp, &obd->obd_exports, exp_obd_chain)
-               print_export_data(exp, "ACTIVE", locks);
-       list_for_each_entry(exp, &obd->obd_unlinked_exports, exp_obd_chain)
-               print_export_data(exp, "UNLINKED", locks);
-       list_for_each_entry(exp, &obd->obd_delayed_exports, exp_obd_chain)
-               print_export_data(exp, "DELAYED", locks);
-       spin_unlock(&obd->obd_dev_lock);
-       spin_lock(&obd_zombie_impexp_lock);
-       list_for_each_entry(exp, &obd_zombie_exports, exp_obd_chain)
-               print_export_data(exp, "ZOMBIE", locks);
-       spin_unlock(&obd_zombie_impexp_lock);
-}
-EXPORT_SYMBOL(dump_exports);
-
-void obd_exports_barrier(struct obd_device *obd)
-{
-       int waited = 2;
-       LASSERT(list_empty(&obd->obd_exports));
-       spin_lock(&obd->obd_dev_lock);
-       while (!list_empty(&obd->obd_unlinked_exports)) {
-               spin_unlock(&obd->obd_dev_lock);
-               set_current_state(TASK_UNINTERRUPTIBLE);
-               schedule_timeout(cfs_time_seconds(waited));
-               if (waited > 5 && IS_PO2(waited)) {
-                       LCONSOLE_WARN("%s is waiting for obd_unlinked_exports more than %d seconds. The obd refcount = %d. Is it stuck?\n",
-                                     obd->obd_name, waited,
-                                     atomic_read(&obd->obd_refcount));
-                       dump_exports(obd, 1);
-               }
-               waited *= 2;
-               spin_lock(&obd->obd_dev_lock);
-       }
-       spin_unlock(&obd->obd_dev_lock);
-}
-EXPORT_SYMBOL(obd_exports_barrier);
-
 /* Total amount of zombies to be destroyed */
 static int zombies_count;
 
 /**
  * kill zombie imports and exports
  */
-void obd_zombie_impexp_cull(void)
+static void obd_zombie_impexp_cull(void)
 {
        struct obd_import *import;
        struct obd_export *export;
@@ -1635,7 +1187,8 @@ static int obd_zombie_impexp_check(void *arg)
 /**
  * Add export to the obd_zombie thread and notify it.
  */
-static void obd_zombie_export_add(struct obd_export *exp) {
+static void obd_zombie_export_add(struct obd_export *exp)
+{
        spin_lock(&exp->exp_obd->obd_dev_lock);
        LASSERT(!list_empty(&exp->exp_obd_chain));
        list_del_init(&exp->exp_obd_chain);
@@ -1651,9 +1204,9 @@ static void obd_zombie_export_add(struct obd_export *exp) {
 /**
  * Add import to the obd_zombie thread and notify it.
  */
-static void obd_zombie_import_add(struct obd_import *imp) {
-       LASSERT(imp->imp_sec == NULL);
-       LASSERT(imp->imp_rq_pool == NULL);
+static void obd_zombie_import_add(struct obd_import *imp)
+{
+       LASSERT(!imp->imp_sec);
        spin_lock(&obd_zombie_impexp_lock);
        LASSERT(list_empty(&imp->imp_zombie_chain));
        zombies_count++;
@@ -1704,7 +1257,6 @@ void obd_zombie_barrier(void)
 }
 EXPORT_SYMBOL(obd_zombie_barrier);
 
-
 /**
  * destroy zombie export/import thread.
  */
@@ -1734,7 +1286,6 @@ static int obd_zombie_impexp_thread(void *unused)
        return 0;
 }
 
-
 /**
  * start destroy zombie import/export thread
  */
@@ -1757,6 +1308,7 @@ int obd_zombie_impexp_init(void)
        wait_for_completion(&obd_zombie_start);
        return 0;
 }
+
 /**
  * stop destroy zombie import/export thread
  */
@@ -1766,68 +1318,3 @@ void obd_zombie_impexp_stop(void)
        obd_zombie_impexp_notify();
        wait_for_completion(&obd_zombie_stop);
 }
-
-/***** Kernel-userspace comm helpers *******/
-
-/* Get length of entire message, including header */
-int kuc_len(int payload_len)
-{
-       return sizeof(struct kuc_hdr) + payload_len;
-}
-EXPORT_SYMBOL(kuc_len);
-
-/* Get a pointer to kuc header, given a ptr to the payload
- * @param p Pointer to payload area
- * @returns Pointer to kuc header
- */
-struct kuc_hdr *kuc_ptr(void *p)
-{
-       struct kuc_hdr *lh = ((struct kuc_hdr *)p) - 1;
-       LASSERT(lh->kuc_magic == KUC_MAGIC);
-       return lh;
-}
-EXPORT_SYMBOL(kuc_ptr);
-
-/* Test if payload is part of kuc message
- * @param p Pointer to payload area
- * @returns boolean
- */
-int kuc_ispayload(void *p)
-{
-       struct kuc_hdr *kh = ((struct kuc_hdr *)p) - 1;
-
-       if (kh->kuc_magic == KUC_MAGIC)
-               return 1;
-       else
-               return 0;
-}
-EXPORT_SYMBOL(kuc_ispayload);
-
-/* Alloc space for a message, and fill in header
- * @return Pointer to payload area
- */
-void *kuc_alloc(int payload_len, int transport, int type)
-{
-       struct kuc_hdr *lh;
-       int len = kuc_len(payload_len);
-
-       OBD_ALLOC(lh, len);
-       if (lh == NULL)
-               return ERR_PTR(-ENOMEM);
-
-       lh->kuc_magic = KUC_MAGIC;
-       lh->kuc_transport = transport;
-       lh->kuc_msgtype = type;
-       lh->kuc_msglen = len;
-
-       return (void *)(lh + 1);
-}
-EXPORT_SYMBOL(kuc_alloc);
-
-/* Takes pointer to payload area */
-inline void kuc_free(void *p, int payload_len)
-{
-       struct kuc_hdr *lh = kuc_ptr(p);
-       OBD_FREE(lh, kuc_len(payload_len));
-}
-EXPORT_SYMBOL(kuc_free);