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();
* *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;
}
int nicount = 0;
char *nets = lnet_get_networks();
- INIT_LIST_HEAD(&nilist);
+ CFS_INIT_LIST_HEAD(&nilist);
if (nets == NULL)
goto failed;