X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lnet%2Flnet%2Fmodule.c;h=3547a3b22d1f75860d10cd6a57c513c1d9e0eee8;hp=2327797b60f6fd3b4a989501a6d9d0fb704ab08e;hb=5655ee76f5c7573c9ad076a92df6388f27b65196;hpb=e2af7fb3c91dfb13d34d8e1b2f2df8c09621f768 diff --git a/lnet/lnet/module.c b/lnet/lnet/module.c index 2327797b..3547a3b 100644 --- a/lnet/lnet/module.c +++ b/lnet/lnet/module.c @@ -26,6 +26,8 @@ /* * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -34,31 +36,32 @@ #define DEBUG_SUBSYSTEM S_LNET #include +#include static int config_on_load = 0; CFS_MODULE_PARM(config_on_load, "i", int, 0444, "configure network at module load"); -static cfs_mutex_t lnet_config_mutex; +static struct mutex lnet_config_mutex; int -lnet_configure (void *arg) +lnet_configure(void *arg) { - /* 'arg' only there so I can be passed to cfs_create_thread() */ - int rc = 0; + /* 'arg' only there so I can be passed to cfs_create_thread() */ + int rc = 0; - LNET_MUTEX_LOCK(&lnet_config_mutex); + LNET_MUTEX_LOCK(&lnet_config_mutex); - if (!the_lnet.ln_niinit_self) { - rc = LNetNIInit(LUSTRE_SRV_LNET_PID); - if (rc >= 0) { - the_lnet.ln_niinit_self = 1; - rc = 0; - } - } + if (!the_lnet.ln_niinit_self) { + rc = LNetNIInit(LUSTRE_SRV_LNET_PID); + if (rc >= 0) { + the_lnet.ln_niinit_self = 1; + rc = 0; + } + } - LNET_MUTEX_UNLOCK(&lnet_config_mutex); - return rc; + LNET_MUTEX_UNLOCK(&lnet_config_mutex); + return rc; } int @@ -82,28 +85,80 @@ lnet_unconfigure (void) } int -lnet_ioctl(unsigned int cmd, struct libcfs_ioctl_data *data) +lnet_dyn_configure(struct libcfs_ioctl_hdr *hdr) { - int rc; - - switch (cmd) { - case IOC_LIBCFS_CONFIGURE: - return lnet_configure(NULL); - - case IOC_LIBCFS_UNCONFIGURE: - return lnet_unconfigure(); - - default: - /* Passing LNET_PID_ANY only gives me a ref if the net is up - * already; I'll need it to ensure the net can't go down while - * I'm called into it */ - rc = LNetNIInit(LNET_PID_ANY); - if (rc >= 0) { - rc = LNetCtl(cmd, data); - LNetNIFini(); - } - return rc; - } + struct lnet_ioctl_config_data *conf = + (struct lnet_ioctl_config_data *)hdr; + int rc; + + LNET_MUTEX_LOCK(&lnet_config_mutex); + if (the_lnet.ln_niinit_self) + rc = lnet_dyn_add_ni(LUSTRE_SRV_LNET_PID, + conf->cfg_config_u.cfg_net.net_intf, + conf->cfg_config_u.cfg_net. + net_peer_timeout, + conf->cfg_config_u.cfg_net. + net_peer_tx_credits, + conf->cfg_config_u.cfg_net. + net_peer_rtr_credits, + conf->cfg_config_u.cfg_net. + net_max_tx_credits); + else + rc = -EINVAL; + LNET_MUTEX_UNLOCK(&lnet_config_mutex); + return rc; +} + +int +lnet_dyn_unconfigure(struct libcfs_ioctl_hdr *hdr) +{ + struct lnet_ioctl_config_data *conf = + (struct lnet_ioctl_config_data *) hdr; + int rc; + + LNET_MUTEX_LOCK(&lnet_config_mutex); + if (the_lnet.ln_niinit_self) + rc = lnet_dyn_del_ni(conf->cfg_net); + else + rc = -EINVAL; + LNET_MUTEX_UNLOCK(&lnet_config_mutex); + + return rc; +} + +int +lnet_ioctl(unsigned int cmd, struct libcfs_ioctl_hdr *hdr) +{ + int rc; + + switch (cmd) { + case IOC_LIBCFS_CONFIGURE: { + struct libcfs_ioctl_data *data = + (struct libcfs_ioctl_data *)hdr; + the_lnet.ln_nis_from_mod_params = data->ioc_flags; + return lnet_configure(NULL); + } + + case IOC_LIBCFS_UNCONFIGURE: + return lnet_unconfigure(); + + case IOC_LIBCFS_ADD_NET: + return lnet_dyn_configure(hdr); + + case IOC_LIBCFS_DEL_NET: + return lnet_dyn_unconfigure(hdr); + + default: + /* Passing LNET_PID_ANY only gives me a ref if the net is up + * already; I'll need it to ensure the net can't go down while + * I'm called into it */ + rc = LNetNIInit(LNET_PID_ANY); + if (rc >= 0) { + rc = LNetCtl(cmd, hdr); + LNetNIFini(); + } + return rc; + } } DECLARE_IOCTL_HANDLER(lnet_ioctl_handler, lnet_ioctl); @@ -114,7 +169,7 @@ init_lnet(void) int rc; ENTRY; - cfs_mutex_init(&lnet_config_mutex); + mutex_init(&lnet_config_mutex); rc = LNetInit(); if (rc != 0) { @@ -125,11 +180,11 @@ init_lnet(void) rc = libcfs_register_ioctl(&lnet_ioctl_handler); LASSERT (rc == 0); - if (config_on_load) { - /* Have to schedule a separate thread to avoid deadlocking - * in modload */ - (void) cfs_create_thread(lnet_configure, NULL, 0); - } + if (config_on_load) { + /* Have to schedule a separate thread to avoid deadlocking + * in modload */ + (void) kthread_run(lnet_configure, NULL, "lnet_initd"); + } RETURN(0); } @@ -145,48 +200,6 @@ fini_lnet(void) LNetFini(); } -EXPORT_SYMBOL(lnet_register_lnd); -EXPORT_SYMBOL(lnet_unregister_lnd); - -EXPORT_SYMBOL(LNetMEAttach); -EXPORT_SYMBOL(LNetMEInsert); -EXPORT_SYMBOL(LNetMEUnlink); -EXPORT_SYMBOL(LNetEQAlloc); -EXPORT_SYMBOL(LNetMDAttach); -EXPORT_SYMBOL(LNetMDUnlink); -EXPORT_SYMBOL(LNetNIInit); -EXPORT_SYMBOL(LNetNIFini); -EXPORT_SYMBOL(LNetInit); -EXPORT_SYMBOL(LNetFini); -EXPORT_SYMBOL(LNetSnprintHandle); -EXPORT_SYMBOL(LNetPut); -EXPORT_SYMBOL(LNetGet); -EXPORT_SYMBOL(LNetEQWait); -EXPORT_SYMBOL(LNetEQFree); -EXPORT_SYMBOL(LNetEQGet); -EXPORT_SYMBOL(LNetGetId); -EXPORT_SYMBOL(LNetMDBind); -EXPORT_SYMBOL(LNetDist); -EXPORT_SYMBOL(LNetSetAsync); -EXPORT_SYMBOL(LNetCtl); -EXPORT_SYMBOL(LNetSetLazyPortal); -EXPORT_SYMBOL(LNetClearLazyPortal); -EXPORT_SYMBOL(the_lnet); -EXPORT_SYMBOL(lnet_iov_nob); -EXPORT_SYMBOL(lnet_extract_iov); -EXPORT_SYMBOL(lnet_kiov_nob); -EXPORT_SYMBOL(lnet_extract_kiov); -EXPORT_SYMBOL(lnet_copy_iov2iov); -EXPORT_SYMBOL(lnet_copy_iov2kiov); -EXPORT_SYMBOL(lnet_copy_kiov2iov); -EXPORT_SYMBOL(lnet_copy_kiov2kiov); -EXPORT_SYMBOL(lnet_finalize); -EXPORT_SYMBOL(lnet_parse); -EXPORT_SYMBOL(lnet_create_reply_msg); -EXPORT_SYMBOL(lnet_set_reply_msg_len); -EXPORT_SYMBOL(lnet_msgtyp2str); -EXPORT_SYMBOL(lnet_net2ni_locked); - MODULE_AUTHOR("Peter J. Braam "); MODULE_DESCRIPTION("Portals v3.1"); MODULE_LICENSE("GPL");