*
* You should have received a copy of the GNU General Public License
* version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
*
* GPL HEADER END
*/
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2012, Intel Corporation.
+ * Copyright (c) 2011, 2014, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#define DEBUG_SUBSYSTEM S_RPC
-#ifndef __KERNEL__
-# include <liblustre.h>
-#endif
#include <obd_support.h>
#include <obd_class.h>
#include "ptlrpc_internal.h"
-extern spinlock_t ptlrpc_last_xid_lock;
-#if RS_DEBUG
-extern spinlock_t ptlrpc_rs_debug_lock;
-#endif
-extern struct mutex pinger_mutex;
-extern struct mutex ptlrpcd_mutex;
-
-__init int ptlrpc_init(void)
+static __init int ptlrpc_init(void)
{
- int rc, cleanup_phase = 0;
- ENTRY;
+ int rc;
+
+ ENTRY;
- lustre_assert_wire_constants();
+ lustre_assert_wire_constants();
#if RS_DEBUG
spin_lock_init(&ptlrpc_rs_debug_lock);
#endif
+ INIT_LIST_HEAD(&ptlrpc_all_services);
mutex_init(&ptlrpc_all_services_mutex);
mutex_init(&pinger_mutex);
mutex_init(&ptlrpcd_mutex);
- ptlrpc_init_xid();
+ ptlrpc_init_xid();
- rc = req_layout_init();
- if (rc)
- RETURN(rc);
+ rc = req_layout_init();
+ if (rc)
+ RETURN(rc);
- rc = ptlrpc_hr_init();
- if (rc)
- RETURN(rc);
+ rc = tgt_mod_init();
+ if (rc)
+ GOTO(err_layout, rc);
- cleanup_phase = 1;
+ rc = ptlrpc_hr_init();
+ if (rc)
+ GOTO(err_tgt, rc);
- rc = ptlrpc_init_portals();
- if (rc)
- GOTO(cleanup, rc);
- cleanup_phase = 2;
+ rc = ptlrpc_request_cache_init();
+ if (rc)
+ GOTO(err_hr, rc);
- rc = ptlrpc_connection_init();
- if (rc)
- GOTO(cleanup, rc);
- cleanup_phase = 3;
+ rc = ptlrpc_init_portals();
+ if (rc)
+ GOTO(err_cache, rc);
- ptlrpc_put_connection_superhack = ptlrpc_connection_put;
+ rc = ptlrpc_connection_init();
+ if (rc)
+ GOTO(err_portals, rc);
- rc = ptlrpc_start_pinger();
- if (rc)
- GOTO(cleanup, rc);
- cleanup_phase = 4;
+ ptlrpc_put_connection_superhack = ptlrpc_connection_put;
- rc = ldlm_init();
- if (rc)
- GOTO(cleanup, rc);
- cleanup_phase = 5;
+ rc = ptlrpc_start_pinger();
+ if (rc)
+ GOTO(err_conn, rc);
+
+ rc = ldlm_init();
+ if (rc)
+ GOTO(err_pinger, rc);
- rc = sptlrpc_init();
- if (rc)
- GOTO(cleanup, rc);
+ rc = sptlrpc_init();
+ if (rc)
+ GOTO(err_ldlm, rc);
- cleanup_phase = 7;
rc = ptlrpc_nrs_init();
if (rc)
- GOTO(cleanup, rc);
+ GOTO(err_sptlrpc, rc);
-#ifdef __KERNEL__
- cleanup_phase = 8;
- rc = tgt_mod_init();
+ rc = nodemap_mod_init();
if (rc)
- GOTO(cleanup, rc);
-#endif
- RETURN(0);
+ GOTO(err_nrs, rc);
-cleanup:
- switch(cleanup_phase) {
-#ifdef __KERNEL__
- case 8:
- ptlrpc_nrs_fini();
-#endif
- case 7:
- sptlrpc_fini();
- case 5:
- ldlm_exit();
- case 4:
- ptlrpc_stop_pinger();
- case 3:
- ptlrpc_connection_fini();
- case 2:
- ptlrpc_exit_portals();
- case 1:
- ptlrpc_hr_fini();
- req_layout_fini();
- default: ;
- }
-
- return rc;
+ RETURN(0);
+err_nrs:
+ ptlrpc_nrs_fini();
+err_sptlrpc:
+ sptlrpc_fini();
+err_ldlm:
+ ldlm_exit();
+err_pinger:
+ ptlrpc_stop_pinger();
+err_conn:
+ ptlrpc_connection_fini();
+err_portals:
+ ptlrpc_exit_portals();
+err_cache:
+ ptlrpc_request_cache_fini();
+err_hr:
+ ptlrpc_hr_fini();
+err_tgt:
+ tgt_mod_exit();
+err_layout:
+ req_layout_fini();
+ return rc;
}
-#ifdef __KERNEL__
static void __exit ptlrpc_exit(void)
{
- tgt_mod_exit();
+ nodemap_mod_exit();
ptlrpc_nrs_fini();
- sptlrpc_fini();
- ldlm_exit();
- ptlrpc_stop_pinger();
- ptlrpc_exit_portals();
- ptlrpc_hr_fini();
- ptlrpc_connection_fini();
+ sptlrpc_fini();
+ ldlm_exit();
+ ptlrpc_stop_pinger();
+ ptlrpc_exit_portals();
+ ptlrpc_request_cache_fini();
+ ptlrpc_hr_fini();
+ ptlrpc_connection_fini();
+ tgt_mod_exit();
+ req_layout_fini();
}
-MODULE_AUTHOR("Sun Microsystems, Inc. <http://www.lustre.org/>");
+MODULE_AUTHOR("OpenSFS, Inc. <http://www.lustre.org/>");
MODULE_DESCRIPTION("Lustre Request Processor and Lock Management");
+MODULE_VERSION(LUSTRE_VERSION_STRING);
MODULE_LICENSE("GPL");
-cfs_module(ptlrpc, "1.0.0", ptlrpc_init, ptlrpc_exit);
-#endif
+module_init(ptlrpc_init);
+module_exit(ptlrpc_exit);