int rc;
if (*networks != 0 && *ip2nets != 0) {
- LCONSOLE_ERROR(0x101, "Please specify EITHER 'networks' or "
- "'ip2nets' but not both at once\n");
+ LCONSOLE_ERROR_MSG(0x101, "Please specify EITHER 'networks' or "
+ "'ip2nets' but not both at once\n");
return NULL;
}
LCONSOLE_WARN("Starting in strong portals-compatible mode\n");
}
- LCONSOLE_ERROR(0x102, "portals_compatibility=\"%s\" not supported\n",
- portals_compatibility);
+ LCONSOLE_ERROR_MSG(0x102, "portals_compatibility=\"%s\" not supported\n",
+ portals_compatibility);
return -EINVAL;
}
#ifdef NOT_YET
if (networks != NULL && ip2nets != NULL) {
- LCONSOLE_ERROR(0x103, "Please set EITHER 'LNET_NETWORKS' or "
- "'LNET_IP2NETS' but not both at once\n");
+ LCONSOLE_ERROR_MSG(0x103, "Please set EITHER 'LNET_NETWORKS' or"
+ " 'LNET_IP2NETS' but not both at once\n");
return NULL;
}
LASSERT (list_empty(&the_lnet.ln_finalizeq));
}
+#ifndef __KERNEL__
+/* Temporary workaround to allow uOSS and test programs force server
+ * mode in userspace. See comments near ln_server_mode_flag in
+ * lnet/lib-types.h */
+
+void
+lnet_server_mode() {
+ the_lnet.ln_server_mode_flag = 1;
+}
+#endif
+
int
lnet_prepare(lnet_pid_t requested_pid)
{
LASSERT ((requested_pid & LNET_PID_USERFLAG) == 0);
the_lnet.ln_pid = requested_pid;
#else
- /* My PID must be unique on this node and flag I'm userspace */
- the_lnet.ln_pid = getpid() | LNET_PID_USERFLAG;
+ if (the_lnet.ln_server_mode_flag) {/* server case (uOSS) */
+ 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;
+
+ } else {/* client case (liblustre) */
+
+ /* My PID must be unique on this node and flag I'm userspace */
+ the_lnet.ln_pid = getpid() | LNET_PID_USERFLAG;
+ }
#endif
rc = lnet_descriptor_setup();
LASSERT (the_lnet.ln_nzombie_nis == 0);
for (idx = 0; idx < the_lnet.ln_nportals; idx++) {
-
- LNetClearLazyPortal(idx);
LASSERT (list_empty(&the_lnet.ln_portals[idx].ptl_msgq));
while (!list_empty (&the_lnet.ln_portals[idx].ptl_ml)) {
* *first_ni so the acceptor can pass it connections "blind" to retain
* binary compatibility. */
int count = 0;
-#ifdef __KERNEL__
+#if defined(__KERNEL__) || defined(HAVE_LIBPTHREAD)
struct list_head *tmp;
lnet_ni_t *ni;
}
LNET_UNLOCK();
-#endif
+
+#endif /* defined(__KERNEL__) || defined(HAVE_LIBPTHREAD) */
return count;
}
}
LNET_UNLOCK();
+
+ /* Clear lazy portals and drop delayed messages which hold refs
+ * on their lnet_msg_t::msg_rxpeer */
+ for (i = 0; i < the_lnet.ln_nportals; i++)
+ LNetClearLazyPortal(i);
+
/* Clear the peer table and wait for all peers to go (they hold refs on
* their NIs) */
-
lnet_clear_peer_table();
LNET_LOCK();
int nicount = 0;
char *nets = lnet_get_networks();
- INIT_LIST_HEAD(&nilist);
+ CFS_INIT_LIST_HEAD(&nilist);
if (nets == NULL)
goto failed;
libcfs_lnd2str(lnd_type),
libcfs_lnd2modname(lnd_type), rc);
#ifndef CONFIG_KMOD
- LCONSOLE_ERROR(0x104, "Your kernel must be "
+ LCONSOLE_ERROR_MSG(0x104, "Your kernel must be "
"compiled with CONFIG_KMOD set for "
"automatic module loading.");
#endif
LNET_MUTEX_UP(&the_lnet.ln_lnd_mutex);
if (rc != 0) {
- LCONSOLE_ERROR(0x105, "Error %d starting up LNI %s\n",
- rc, libcfs_lnd2str(lnd->lnd_type));
+ LCONSOLE_ERROR_MSG(0x105, "Error %d starting up LNI %s"
+ "\n",
+ rc, libcfs_lnd2str(lnd->lnd_type));
LNET_LOCK();
lnd->lnd_refcount--;
LNET_UNLOCK();
}
} else {
# ifndef HAVE_LIBPTHREAD
- LCONSOLE_ERROR(0x106, "LND %s not supported in a "
- "single-threaded runtime\n",
- libcfs_lnd2str(lnd_type));
+ LCONSOLE_ERROR_MSG(0x106, "LND %s not supported in a "
+ "single-threaded runtime\n",
+ libcfs_lnd2str(lnd_type));
goto failed;
# endif
}
#endif
if (ni->ni_peertxcredits == 0 ||
ni->ni_maxtxcredits == 0) {
- LCONSOLE_ERROR(0x107, "LNI %s has no %scredits\n",
- libcfs_lnd2str(lnd->lnd_type),
- ni->ni_peertxcredits == 0 ?
- "" : "per-peer ");
+ LCONSOLE_ERROR_MSG(0x107, "LNI %s has no %scredits\n",
+ libcfs_lnd2str(lnd->lnd_type),
+ ni->ni_peertxcredits == 0 ?
+ "" : "per-peer ");
goto failed;
}
/* Handle nidstrings for network 0 just like this one */
if (the_lnet.ln_ptlcompat > 0) {
if (nicount > 0) {
- LCONSOLE_ERROR(0x108, "Can't run > 1 network "
- "when portals_compatibility is set\n");
+ LCONSOLE_ERROR_MSG(0x108, "Can't run > 1 "
+ "network when portals_compatibility is "
+ "set\n");
goto failed;
}
libcfs_setnet0alias(lnd->lnd_type);
if (the_lnet.ln_eqwaitni != NULL && nicount > 1) {
lnd_type = the_lnet.ln_eqwaitni->ni_lnd->lnd_type;
- LCONSOLE_ERROR(0x109, "LND %s can only run single-network\n",
- libcfs_lnd2str(lnd_type));
+ LCONSOLE_ERROR_MSG(0x109, "LND %s can only run single-network"
+ "\n",
+ libcfs_lnd2str(lnd_type));
goto failed;
}