#include "ptllnd.h"
-
lnd_t kptllnd_lnd = {
.lnd_type = PTLLND,
.lnd_startup = kptllnd_startup,
msg->ptlm_dstnid = dstnid;
msg->ptlm_dststamp = dststamp;
msg->ptlm_seq = seq;
-
+
if (*kptllnd_tunables.kptl_cksum) {
/* NB ptlm_cksum zero while computing cksum */
msg->ptlm_cksum = kptllnd_cksum(msg, msg->ptlm_nob);
PJK_UT_MSG(">>>\n");
LASSERT (ni->ni_lnd == &kptllnd_lnd);
-
-
PORTAL_ALLOC (kptllnd_data,sizeof(*kptllnd_data));
if (kptllnd_data == NULL){
* way to choose a better interface.
* Requested and actual limits are ignored.
*/
- ptl_rc = PtlNIInit(PTL_IFACE_DEFAULT, 0, NULL, NULL,
- &kptllnd_data->kptl_nih);
+ ptl_rc = PtlNIInit(
+#ifdef _USING_LUSTRE_PORTALS_
+ PTL_IFACE_DEFAULT,
+#else
+ CRAY_KERN_NAL,
+#endif
+ PTLLND_PID, NULL, NULL,
+ &kptllnd_data->kptl_nih);
/*
* Note: PTL_IFACE_DUP simply means that the requested
CDEBUG(D_INFO,"max_immd_size = %d\n",*kptllnd_tunables.kptl_max_immd_size);
ptllnd_assert_wire_constants();
-
+
/*
* Check for valid parameters.
*/
*kptllnd_tunables.kptl_credits,
*kptllnd_tunables.kptl_ntx);
return -EINVAL;
- }
+ }
rc = kptllnd_tunables_init();
if (rc != 0)
*/
target.nid = lnet2ptlnid(kptllnd_data,peer->peer_nid);
- target.pid = 0;
+ target.pid = PTLLND_PID;
PJK_UT_MSG_DATA("Msg NOB = %d\n",tx->tx_msg->ptlm_nob);
PJK_UT_MSG_DATA("Returned Credits=%d\n",tx->tx_msg->ptlm_credits);
*/
ptl_process_id_t target;
target.nid = PTL_NID_ANY;
- target.pid = 0;
+ target.pid = PTLLND_PID;
#endif
PJK_UT_MSG_DATA("matchibts=" LPX64 "\n",
&meh);
if(rc != 0) {
CERROR("PtlMeAttach failed %d\n",rc);
- goto failed;
+ goto failed_with_lock;
}
/* Setup the MD */
* posted to portals
*/
tx->tx_mdh = PTL_INVALID_HANDLE;
+
+ spin_unlock(&peer->peer_lock);
+
kptllnd_tx_decref(tx);
rc2 = PtlMEUnlink(meh);
LASSERT(rc2 == 0);
- goto failed;
+ goto failed_without_lock;
}
}
if(rc != 0){
CERROR("PtlMDBind failed %d\n",rc);
tx->tx_mdh_msg = PTL_INVALID_HANDLE;
- goto failed;
+ goto failed_with_lock;
}
list_add_tail(&tx->tx_list, &peer->peer_active_txs);
LASSERT(atomic_read(&tx->tx_refcount)>1);
rc2 = PtlMDUnlink(tx->tx_mdh_msg);
LASSERT( rc2 == 0);
+
+
#ifndef LUSTRE_PORTALS_UNLINK_SEMANTICS
tx->tx_mdh_msg = PTL_INVALID_HANDLE;
kptllnd_tx_decref(tx);
#endif
- goto failed;
+ goto failed_without_lock;
}
/*
PJK_UT_MSG_DATA("<<<\n");
return;
-failed:
+failed_with_lock:
+ spin_unlock(&peer->peer_lock);
+failed_without_lock:
/*
* Now unlink the MDs (if they were posted)
}
/*
- * Get back the credits
- * ??? WHY even do this because we're killing the peer
- */
- peer->peer_outstanding_credits += tx->tx_msg->ptlm_credits;
- peer->peer_credits++;
-
- spin_unlock(&peer->peer_lock);
-
- /*
* And cleanup this peer
*/
kptllnd_peer_cancel(peer);
kptllnd_peer_timedout(kptl_peer_t *peer)
{
kptl_tx_t *tx;
+ int rc = 0;
spin_lock(&peer->peer_lock);
if(!list_empty(&peer->peer_pending_txs)){
tx = list_entry(peer->peer_pending_txs.next,kptl_tx_t,tx_list);
if(time_after_eq(jiffies,tx->tx_deadline)){
- spin_unlock(&peer->peer_lock);
PJK_UT_MSG("Peer=%p PENDING tx=%p time=%lu sec\n",
peer,tx,(jiffies - tx->tx_deadline)/HZ);
- return 1;
+ rc = 0;
}
}
if(!list_empty(&peer->peer_active_txs)){
tx = list_entry(peer->peer_active_txs.next,kptl_tx_t,tx_list);
if(time_after_eq(jiffies,tx->tx_deadline)){
- spin_unlock(&peer->peer_lock);
PJK_UT_MSG("Peer=%p ACTIVE tx=%p time=%lu sec\n",
peer,tx,(jiffies - tx->tx_deadline)/HZ);
- return 1;
+ rc = 0;
}
}
spin_unlock(&peer->peer_lock);
- return 0;
+ return rc;
}
unsigned long flags;
read_lock_irqsave(&kptllnd_data->kptl_peer_rw_lock, flags);
peer = kptllnd_peer_find_locked(kptllnd_data,nid);
- read_lock_irqsave(&kptllnd_data->kptl_peer_rw_lock, flags);
+ read_unlock_irqrestore(&kptllnd_data->kptl_peer_rw_lock, flags);
return peer;
}
rc = kptllnd_peer_create_locked ( kptllnd_data, &peer, nid);
if(rc != 0){
CERROR("Failed to create peer (nid="LPX64")\n",nid);
- write_unlock_irqrestore(&kptllnd_data->kptl_peer_rw_lock, flags);
peer = NULL;
goto failed;
}