-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
*
+ * Copyright (c) 2011, 2012, Intel Corporation.
+ *
* Author: Zach Brown <zab@zabbo.net>
* Author: Peter J. Braam <braam@clusterfs.com>
* Author: Phil Schwan <phil@clusterfs.com>
ksock_tx_t *
ksocknal_alloc_tx(int type, int size)
{
- ksock_tx_t *tx = NULL;
+ ksock_tx_t *tx = NULL;
- if (type == KSOCK_MSG_NOOP) {
- LASSERT (size == KSOCK_NOOP_TX_SIZE);
+ if (type == KSOCK_MSG_NOOP) {
+ LASSERT(size == KSOCK_NOOP_TX_SIZE);
- /* searching for a noop tx in free list */
- cfs_spin_lock(&ksocknal_data.ksnd_tx_lock);
+ /* searching for a noop tx in free list */
+ spin_lock(&ksocknal_data.ksnd_tx_lock);
- if (!cfs_list_empty(&ksocknal_data.ksnd_idle_noop_txs)) {
- tx = cfs_list_entry(ksocknal_data.ksnd_idle_noop_txs. \
- next, ksock_tx_t, tx_list);
- LASSERT(tx->tx_desc_size == size);
- cfs_list_del(&tx->tx_list);
- }
+ if (!cfs_list_empty(&ksocknal_data.ksnd_idle_noop_txs)) {
+ tx = cfs_list_entry(ksocknal_data.ksnd_idle_noop_txs. \
+ next, ksock_tx_t, tx_list);
+ LASSERT(tx->tx_desc_size == size);
+ cfs_list_del(&tx->tx_list);
+ }
- cfs_spin_unlock(&ksocknal_data.ksnd_tx_lock);
+ spin_unlock(&ksocknal_data.ksnd_tx_lock);
}
if (tx == NULL)
void
ksocknal_free_tx (ksock_tx_t *tx)
{
- cfs_atomic_dec(&ksocknal_data.ksnd_nactive_txs);
+ cfs_atomic_dec(&ksocknal_data.ksnd_nactive_txs);
- if (tx->tx_lnetmsg == NULL && tx->tx_desc_size == KSOCK_NOOP_TX_SIZE) {
- /* it's a noop tx */
- cfs_spin_lock(&ksocknal_data.ksnd_tx_lock);
+ if (tx->tx_lnetmsg == NULL && tx->tx_desc_size == KSOCK_NOOP_TX_SIZE) {
+ /* it's a noop tx */
+ spin_lock(&ksocknal_data.ksnd_tx_lock);
- cfs_list_add(&tx->tx_list, &ksocknal_data.ksnd_idle_noop_txs);
+ cfs_list_add(&tx->tx_list, &ksocknal_data.ksnd_idle_noop_txs);
- cfs_spin_unlock(&ksocknal_data.ksnd_tx_lock);
- } else {
- LIBCFS_FREE(tx, tx->tx_desc_size);
- }
+ spin_unlock(&ksocknal_data.ksnd_tx_lock);
+ } else {
+ LIBCFS_FREE(tx, tx->tx_desc_size);
+ }
}
int
ksocknal_tx_addref(tx);
- cfs_spin_lock(&peer->ksnp_lock);
+ spin_lock(&peer->ksnp_lock);
/* ZC_REQ is going to be pinned to the peer */
tx->tx_deadline =
cfs_list_add_tail(&tx->tx_zc_list, &peer->ksnp_zc_req_list);
- cfs_spin_unlock(&peer->ksnp_lock);
+ spin_unlock(&peer->ksnp_lock);
}
static void
ksocknal_uncheck_zc_req(ksock_tx_t *tx)
{
- ksock_peer_t *peer = tx->tx_conn->ksnc_peer;
+ ksock_peer_t *peer = tx->tx_conn->ksnc_peer;
- LASSERT (tx->tx_msg.ksm_type != KSOCK_MSG_NOOP);
- LASSERT (tx->tx_zc_capable);
+ LASSERT(tx->tx_msg.ksm_type != KSOCK_MSG_NOOP);
+ LASSERT(tx->tx_zc_capable);
- tx->tx_zc_checked = 0;
+ tx->tx_zc_checked = 0;
- cfs_spin_lock(&peer->ksnp_lock);
+ spin_lock(&peer->ksnp_lock);
- if (tx->tx_msg.ksm_zc_cookies[0] == 0) {
- /* Not waiting for an ACK */
- cfs_spin_unlock(&peer->ksnp_lock);
- return;
- }
+ if (tx->tx_msg.ksm_zc_cookies[0] == 0) {
+ /* Not waiting for an ACK */
+ spin_unlock(&peer->ksnp_lock);
+ return;
+ }
- tx->tx_msg.ksm_zc_cookies[0] = 0;
- cfs_list_del(&tx->tx_zc_list);
+ tx->tx_msg.ksm_zc_cookies[0] = 0;
+ cfs_list_del(&tx->tx_zc_list);
- cfs_spin_unlock(&peer->ksnp_lock);
+ spin_unlock(&peer->ksnp_lock);
- ksocknal_tx_decref(tx);
+ ksocknal_tx_decref(tx);
}
int
counter, conn, cfs_atomic_read(&libcfs_kmemory));
/* Queue on ksnd_enomem_conns for retry after a timeout */
- cfs_spin_lock_bh (&ksocknal_data.ksnd_reaper_lock);
+ spin_lock_bh(&ksocknal_data.ksnd_reaper_lock);
/* enomem list takes over scheduler's ref... */
LASSERT (conn->ksnc_tx_scheduled);
ksocknal_data.ksnd_reaper_waketime))
cfs_waitq_signal (&ksocknal_data.ksnd_reaper_waitq);
- cfs_spin_unlock_bh (&ksocknal_data.ksnd_reaper_lock);
+ spin_unlock_bh(&ksocknal_data.ksnd_reaper_lock);
return (rc);
}
route->ksnr_scheduled = 1; /* scheduling conn for connd */
ksocknal_route_addref(route); /* extra ref for connd */
- cfs_spin_lock_bh (&ksocknal_data.ksnd_connd_lock);
+ spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
- cfs_list_add_tail (&route->ksnr_connd_list,
- &ksocknal_data.ksnd_connd_routes);
- cfs_waitq_signal (&ksocknal_data.ksnd_connd_waitq);
+ cfs_list_add_tail(&route->ksnr_connd_list,
+ &ksocknal_data.ksnd_connd_routes);
+ cfs_waitq_signal(&ksocknal_data.ksnd_connd_waitq);
- cfs_spin_unlock_bh (&ksocknal_data.ksnd_connd_lock);
+ spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
}
void
* but they're used inside spinlocks a lot.
*/
bufnob = libcfs_sock_wmem_queued(conn->ksnc_sock);
- cfs_spin_lock_bh (&sched->kss_lock);
+ spin_lock_bh(&sched->kss_lock);
if (cfs_list_empty(&conn->ksnc_tx_queue) && bufnob == 0) {
/* First packet starts the timeout */
cfs_waitq_signal (&sched->kss_waitq);
}
- cfs_spin_unlock_bh (&sched->kss_lock);
+ spin_unlock_bh(&sched->kss_lock);
}
{
ksock_peer_t *peer;
ksock_conn_t *conn;
- cfs_rwlock_t *g_lock;
+ rwlock_t *g_lock;
int retry;
int rc;
g_lock = &ksocknal_data.ksnd_global_lock;
for (retry = 0;; retry = 1) {
- cfs_read_lock (g_lock);
+ read_lock(g_lock);
peer = ksocknal_find_peer_locked(ni, id);
if (peer != NULL) {
if (ksocknal_find_connectable_route_locked(peer) == NULL) {
* connecting and I do have an actual
* connection... */
ksocknal_queue_tx_locked (tx, conn);
- cfs_read_unlock (g_lock);
+ read_unlock(g_lock);
return (0);
}
}
}
/* I'll need a write lock... */
- cfs_read_unlock (g_lock);
+ read_unlock(g_lock);
- cfs_write_lock_bh (g_lock);
+ write_lock_bh(g_lock);
peer = ksocknal_find_peer_locked(ni, id);
if (peer != NULL)
break;
- cfs_write_unlock_bh (g_lock);
+ write_unlock_bh(g_lock);
if ((id.pid & LNET_PID_USERFLAG) != 0) {
CERROR("Refusing to create a connection to "
if (conn != NULL) {
/* Connection exists; queue message on it */
ksocknal_queue_tx_locked (tx, conn);
- cfs_write_unlock_bh (g_lock);
+ write_unlock_bh(g_lock);
return (0);
}
/* Queue the message until a connection is established */
cfs_list_add_tail (&tx->tx_list, &peer->ksnp_tx_queue);
- cfs_write_unlock_bh (g_lock);
+ write_unlock_bh(g_lock);
return 0;
}
- cfs_write_unlock_bh (g_lock);
+ write_unlock_bh(g_lock);
/* NB Routes may be ignored if connections to them failed recently */
CNETERR("No usable routes to %s\n", libcfs_id2str(id));
}
int
-ksocknal_thread_start (int (*fn)(void *arg), void *arg)
+ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name)
{
- long pid = cfs_create_thread (fn, arg, 0);
+ cfs_task_t *task = kthread_run(fn, arg, name);
- if (pid < 0)
- return ((int)pid);
+ if (IS_ERR(task))
+ return PTR_ERR(task);
- cfs_write_lock_bh (&ksocknal_data.ksnd_global_lock);
- ksocknal_data.ksnd_nthreads++;
- cfs_write_unlock_bh (&ksocknal_data.ksnd_global_lock);
- return (0);
+ write_lock_bh(&ksocknal_data.ksnd_global_lock);
+ ksocknal_data.ksnd_nthreads++;
+ write_unlock_bh(&ksocknal_data.ksnd_global_lock);
+ return 0;
}
void
ksocknal_thread_fini (void)
{
- cfs_write_lock_bh (&ksocknal_data.ksnd_global_lock);
+ write_lock_bh(&ksocknal_data.ksnd_global_lock);
ksocknal_data.ksnd_nthreads--;
- cfs_write_unlock_bh (&ksocknal_data.ksnd_global_lock);
+ write_unlock_bh(&ksocknal_data.ksnd_global_lock);
}
int
LASSERT (conn->ksnc_rx_scheduled);
- cfs_spin_lock_bh (&sched->kss_lock);
+ spin_lock_bh(&sched->kss_lock);
switch (conn->ksnc_rx_state) {
case SOCKNAL_RX_PARSE_WAIT:
conn->ksnc_rx_state = SOCKNAL_RX_LNET_PAYLOAD;
- cfs_spin_unlock_bh (&sched->kss_lock);
- ksocknal_conn_decref(conn);
- return (0);
+ spin_unlock_bh(&sched->kss_lock);
+ ksocknal_conn_decref(conn);
+ return 0;
}
static inline int
ksocknal_sched_cansleep(ksock_sched_t *sched)
{
- int rc;
+ int rc;
- cfs_spin_lock_bh (&sched->kss_lock);
+ spin_lock_bh(&sched->kss_lock);
- rc = (!ksocknal_data.ksnd_shuttingdown &&
- cfs_list_empty(&sched->kss_rx_conns) &&
- cfs_list_empty(&sched->kss_tx_conns));
+ rc = (!ksocknal_data.ksnd_shuttingdown &&
+ cfs_list_empty(&sched->kss_rx_conns) &&
+ cfs_list_empty(&sched->kss_tx_conns));
- cfs_spin_unlock_bh (&sched->kss_lock);
- return (rc);
+ spin_unlock_bh(&sched->kss_lock);
+ return rc;
}
-int ksocknal_scheduler (void *arg)
+int ksocknal_scheduler(void *arg)
{
- ksock_sched_t *sched = (ksock_sched_t *)arg;
- ksock_conn_t *conn;
- ksock_tx_t *tx;
- int rc;
- int nloops = 0;
- int id = (int)(sched - ksocknal_data.ksnd_schedulers);
- char name[16];
+ struct ksock_sched_info *info;
+ ksock_sched_t *sched;
+ ksock_conn_t *conn;
+ ksock_tx_t *tx;
+ int rc;
+ int nloops = 0;
+ long id = (long)arg;
- snprintf (name, sizeof (name),"socknal_sd%02d", id);
- cfs_daemonize (name);
- cfs_block_allsigs ();
+ info = ksocknal_data.ksnd_sched_info[KSOCK_THREAD_CPT(id)];
+ sched = &info->ksi_scheds[KSOCK_THREAD_SID(id)];
+
+ cfs_block_allsigs();
- if (ksocknal_lib_bind_thread_to_cpu(id))
- CERROR ("Can't set CPU affinity for %s to %d\n", name, id);
+ rc = cfs_cpt_bind(lnet_cpt_table(), info->ksi_cpt);
+ if (rc != 0) {
+ CERROR("Can't set CPT affinity to %d: %d\n",
+ info->ksi_cpt, rc);
+ }
- cfs_spin_lock_bh (&sched->kss_lock);
+ spin_lock_bh(&sched->kss_lock);
while (!ksocknal_data.ksnd_shuttingdown) {
int did_something = 0;
* data_ready can set it any time after we release
* kss_lock. */
conn->ksnc_rx_ready = 0;
- cfs_spin_unlock_bh (&sched->kss_lock);
+ spin_unlock_bh(&sched->kss_lock);
- rc = ksocknal_process_receive(conn);
+ rc = ksocknal_process_receive(conn);
- cfs_spin_lock_bh (&sched->kss_lock);
+ spin_lock_bh(&sched->kss_lock);
/* I'm the only one that can clear this flag */
LASSERT(conn->ksnc_rx_scheduled);
* write_space can set it any time after we release
* kss_lock. */
conn->ksnc_tx_ready = 0;
- cfs_spin_unlock_bh (&sched->kss_lock);
+ spin_unlock_bh(&sched->kss_lock);
if (!cfs_list_empty(&zlist)) {
/* free zombie noop txs, it's fast because
if (rc == -ENOMEM || rc == -EAGAIN) {
/* Incomplete send: replace tx on HEAD of tx_queue */
- cfs_spin_lock_bh (&sched->kss_lock);
- cfs_list_add (&tx->tx_list,
- &conn->ksnc_tx_queue);
- } else {
- /* Complete send; tx -ref */
- ksocknal_tx_decref (tx);
-
- cfs_spin_lock_bh (&sched->kss_lock);
+ spin_lock_bh(&sched->kss_lock);
+ cfs_list_add(&tx->tx_list,
+ &conn->ksnc_tx_queue);
+ } else {
+ /* Complete send; tx -ref */
+ ksocknal_tx_decref(tx);
+
+ spin_lock_bh(&sched->kss_lock);
/* assume space for more */
conn->ksnc_tx_ready = 1;
}
}
if (!did_something || /* nothing to do */
++nloops == SOCKNAL_RESCHED) { /* hogging CPU? */
- cfs_spin_unlock_bh (&sched->kss_lock);
+ spin_unlock_bh(&sched->kss_lock);
nloops = 0;
cfs_cond_resched();
}
- cfs_spin_lock_bh (&sched->kss_lock);
- }
- }
+ spin_lock_bh(&sched->kss_lock);
+ }
+ }
- cfs_spin_unlock_bh (&sched->kss_lock);
- ksocknal_thread_fini ();
- return (0);
+ spin_unlock_bh(&sched->kss_lock);
+ ksocknal_thread_fini();
+ return 0;
}
/*
*/
void ksocknal_read_callback (ksock_conn_t *conn)
{
- ksock_sched_t *sched;
- ENTRY;
+ ksock_sched_t *sched;
+ ENTRY;
- sched = conn->ksnc_scheduler;
+ sched = conn->ksnc_scheduler;
- cfs_spin_lock_bh (&sched->kss_lock);
+ spin_lock_bh(&sched->kss_lock);
conn->ksnc_rx_ready = 1;
cfs_waitq_signal (&sched->kss_waitq);
}
- cfs_spin_unlock_bh (&sched->kss_lock);
+ spin_unlock_bh(&sched->kss_lock);
- EXIT;
+ EXIT;
}
/*
*/
void ksocknal_write_callback (ksock_conn_t *conn)
{
- ksock_sched_t *sched;
- ENTRY;
+ ksock_sched_t *sched;
+ ENTRY;
- sched = conn->ksnc_scheduler;
+ sched = conn->ksnc_scheduler;
- cfs_spin_lock_bh (&sched->kss_lock);
+ spin_lock_bh(&sched->kss_lock);
conn->ksnc_tx_ready = 1;
cfs_waitq_signal (&sched->kss_waitq);
}
- cfs_spin_unlock_bh (&sched->kss_lock);
+ spin_unlock_bh(&sched->kss_lock);
- EXIT;
+ EXIT;
}
ksock_proto_t *
deadline = cfs_time_add(cfs_time_current(),
cfs_time_seconds(*ksocknal_tunables.ksnd_timeout));
- cfs_write_lock_bh (&ksocknal_data.ksnd_global_lock);
+ write_lock_bh(&ksocknal_data.ksnd_global_lock);
LASSERT (route->ksnr_scheduled);
LASSERT (!route->ksnr_connecting);
type = SOCKLND_CONN_BULK_OUT;
}
- cfs_write_unlock_bh (&ksocknal_data.ksnd_global_lock);
+ write_unlock_bh(&ksocknal_data.ksnd_global_lock);
if (cfs_time_aftereq(cfs_time_current(), deadline)) {
rc = -ETIMEDOUT;
CDEBUG(D_NET, "peer %s: conn race, retry later.\n",
libcfs_nid2str(peer->ksnp_id.nid));
- cfs_write_lock_bh (&ksocknal_data.ksnd_global_lock);
+ write_lock_bh(&ksocknal_data.ksnd_global_lock);
}
route->ksnr_scheduled = 0;
ksocknal_launch_connection_locked(route);
}
- cfs_write_unlock_bh (&ksocknal_data.ksnd_global_lock);
+ write_unlock_bh(&ksocknal_data.ksnd_global_lock);
return retry_later;
failed:
- cfs_write_lock_bh (&ksocknal_data.ksnd_global_lock);
+ write_lock_bh(&ksocknal_data.ksnd_global_lock);
route->ksnr_scheduled = 0;
route->ksnr_connecting = 0;
cfs_list_add_tail(&route->ksnr_list, &peer->ksnp_routes);
}
#endif
- cfs_write_unlock_bh (&ksocknal_data.ksnd_global_lock);
+ write_unlock_bh(&ksocknal_data.ksnd_global_lock);
ksocknal_peer_failed(peer);
ksocknal_txlist_done(peer->ksnp_ni, &zombies, 1);
static int
ksocknal_connd_check_start(long sec, long *timeout)
{
+ char name[16];
int rc;
int total = ksocknal_data.ksnd_connd_starting +
ksocknal_data.ksnd_connd_running;
ksocknal_data.ksnd_connd_starting_stamp = sec;
ksocknal_data.ksnd_connd_starting++;
- cfs_spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
+ spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
- /* NB: total is the next id */
- rc = ksocknal_thread_start(ksocknal_connd, (void *)((long)total));
+ /* NB: total is the next id */
+ snprintf(name, sizeof(name), "socknal_cd%02d", total);
+ rc = ksocknal_thread_start(ksocknal_connd, NULL, name);
- cfs_spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
+ spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
if (rc == 0)
return 1;
int
ksocknal_connd (void *arg)
{
- cfs_spinlock_t *connd_lock = &ksocknal_data.ksnd_connd_lock;
- long id = (long)(long_ptr_t)arg;
- char name[16];
+ spinlock_t *connd_lock = &ksocknal_data.ksnd_connd_lock;
ksock_connreq_t *cr;
cfs_waitlink_t wait;
int nloops = 0;
int cons_retry = 0;
- snprintf (name, sizeof (name), "socknal_cd%02ld", id);
- cfs_daemonize (name);
cfs_block_allsigs ();
cfs_waitlink_init (&wait);
- cfs_spin_lock_bh (connd_lock);
+ spin_lock_bh(connd_lock);
LASSERT(ksocknal_data.ksnd_connd_starting > 0);
ksocknal_data.ksnd_connd_starting--;
next, ksock_connreq_t, ksncr_list);
cfs_list_del(&cr->ksncr_list);
- cfs_spin_unlock_bh(connd_lock);
- dropped_lock = 1;
+ spin_unlock_bh(connd_lock);
+ dropped_lock = 1;
- ksocknal_create_conn(cr->ksncr_ni, NULL,
- cr->ksncr_sock, SOCKLND_CONN_NONE);
- lnet_ni_decref(cr->ksncr_ni);
- LIBCFS_FREE(cr, sizeof(*cr));
+ ksocknal_create_conn(cr->ksncr_ni, NULL,
+ cr->ksncr_sock, SOCKLND_CONN_NONE);
+ lnet_ni_decref(cr->ksncr_ni);
+ LIBCFS_FREE(cr, sizeof(*cr));
- cfs_spin_lock_bh(connd_lock);
+ spin_lock_bh(connd_lock);
}
/* Only handle an outgoing connection request if there
if (route != NULL) {
cfs_list_del (&route->ksnr_connd_list);
ksocknal_data.ksnd_connd_connecting++;
- cfs_spin_unlock_bh(connd_lock);
+ spin_unlock_bh(connd_lock);
dropped_lock = 1;
if (ksocknal_connect(route)) {
ksocknal_route_decref(route);
- cfs_spin_lock_bh(connd_lock);
- ksocknal_data.ksnd_connd_connecting--;
- }
-
- if (dropped_lock) {
- if (++nloops < SOCKNAL_RESCHED)
- continue;
- cfs_spin_unlock_bh(connd_lock);
- nloops = 0;
- cfs_cond_resched();
- cfs_spin_lock_bh(connd_lock);
- continue;
- }
-
- /* Nothing to do for 'timeout' */
- cfs_set_current_state (CFS_TASK_INTERRUPTIBLE);
- cfs_waitq_add_exclusive (&ksocknal_data.ksnd_connd_waitq,
- &wait);
- cfs_spin_unlock_bh(connd_lock);
-
- nloops = 0;
- cfs_waitq_timedwait (&wait, CFS_TASK_INTERRUPTIBLE, timeout);
-
- cfs_set_current_state (CFS_TASK_RUNNING);
- cfs_waitq_del (&ksocknal_data.ksnd_connd_waitq, &wait);
- cfs_spin_lock_bh(connd_lock);
- }
- ksocknal_data.ksnd_connd_running--;
- cfs_spin_unlock_bh(connd_lock);
-
- ksocknal_thread_fini ();
- return (0);
+ spin_lock_bh(connd_lock);
+ ksocknal_data.ksnd_connd_connecting--;
+ }
+
+ if (dropped_lock) {
+ if (++nloops < SOCKNAL_RESCHED)
+ continue;
+ spin_unlock_bh(connd_lock);
+ nloops = 0;
+ cfs_cond_resched();
+ spin_lock_bh(connd_lock);
+ continue;
+ }
+
+ /* Nothing to do for 'timeout' */
+ cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
+ cfs_waitq_add_exclusive(&ksocknal_data.ksnd_connd_waitq, &wait);
+ spin_unlock_bh(connd_lock);
+
+ nloops = 0;
+ cfs_waitq_timedwait(&wait, CFS_TASK_INTERRUPTIBLE, timeout);
+
+ cfs_set_current_state(CFS_TASK_RUNNING);
+ cfs_waitq_del(&ksocknal_data.ksnd_connd_waitq, &wait);
+ spin_lock_bh(connd_lock);
+ }
+ ksocknal_data.ksnd_connd_running--;
+ spin_unlock_bh(connd_lock);
+
+ ksocknal_thread_fini();
+ return 0;
}
ksock_conn_t *
ksock_tx_t *tx;
CFS_LIST_HEAD (stale_txs);
- cfs_write_lock_bh (&ksocknal_data.ksnd_global_lock);
+ write_lock_bh(&ksocknal_data.ksnd_global_lock);
while (!cfs_list_empty (&peer->ksnp_tx_queue)) {
tx = cfs_list_entry (peer->ksnp_tx_queue.next,
cfs_list_add_tail (&tx->tx_list, &stale_txs);
}
- cfs_write_unlock_bh (&ksocknal_data.ksnd_global_lock);
+ write_unlock_bh(&ksocknal_data.ksnd_global_lock);
ksocknal_txlist_done(peer->ksnp_ni, &stale_txs, 1);
}
if (conn != NULL) {
sched = conn->ksnc_scheduler;
- cfs_spin_lock_bh (&sched->kss_lock);
- if (!cfs_list_empty(&conn->ksnc_tx_queue)) {
- cfs_spin_unlock_bh(&sched->kss_lock);
- /* there is an queued ACK, don't need keepalive */
- return 0;
- }
+ spin_lock_bh(&sched->kss_lock);
+ if (!cfs_list_empty(&conn->ksnc_tx_queue)) {
+ spin_unlock_bh(&sched->kss_lock);
+ /* there is an queued ACK, don't need keepalive */
+ return 0;
+ }
- cfs_spin_unlock_bh(&sched->kss_lock);
- }
+ spin_unlock_bh(&sched->kss_lock);
+ }
- cfs_read_unlock(&ksocknal_data.ksnd_global_lock);
+ read_unlock(&ksocknal_data.ksnd_global_lock);
- /* cookie = 1 is reserved for keepalive PING */
- tx = ksocknal_alloc_tx_noop(1, 1);
- if (tx == NULL) {
- cfs_read_lock(&ksocknal_data.ksnd_global_lock);
- return -ENOMEM;
- }
+ /* cookie = 1 is reserved for keepalive PING */
+ tx = ksocknal_alloc_tx_noop(1, 1);
+ if (tx == NULL) {
+ read_lock(&ksocknal_data.ksnd_global_lock);
+ return -ENOMEM;
+ }
- if (ksocknal_launch_packet(peer->ksnp_ni, tx, peer->ksnp_id) == 0) {
- cfs_read_lock(&ksocknal_data.ksnd_global_lock);
- return 1;
- }
+ if (ksocknal_launch_packet(peer->ksnp_ni, tx, peer->ksnp_id) == 0) {
+ read_lock(&ksocknal_data.ksnd_global_lock);
+ return 1;
+ }
- ksocknal_free_tx(tx);
- cfs_read_lock(&ksocknal_data.ksnd_global_lock);
+ ksocknal_free_tx(tx);
+ read_lock(&ksocknal_data.ksnd_global_lock);
- return -EIO;
+ return -EIO;
}
/* NB. We expect to have a look at all the peers and not find any
* connections to time out, so we just use a shared lock while we
* take a look... */
- cfs_read_lock (&ksocknal_data.ksnd_global_lock);
+ read_lock(&ksocknal_data.ksnd_global_lock);
cfs_list_for_each_entry_typed(peer, peers, ksock_peer_t, ksnp_list) {
cfs_time_t deadline = 0;
int n = 0;
if (ksocknal_send_keepalive_locked(peer) != 0) {
- cfs_read_unlock (&ksocknal_data.ksnd_global_lock);
+ read_unlock(&ksocknal_data.ksnd_global_lock);
goto again;
}
conn = ksocknal_find_timed_out_conn (peer);
if (conn != NULL) {
- cfs_read_unlock (&ksocknal_data.ksnd_global_lock);
+ read_unlock(&ksocknal_data.ksnd_global_lock);
ksocknal_close_conn_and_siblings (conn, -ETIMEDOUT);
tx->tx_deadline)) {
ksocknal_peer_addref(peer);
- cfs_read_unlock (&ksocknal_data.ksnd_global_lock);
+ read_unlock(&ksocknal_data.ksnd_global_lock);
ksocknal_flush_stale_txs(peer);
if (cfs_list_empty(&peer->ksnp_zc_req_list))
continue;
- cfs_spin_lock(&peer->ksnp_lock);
+ spin_lock(&peer->ksnp_lock);
cfs_list_for_each_entry_typed(tx, &peer->ksnp_zc_req_list,
ksock_tx_t, tx_zc_list) {
if (!cfs_time_aftereq(cfs_time_current(),
}
if (n == 0) {
- cfs_spin_unlock(&peer->ksnp_lock);
+ spin_unlock(&peer->ksnp_lock);
continue;
}
conn = tx->tx_conn;
ksocknal_conn_addref(conn);
- cfs_spin_unlock(&peer->ksnp_lock);
- cfs_read_unlock (&ksocknal_data.ksnd_global_lock);
+ spin_unlock(&peer->ksnp_lock);
+ read_unlock(&ksocknal_data.ksnd_global_lock);
CERROR("Total %d stale ZC_REQs for peer %s detected; the "
"oldest(%p) timed out %ld secs ago, "
goto again;
}
- cfs_read_unlock (&ksocknal_data.ksnd_global_lock);
+ read_unlock(&ksocknal_data.ksnd_global_lock);
}
int
int peer_index = 0;
cfs_time_t deadline = cfs_time_current();
- cfs_daemonize ("socknal_reaper");
cfs_block_allsigs ();
CFS_INIT_LIST_HEAD(&enomem_conns);
cfs_waitlink_init (&wait);
- cfs_spin_lock_bh (&ksocknal_data.ksnd_reaper_lock);
+ spin_lock_bh(&ksocknal_data.ksnd_reaper_lock);
while (!ksocknal_data.ksnd_shuttingdown) {
ksock_conn_t, ksnc_list);
cfs_list_del (&conn->ksnc_list);
- cfs_spin_unlock_bh (&ksocknal_data.ksnd_reaper_lock);
+ spin_unlock_bh(&ksocknal_data.ksnd_reaper_lock);
- ksocknal_terminate_conn (conn);
- ksocknal_conn_decref(conn);
+ ksocknal_terminate_conn(conn);
+ ksocknal_conn_decref(conn);
- cfs_spin_lock_bh (&ksocknal_data.ksnd_reaper_lock);
+ spin_lock_bh(&ksocknal_data.ksnd_reaper_lock);
continue;
}
next, ksock_conn_t, ksnc_list);
cfs_list_del (&conn->ksnc_list);
- cfs_spin_unlock_bh (&ksocknal_data.ksnd_reaper_lock);
+ spin_unlock_bh(&ksocknal_data.ksnd_reaper_lock);
- ksocknal_destroy_conn (conn);
+ ksocknal_destroy_conn(conn);
- cfs_spin_lock_bh (&ksocknal_data.ksnd_reaper_lock);
+ spin_lock_bh(&ksocknal_data.ksnd_reaper_lock);
continue;
}
cfs_list_del_init(&ksocknal_data.ksnd_enomem_conns);
}
- cfs_spin_unlock_bh (&ksocknal_data.ksnd_reaper_lock);
+ spin_unlock_bh(&ksocknal_data.ksnd_reaper_lock);
/* reschedule all the connections that stalled with ENOMEM... */
nenomem_conns = 0;
sched = conn->ksnc_scheduler;
- cfs_spin_lock_bh (&sched->kss_lock);
+ spin_lock_bh(&sched->kss_lock);
- LASSERT (conn->ksnc_tx_scheduled);
- conn->ksnc_tx_ready = 1;
- cfs_list_add_tail(&conn->ksnc_tx_list,
- &sched->kss_tx_conns);
- cfs_waitq_signal (&sched->kss_waitq);
+ LASSERT(conn->ksnc_tx_scheduled);
+ conn->ksnc_tx_ready = 1;
+ cfs_list_add_tail(&conn->ksnc_tx_list,
+ &sched->kss_tx_conns);
+ cfs_waitq_signal(&sched->kss_waitq);
- cfs_spin_unlock_bh (&sched->kss_lock);
+ spin_unlock_bh(&sched->kss_lock);
nenomem_conns++;
}
cfs_set_current_state (CFS_TASK_RUNNING);
cfs_waitq_del (&ksocknal_data.ksnd_reaper_waitq, &wait);
- cfs_spin_lock_bh (&ksocknal_data.ksnd_reaper_lock);
- }
+ spin_lock_bh(&ksocknal_data.ksnd_reaper_lock);
+ }
- cfs_spin_unlock_bh (&ksocknal_data.ksnd_reaper_lock);
+ spin_unlock_bh(&ksocknal_data.ksnd_reaper_lock);
- ksocknal_thread_fini ();
- return (0);
+ ksocknal_thread_fini();
+ return 0;
}