/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright (c) 2012, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
void
kptllnd_peer_destroy (kptl_peer_t *peer)
{
- unsigned long flags;
+ unsigned long flags;
- CDEBUG(D_NET, "Peer=%p\n", peer);
+ CDEBUG(D_NET, "Peer=%p\n", peer);
- LASSERT (!cfs_in_interrupt());
- LASSERT (cfs_atomic_read(&peer->peer_refcount) == 0);
- LASSERT (peer->peer_state == PEER_STATE_ALLOCATED ||
- peer->peer_state == PEER_STATE_ZOMBIE);
- LASSERT (cfs_list_empty(&peer->peer_noops));
- LASSERT (cfs_list_empty(&peer->peer_sendq));
- LASSERT (cfs_list_empty(&peer->peer_activeq));
+ LASSERT (!in_interrupt());
+ LASSERT (cfs_atomic_read(&peer->peer_refcount) == 0);
+ LASSERT (peer->peer_state == PEER_STATE_ALLOCATED ||
+ peer->peer_state == PEER_STATE_ZOMBIE);
+ LASSERT (cfs_list_empty(&peer->peer_noops));
+ LASSERT (cfs_list_empty(&peer->peer_sendq));
+ LASSERT (cfs_list_empty(&peer->peer_activeq));
write_lock_irqsave(&kptllnd_data.kptl_peer_rw_lock, flags);
- if (peer->peer_state == PEER_STATE_ZOMBIE)
- cfs_list_del(&peer->peer_list);
+ if (peer->peer_state == PEER_STATE_ZOMBIE)
+ cfs_list_del(&peer->peer_list);
- kptllnd_data.kptl_npeers--;
+ kptllnd_data.kptl_npeers--;
write_unlock_irqrestore(&kptllnd_data.kptl_peer_rw_lock, flags);
- LIBCFS_FREE (peer, sizeof (*peer));
+ LIBCFS_FREE (peer, sizeof (*peer));
}
void
void
kptllnd_peer_alive (kptl_peer_t *peer)
{
- /* This is racy, but everyone's only writing cfs_time_current() */
- peer->peer_last_alive = cfs_time_current();
- cfs_mb();
+ /* This is racy, but everyone's only writing cfs_time_current() */
+ peer->peer_last_alive = cfs_time_current();
+ smp_mb();
}
void
void
kptllnd_peer_close_locked(kptl_peer_t *peer, int why)
{
- switch (peer->peer_state) {
- default:
- LBUG();
-
- case PEER_STATE_WAITING_HELLO:
- case PEER_STATE_ACTIVE:
- /* Ensure new peers see a new incarnation of me */
- LASSERT(peer->peer_myincarnation <= kptllnd_data.kptl_incarnation);
- if (peer->peer_myincarnation == kptllnd_data.kptl_incarnation)
- kptllnd_data.kptl_incarnation++;
-
- /* Removing from peer table */
- kptllnd_data.kptl_n_active_peers--;
- LASSERT (kptllnd_data.kptl_n_active_peers >= 0);
-
- cfs_list_del(&peer->peer_list);
- kptllnd_peer_unreserve_buffers();
-
- peer->peer_error = why; /* stash 'why' only on first close */
- peer->peer_state = PEER_STATE_CLOSING;
-
- /* Schedule for immediate attention, taking peer table's ref */
- cfs_list_add_tail(&peer->peer_list,
- &kptllnd_data.kptl_closing_peers);
- cfs_waitq_signal(&kptllnd_data.kptl_watchdog_waitq);
- break;
-
- case PEER_STATE_ZOMBIE:
- case PEER_STATE_CLOSING:
- break;
- }
+ switch (peer->peer_state) {
+ default:
+ LBUG();
+
+ case PEER_STATE_WAITING_HELLO:
+ case PEER_STATE_ACTIVE:
+ /* Ensure new peers see a new incarnation of me */
+ LASSERT(peer->peer_myincarnation <= kptllnd_data.kptl_incarnation);
+ if (peer->peer_myincarnation == kptllnd_data.kptl_incarnation)
+ kptllnd_data.kptl_incarnation++;
+
+ /* Removing from peer table */
+ kptllnd_data.kptl_n_active_peers--;
+ LASSERT (kptllnd_data.kptl_n_active_peers >= 0);
+
+ cfs_list_del(&peer->peer_list);
+ kptllnd_peer_unreserve_buffers();
+
+ peer->peer_error = why; /* stash 'why' only on first close */
+ peer->peer_state = PEER_STATE_CLOSING;
+
+ /* Schedule for immediate attention, taking peer table's ref */
+ cfs_list_add_tail(&peer->peer_list,
+ &kptllnd_data.kptl_closing_peers);
+ wake_up(&kptllnd_data.kptl_watchdog_waitq);
+ break;
+
+ case PEER_STATE_ZOMBIE:
+ case PEER_STATE_CLOSING:
+ break;
+ }
}
void
}
- tx->tx_deadline = jiffies + (*kptllnd_tunables.kptl_timeout * CFS_HZ);
- tx->tx_active = 1;
- tx->tx_msg_mdh = msg_mdh;
- kptllnd_queue_tx(peer, tx);
+ tx->tx_deadline = jiffies + (*kptllnd_tunables.kptl_timeout * HZ);
+ tx->tx_active = 1;
+ tx->tx_msg_mdh = msg_mdh;
+ kptllnd_queue_tx(peer, tx);
}
/* NB "restarts" comes from peer_sendq of a single peer */
void
kptllnd_peer_check_sends (kptl_peer_t *peer)
{
- ptl_handle_me_t meh;
- kptl_tx_t *tx;
- int rc;
- int msg_type;
- unsigned long flags;
+ ptl_handle_me_t meh;
+ kptl_tx_t *tx;
+ int rc;
+ int msg_type;
+ unsigned long flags;
- LASSERT(!cfs_in_interrupt());
+ LASSERT(!in_interrupt());
spin_lock_irqsave(&peer->peer_lock, flags);
- peer->peer_retry_noop = 0;
+ peer->peer_retry_noop = 0;
if (kptllnd_peer_send_noop(peer)) {
/* post a NOOP to return credits */