X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lnet%2Flnet%2Fapi-ni.c;h=7ba7a3d3a24e3aa9c22eb3d5d4ea97eb472f03dc;hp=87212531bb8e9e0448e82db1d563923df7988b64;hb=976c0abd4efab4f56cf4b21b940eb1b976c37372;hpb=b1e22bd4df5bcea4f32dbf510ba784817c529ce8 diff --git a/lnet/lnet/api-ni.c b/lnet/lnet/api-ni.c index 8721253..7ba7a3d 100644 --- a/lnet/lnet/api-ni.c +++ b/lnet/lnet/api-ni.c @@ -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, 2012, Intel Corporation. + * Copyright (c) 2011, 2013, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -100,7 +100,7 @@ void lnet_init_locks(void) { spin_lock_init(&the_lnet.ln_eq_wait_lock); - cfs_waitq_init(&the_lnet.ln_eq_waitq); + init_waitqueue_head(&the_lnet.ln_eq_waitq); mutex_init(&the_lnet.ln_lnd_mutex); mutex_init(&the_lnet.ln_api_mutex); } @@ -125,34 +125,16 @@ lnet_get_networks (void) { static char default_networks[256]; char *networks = getenv ("LNET_NETWORKS"); - char *ip2nets = getenv ("LNET_IP2NETS"); char *str; char *sep; int len; int nob; - int rc; cfs_list_t *tmp; -#ifdef NOT_YET - if (networks != NULL && ip2nets != NULL) { - LCONSOLE_ERROR_MSG(0x103, "Please set EITHER 'LNET_NETWORKS' or" - " 'LNET_IP2NETS' but not both at once\n"); - return NULL; - } - - if (ip2nets != NULL) { - rc = lnet_parse_ip2nets(&networks, ip2nets); - return (rc == 0) ? networks : NULL; - } -#else - SET_BUT_UNUSED(ip2nets); - SET_BUT_UNUSED(rc); -#endif if (networks != NULL) return networks; /* In userland, the default 'networks=' is the list of known net types */ - len = sizeof(default_networks); str = default_networks; *str = 0; @@ -163,13 +145,12 @@ lnet_get_networks (void) nob = snprintf(str, len, "%s%s", sep, libcfs_lnd2str(lnd->lnd_type)); + if (nob >= len) { + /* overflowed the string; leave it where it was */ + *str = 0; + break; + } len -= nob; - if (len < 0) { - /* overflowed the string; leave it where it was */ - *str = 0; - break; - } - str += nob; sep = ","; } @@ -251,6 +232,22 @@ lnet_destroy_remote_nets_table(void) the_lnet.ln_remote_nets_hash = NULL; } +static void +lnet_destroy_locks(void) +{ + if (the_lnet.ln_res_lock != NULL) { + cfs_percpt_lock_free(the_lnet.ln_res_lock); + the_lnet.ln_res_lock = NULL; + } + + if (the_lnet.ln_net_lock != NULL) { + cfs_percpt_lock_free(the_lnet.ln_net_lock); + the_lnet.ln_net_lock = NULL; + } + + lnet_fini_locks(); +} + static int lnet_create_locks(void) { @@ -267,26 +264,10 @@ lnet_create_locks(void) return 0; failed: - lnet_fini_locks(); + lnet_destroy_locks(); return -ENOMEM; } -static void -lnet_destroy_locks(void) -{ - if (the_lnet.ln_res_lock != NULL) { - cfs_percpt_lock_free(the_lnet.ln_res_lock); - the_lnet.ln_res_lock = NULL; - } - - if (the_lnet.ln_net_lock != NULL) { - cfs_percpt_lock_free(the_lnet.ln_net_lock); - the_lnet.ln_net_lock = NULL; - } - - lnet_fini_locks(); -} - void lnet_assert_wire_constants (void) { /* Wire protocol assertions generated by 'wirecheck' @@ -448,7 +429,7 @@ lnet_counters_get(lnet_counters_t *counters) counters->send_count += ctr->send_count; counters->recv_count += ctr->recv_count; counters->route_count += ctr->route_count; - counters->drop_length += ctr->drop_length; + counters->drop_count += ctr->drop_count; counters->send_length += ctr->send_length; counters->recv_length += ctr->recv_length; counters->route_length += ctr->route_length; @@ -525,25 +506,24 @@ lnet_freelist_fini (lnet_freelist_t *fl) #endif /* LNET_USE_LIB_FREELIST */ -__u64 -lnet_create_interface_cookie (void) +__u64 lnet_create_interface_cookie (void) { - /* NB the interface cookie in wire handles guards against delayed - * replies and ACKs appearing valid after reboot. Initialisation time, - * even if it's only implemented to millisecond resolution is probably - * easily good enough. */ - struct timeval tv; - __u64 cookie; + /* NB the interface cookie in wire handles guards against delayed + * replies and ACKs appearing valid after reboot. Initialisation time, + * even if it's only implemented to millisecond resolution is probably + * easily good enough. */ + struct timeval tv; + __u64 cookie; #ifndef __KERNEL__ - int rc = gettimeofday (&tv, NULL); - LASSERT (rc == 0); + int rc = gettimeofday (&tv, NULL); + LASSERT (rc == 0); #else - cfs_gettimeofday(&tv); + do_gettimeofday(&tv); #endif - cookie = tv.tv_sec; - cookie *= 1000000; - cookie += tv.tv_usec; - return cookie; + cookie = tv.tv_sec; + cookie *= 1000000; + cookie += tv.tv_usec; + return cookie; } static char * @@ -751,11 +731,11 @@ lnet_prepare(lnet_pid_t requested_pid) the_lnet.ln_pid = requested_pid; #else if (the_lnet.ln_server_mode_flag) {/* server case (uOSS) */ - LASSERT ((requested_pid & LNET_PID_USERFLAG) == 0); + LASSERT ((requested_pid & LNET_PID_USERFLAG) == 0); - if (cfs_curproc_uid())/* Only root can run user-space server */ - return -EPERM; - the_lnet.ln_pid = requested_pid; + if (current_uid() != 0) /* Only root can run user-space server */ + return -EPERM; + the_lnet.ln_pid = requested_pid; } else {/* client case (liblustre) */ @@ -912,7 +892,7 @@ lnet_nid_cpt_hash(lnet_nid_t nid, unsigned int number) if (number == 1) return 0; - val = cfs_hash_long(key, LNET_CPT_BITS); + val = hash_long(key, LNET_CPT_BITS); /* NB: LNET_CP_NUMBER doesn't have to be PO2 */ if (val < number) return val; @@ -1146,13 +1126,13 @@ lnet_shutdown_lndnis (void) ni->ni_lnd->lnd_refcount--; lnet_net_unlock(LNET_LOCK_EX); - islo = ni->ni_lnd->lnd_type == LOLND; + islo = ni->ni_lnd->lnd_type == LOLND; - LASSERT (!cfs_in_interrupt ()); - (ni->ni_lnd->lnd_shutdown)(ni); + LASSERT (!in_interrupt ()); + (ni->ni_lnd->lnd_shutdown)(ni); - /* can't deref lnd anymore now; it might have unregistered - * itself... */ + /* can't deref lnd anymore now; it might have unregistered + * itself... */ if (!islo) CDEBUG(D_LNI, "Removed LNI %s\n", @@ -1214,10 +1194,10 @@ lnet_startup_lndnis (void) #ifdef __KERNEL__ if (lnd == NULL) { - LNET_MUTEX_UNLOCK(&the_lnet.ln_lnd_mutex); - rc = cfs_request_module("%s", - libcfs_lnd2modname(lnd_type)); - LNET_MUTEX_LOCK(&the_lnet.ln_lnd_mutex); + LNET_MUTEX_UNLOCK(&the_lnet.ln_lnd_mutex); + rc = request_module("%s", + libcfs_lnd2modname(lnd_type)); + LNET_MUTEX_LOCK(&the_lnet.ln_lnd_mutex); lnd = lnet_find_lnd_by_type(lnd_type); if (lnd == NULL) { @@ -1618,8 +1598,8 @@ LNetCtl(unsigned int cmd, void *arg) return lnet_fail_nid(data->ioc_nid, data->ioc_count); case IOC_LIBCFS_ADD_ROUTE: - rc = lnet_add_route(data->ioc_net, data->ioc_count, - data->ioc_nid); + rc = lnet_add_route(data->ioc_net, data->ioc_count, + data->ioc_nid, data->ioc_priority); return (rc != 0) ? rc : lnet_check_routes(); case IOC_LIBCFS_DEL_ROUTE: @@ -1628,7 +1608,8 @@ LNetCtl(unsigned int cmd, void *arg) case IOC_LIBCFS_GET_ROUTE: return lnet_get_route(data->ioc_count, &data->ioc_net, &data->ioc_count, - &data->ioc_nid, &data->ioc_flags); + &data->ioc_nid, &data->ioc_flags, + &data->ioc_priority); case IOC_LIBCFS_NOTIFY_ROUTER: return lnet_notify(NULL, data->ioc_nid, data->ioc_flags, cfs_time_current() - @@ -1907,14 +1888,14 @@ lnet_ping_target_init(void) void lnet_ping_target_fini(void) { - lnet_event_t event; - int rc; - int which; - int timeout_ms = 1000; - cfs_sigset_t blocked = cfs_block_allsigs(); + lnet_event_t event; + int rc; + int which; + int timeout_ms = 1000; + sigset_t blocked = cfs_block_allsigs(); - LNetMDUnlink(the_lnet.ln_ping_target_md); - /* NB md could be busy; this just starts the unlink */ + LNetMDUnlink(the_lnet.ln_ping_target_md); + /* NB md could be busy; this just starts the unlink */ for (;;) { rc = LNetEQPoll(&the_lnet.ln_ping_target_eq, 1, @@ -1944,28 +1925,28 @@ lnet_ping_target_fini(void) int lnet_ping (lnet_process_id_t id, int timeout_ms, lnet_process_id_t *ids, int n_ids) { - lnet_handle_eq_t eqh; - lnet_handle_md_t mdh; - lnet_event_t event; - lnet_md_t md = {0}; - int which; - int unlinked = 0; - int replied = 0; - const int a_long_time = 60000; /* mS */ - int infosz = offsetof(lnet_ping_info_t, pi_ni[n_ids]); - lnet_ping_info_t *info; - lnet_process_id_t tmpid; - int i; - int nob; - int rc; - int rc2; - cfs_sigset_t blocked; - - if (n_ids <= 0 || - id.nid == LNET_NID_ANY || - timeout_ms > 500000 || /* arbitrary limit! */ - n_ids > 20) /* arbitrary limit! */ - return -EINVAL; + lnet_handle_eq_t eqh; + lnet_handle_md_t mdh; + lnet_event_t event; + lnet_md_t md = {0}; + int which; + int unlinked = 0; + int replied = 0; + const int a_long_time = 60000; /* mS */ + int infosz = offsetof(lnet_ping_info_t, pi_ni[n_ids]); + lnet_ping_info_t *info; + lnet_process_id_t tmpid; + int i; + int nob; + int rc; + int rc2; + sigset_t blocked; + + if (n_ids <= 0 || + id.nid == LNET_NID_ANY || + timeout_ms > 500000 || /* arbitrary limit! */ + n_ids > 20) /* arbitrary limit! */ + return -EINVAL; if (id.pid == LNET_PID_ANY) id.pid = LUSTRE_SRV_LNET_PID; @@ -2107,12 +2088,8 @@ lnet_ping (lnet_process_id_t id, int timeout_ms, lnet_process_id_t *ids, int n_i for (i = 0; i < n_ids; i++) { tmpid.pid = info->pi_pid; tmpid.nid = info->pi_ni[i].ns_nid; -#ifdef __KERNEL__ - if (cfs_copy_to_user(&ids[i], &tmpid, sizeof(tmpid))) + if (copy_to_user(&ids[i], &tmpid, sizeof(tmpid))) goto out_1; -#else - ids[i] = tmpid; -#endif } rc = info->pi_nnis;