/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
* vim:expandtab:shiftwidth=8:tabstop=8:
*
- * Copyright (C) 2002 Cluster File Systems, Inc.
- * Author: Eric Barton <eric@bartonsoftware.com>
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved
+ *
+ * Author: Eric Barton <eric@bartonsoftware.com>
*
* This file is part of Portals, http://www.lustre.org
*
* You should have received a copy of the GNU General Public License
* along with Portals; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
*/
#include "qswlnd.h"
void
kqswnal_notify_peer_down(kqswnal_tx_t *ktx)
{
- struct timeval now;
time_t then;
- do_gettimeofday (&now);
- then = now.tv_sec - (jiffies - ktx->ktx_launchtime)/HZ;
+ then = cfs_time_current_sec() -
+ cfs_duration_sec(cfs_time_current() -
+ ktx->ktx_launchtime);
lnet_notify(kqswnal_data.kqn_ni, ktx->ktx_nid, 0, then);
}
int nfrags = ktx->ktx_nfrag;
int nmapped = ktx->ktx_nmappedpages;
int maxmapped = ktx->ktx_npages;
- uint32_t basepage = ktx->ktx_basepage + nmapped;
+ __u32 basepage = ktx->ktx_basepage + nmapped;
char *ptr;
EP_RAILMASK railmask;
int nfrags = ktx->ktx_nfrag;
int nmapped = ktx->ktx_nmappedpages;
int maxmapped = ktx->ktx_npages;
- uint32_t basepage = ktx->ktx_basepage + nmapped;
+ __u32 basepage = ktx->ktx_basepage + nmapped;
EP_RAILMASK railmask;
int rail;
unsigned long flags;
int rc;
- ktx->ktx_launchtime = jiffies;
+ ktx->ktx_launchtime = cfs_time_current();
if (kqswnal_data.kqn_shuttingdown)
return (-ESHUTDOWN);
switch (ktx->ktx_state) {
case KTX_GETTING:
case KTX_PUTTING:
- if (the_lnet.ln_testprotocompat != 0 &&
- the_lnet.ln_ptlcompat == 0) {
+ if (the_lnet.ln_testprotocompat != 0) {
kqswnal_msg_t *msg = (kqswnal_msg_t *)ktx->ktx_buffer;
/* single-shot proto test:
* ktx_frags[1] and onward with the network addresses
* of the buffer frags. */
- if (the_lnet.ln_ptlcompat == 2) {
- /* Strong portals compatibility: send "raw" LNET
- * header + rdma descriptor */
- mhdr = (lnet_hdr_t *)ktx->ktx_buffer;
- rmd = (kqswnal_remotemd_t *)(mhdr + 1);
- } else {
- /* Send an RDMA message */
- msg->kqm_magic = LNET_PROTO_QSW_MAGIC;
- msg->kqm_version = QSWLND_PROTO_VERSION;
- msg->kqm_type = QSWLND_MSG_RDMA;
+ /* Send an RDMA message */
+ msg->kqm_magic = LNET_PROTO_QSW_MAGIC;
+ msg->kqm_version = QSWLND_PROTO_VERSION;
+ msg->kqm_type = QSWLND_MSG_RDMA;
- mhdr = &msg->kqm_u.rdma.kqrm_hdr;
- rmd = &msg->kqm_u.rdma.kqrm_rmd;
- }
+ mhdr = &msg->kqm_u.rdma.kqrm_hdr;
+ rmd = &msg->kqm_u.rdma.kqrm_rmd;
*mhdr = *hdr;
nob = (((char *)rmd) - ktx->ktx_buffer);
ep_nmd_subset(&ktx->ktx_frags[0], &ktx->ktx_ebuffer, 0, nob);
#if KQSW_CKSUM
- LASSERT (the_lnet.ln_ptlcompat != 2);
msg->kqm_nob = nob + payload_nob;
msg->kqm_cksum = 0;
msg->kqm_cksum = kqswnal_csum(~0, (char *)msg, nob);
char *payload;
kqswnal_msg_t *msg = (kqswnal_msg_t *)ktx->ktx_buffer;
- /* small message: single frag copied into the pre-mapped buffer */
- if (the_lnet.ln_ptlcompat == 2) {
- /* Strong portals compatibility: send "raw" LNET header
- * + payload */
- mhdr = (lnet_hdr_t *)ktx->ktx_buffer;
- payload = (char *)(mhdr + 1);
- } else {
- /* Send an IMMEDIATE message */
- msg->kqm_magic = LNET_PROTO_QSW_MAGIC;
- msg->kqm_version = QSWLND_PROTO_VERSION;
- msg->kqm_type = QSWLND_MSG_IMMEDIATE;
+ /* single frag copied into the pre-mapped buffer */
+ msg->kqm_magic = LNET_PROTO_QSW_MAGIC;
+ msg->kqm_version = QSWLND_PROTO_VERSION;
+ msg->kqm_type = QSWLND_MSG_IMMEDIATE;
- mhdr = &msg->kqm_u.immediate.kqim_hdr;
- payload = msg->kqm_u.immediate.kqim_payload;
- }
+ mhdr = &msg->kqm_u.immediate.kqim_hdr;
+ payload = msg->kqm_u.immediate.kqim_payload;
*mhdr = *hdr;
nob = (payload - ktx->ktx_buffer) + payload_nob;
payload_niov, payload_iov,
payload_offset, payload_nob);
#if KQSW_CKSUM
- LASSERT (the_lnet.ln_ptlcompat != 2);
msg->kqm_nob = nob;
msg->kqm_cksum = 0;
msg->kqm_cksum = kqswnal_csum(~0, (char *)msg, nob);
lnet_hdr_t *mhdr;
kqswnal_msg_t *msg = (kqswnal_msg_t *)ktx->ktx_buffer;
- /* large message: multiple frags: first is hdr in pre-mapped buffer */
- if (the_lnet.ln_ptlcompat == 2) {
- /* Strong portals compatibility: send "raw" LNET header
- * + payload */
- mhdr = (lnet_hdr_t *)ktx->ktx_buffer;
- nob = sizeof(lnet_hdr_t);
- } else {
- /* Send an IMMEDIATE message */
- msg->kqm_magic = LNET_PROTO_QSW_MAGIC;
- msg->kqm_version = QSWLND_PROTO_VERSION;
- msg->kqm_type = QSWLND_MSG_IMMEDIATE;
+ /* multiple frags: first is hdr in pre-mapped buffer */
+ msg->kqm_magic = LNET_PROTO_QSW_MAGIC;
+ msg->kqm_version = QSWLND_PROTO_VERSION;
+ msg->kqm_type = QSWLND_MSG_IMMEDIATE;
- mhdr = &msg->kqm_u.immediate.kqim_hdr;
- nob = offsetof(kqswnal_msg_t,
- kqm_u.immediate.kqim_payload);
- }
+ mhdr = &msg->kqm_u.immediate.kqim_hdr;
+ nob = offsetof(kqswnal_msg_t, kqm_u.immediate.kqim_payload);
*mhdr = *hdr;
LASSERT (atomic_read(&krx->krx_refcount) == 1);
- /* If ln_ptlcompat is set, peers may send me an "old" unencapsulated
- * lnet hdr */
- LASSERT (offsetof(kqswnal_msg_t, kqm_u) <= sizeof(lnet_hdr_t));
-
if (krx->krx_nob < offsetof(kqswnal_msg_t, kqm_u)) {
CERROR("Short message %d received from %s\n",
krx->krx_nob, libcfs_nid2str(fromnid));
goto done;
}
- if (the_lnet.ln_ptlcompat != 0) {
- /* Portals compatibility (strong or weak)
- * This could be an unencapsulated LNET header. If it's big
- * enough, let LNET's parser sort it out */
-
- if (krx->krx_nob < sizeof(lnet_hdr_t)) {
- CERROR("Short portals-compatible message from %s\n",
- libcfs_nid2str(fromnid));
- goto done;
- }
-
- krx->krx_raw_lnet_hdr = 1;
- rc = lnet_parse(ni, (lnet_hdr_t *)msg,
- fromnid, krx, krx->krx_rpc_reply_needed);
- if (rc < 0)
- goto done;
- return;
- }
-
CERROR("Unrecognised magic %08x from %s\n",
msg->kqm_magic, libcfs_nid2str(fromnid));
done:
krx->krx_state = KRX_PARSE;
krx->krx_rxd = rxd;
krx->krx_nob = nob;
- krx->krx_raw_lnet_hdr = 0;
/* RPC reply iff rpc request received without error */
krx->krx_rpc_reply_needed = ep_rxd_isrpc(rxd) &&
if (krx->krx_rpc_reply_needed) {
/* optimized (rdma) request sent as RPC */
- if (krx->krx_raw_lnet_hdr) {
- LASSERT (the_lnet.ln_ptlcompat != 0);
- hdr = (lnet_hdr_t *)msg;
- rmd = kqswnal_get_portalscompat_rmd(krx);
- if (rmd == NULL)
- return (-EPROTO);
- } else {
- LASSERT (msg->kqm_type == QSWLND_MSG_RDMA);
- hdr = &msg->kqm_u.rdma.kqrm_hdr;
- rmd = &msg->kqm_u.rdma.kqrm_rmd;
- }
+ LASSERT (msg->kqm_type == QSWLND_MSG_RDMA);
+ hdr = &msg->kqm_u.rdma.kqrm_hdr;
+ rmd = &msg->kqm_u.rdma.kqrm_rmd;
/* NB header is still in wire byte order */
return rc;
}
- if (krx->krx_raw_lnet_hdr) {
- LASSERT (the_lnet.ln_ptlcompat != 0);
- msg_offset = sizeof(lnet_hdr_t);
- } else {
- LASSERT (msg->kqm_type == QSWLND_MSG_IMMEDIATE);
- msg_offset = offsetof(kqswnal_msg_t, kqm_u.immediate.kqim_payload);
- }
+ LASSERT (msg->kqm_type == QSWLND_MSG_IMMEDIATE);
+ msg_offset = offsetof(kqswnal_msg_t, kqm_u.immediate.kqim_payload);
if (krx->krx_nob < msg_offset + rlen) {
CERROR("Bad message size from %s: have %d, need %d + %d\n",