goto failed_with_init;
}
- mx_get_endpoint_addr(kmxlnd_data.kmx_endpt, &kmxlnd_data.kmx_epa);
- mx_decompose_endpoint_addr(kmxlnd_data.kmx_epa, &nic_id, &ep_id);
- mxret = mx_connect(kmxlnd_data.kmx_endpt, nic_id, ep_id,
- MXLND_MSG_MAGIC, MXLND_CONNECT_TIMEOUT/CFS_HZ*1000,
- &kmxlnd_data.kmx_epa);
- if (mxret != MX_SUCCESS) {
- CNETERR("unable to connect to myself (%s)\n", mx_strerror(mxret));
- goto failed_with_endpoint;
- }
+ mx_get_endpoint_addr(kmxlnd_data.kmx_endpt, &kmxlnd_data.kmx_epa);
+ mx_decompose_endpoint_addr(kmxlnd_data.kmx_epa, &nic_id, &ep_id);
+ mxret = mx_connect(kmxlnd_data.kmx_endpt, nic_id, ep_id,
+ MXLND_MSG_MAGIC, MXLND_CONNECT_TIMEOUT/HZ*1000,
+ &kmxlnd_data.kmx_epa);
+ if (mxret != MX_SUCCESS) {
+ CNETERR("unable to connect to myself (%s)\n", mx_strerror(mxret));
+ goto failed_with_endpoint;
+ }
ni->ni_nid = LNET_MKNID(LNET_NIDNET(ni->ni_nid), ip);
CDEBUG(D_NET, "My NID is 0x%llx\n", ni->ni_nid);
mx_strerror(mxret));
goto failed_with_endpoint;
}
- mxret = mx_set_request_timeout(kmxlnd_data.kmx_endpt, NULL,
- MXLND_COMM_TIMEOUT/CFS_HZ*1000);
- if (mxret != MX_SUCCESS) {
- CERROR("mx_set_request_timeout() failed with %s\n",
- mx_strerror(mxret));
- goto failed_with_endpoint;
- }
+ mxret = mx_set_request_timeout(kmxlnd_data.kmx_endpt, NULL,
+ MXLND_COMM_TIMEOUT/HZ*1000);
+ if (mxret != MX_SUCCESS) {
+ CERROR("mx_set_request_timeout() failed with %s\n",
+ mx_strerror(mxret));
+ goto failed_with_endpoint;
+ }
return 0;
failed_with_endpoint:
* mxlnd_thread_start - spawn a kernel thread with this function
* @fn - function pointer
* @arg - pointer to the parameter data
+ * @name - name of new thread
*
* Returns 0 on success and a negative value on failure
*/
int
-mxlnd_thread_start(int (*fn)(void *arg), void *arg)
+mxlnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
{
- int pid = 0;
+ cfs_task *task;
int i = (int) ((long) arg);
cfs_atomic_inc(&kmxlnd_data.kmx_nthreads);
init_completion(&kmxlnd_data.kmx_completions[i]);
- pid = cfs_create_thread(fn, arg, 0);
- if (pid < 0) {
- CERROR("cfs_create_thread() failed with %d\n", pid);
- cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
- }
- return pid;
+ task = kthread_run(fn, arg, name);
+ if (IS_ERR(task)) {
+ CERROR("cfs_create_thread() failed with %d\n", PTR_ERR(task));
+ cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
+ }
+ return PTR_ERR(task);
}
/**
/* calls write_[un]lock(kmx_global_lock) */
mxlnd_del_peer(LNET_NID_ANY);
- /* wakeup request_waitds */
- mx_wakeup(kmxlnd_data.kmx_endpt);
+ /* wakeup request_waitds */
+ mx_wakeup(kmxlnd_data.kmx_endpt);
up(&kmxlnd_data.kmx_tx_queue_sem);
up(&kmxlnd_data.kmx_conn_sem);
- mxlnd_sleep(2 * CFS_HZ);
+ mxlnd_sleep(2 * HZ);
/* fall through */
"kmx_mem_used %ld\n", cfs_atomic_read(&libcfs_kmemory),
kmxlnd_data.kmx_mem_used);
- kmxlnd_data.kmx_init = MXLND_INIT_NOTHING;
- PORTAL_MODULE_UNUSE;
- return;
+ kmxlnd_data.kmx_init = MXLND_INIT_NOTHING;
+ module_put(THIS_MODULE);
+ return;
}
/**
if (ni->ni_maxtxcredits < ni->ni_peertxcredits)
ni->ni_maxtxcredits = ni->ni_peertxcredits;
- PORTAL_MODULE_USE;
- memset (&kmxlnd_data, 0, sizeof (kmxlnd_data));
+ try_module_get(THIS_MODULE);
+ memset (&kmxlnd_data, 0, sizeof (kmxlnd_data));
kmxlnd_data.kmx_ni = ni;
ni->ni_data = &kmxlnd_data;
- cfs_gettimeofday(&tv);
- kmxlnd_data.kmx_incarnation = (((__u64)tv.tv_sec) * 1000000) + tv.tv_usec;
- CDEBUG(D_NET, "my incarnation is %llu\n", kmxlnd_data.kmx_incarnation);
+ do_gettimeofday(&tv);
+ kmxlnd_data.kmx_incarnation = (((__u64)tv.tv_sec) * 1000000) + tv.tv_usec;
+ CDEBUG(D_NET, "my incarnation is %llu\n", kmxlnd_data.kmx_incarnation);
rwlock_init (&kmxlnd_data.kmx_global_lock);
spin_lock_init (&kmxlnd_data.kmx_mem_lock);
*kmxlnd_tunables.kmx_n_waitd == 1 ? "thread" : "threads");
for (i = 0; i < *kmxlnd_tunables.kmx_n_waitd; i++) {
+ char name[24];
+ memset(name, 0, sizeof(name));
+ snprintf(name, sizeof(name), "mxlnd_request_waitd_%02ld", i);
ret = mxlnd_thread_start(mxlnd_request_waitd, (void*)((long)i));
- if (ret < 0) {
- CERROR("Starting mxlnd_request_waitd[%d] failed with %d\n", i, ret);
+ if (ret < 0) {
+ CERROR("Starting mxlnd_request_waitd[%d] "
+ "failed with %d\n", i, ret);
cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
mx_wakeup(kmxlnd_data.kmx_endpt);
for (--i; i >= 0; i--) {
goto failed;
}
}
- ret = mxlnd_thread_start(mxlnd_tx_queued, (void*)((long)i++));
+ ret = mxlnd_thread_start(mxlnd_tx_queued, (void *)((long)i++),
+ "mxlnd_tx_queued");
if (ret < 0) {
CERROR("Starting mxlnd_tx_queued failed with %d\n", ret);
cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
nthreads * sizeof(struct completion));
goto failed;
}
- ret = mxlnd_thread_start(mxlnd_timeoutd, (void*)((long)i++));
+ ret = mxlnd_thread_start(mxlnd_timeoutd, (void *)((long)i++),
+ "mxlnd_timeoutd");
if (ret < 0) {
CERROR("Starting mxlnd_timeoutd failed with %d\n", ret);
cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
nthreads * sizeof(struct completion));
goto failed;
}
- ret = mxlnd_thread_start(mxlnd_connd, (void*)((long)i++));
+ ret = mxlnd_thread_start(mxlnd_connd, (void *)((long)i++),
+ "mxlnd_connd");
if (ret < 0) {
CERROR("Starting mxlnd_connd failed with %d\n", ret);
cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);