* @{ */
struct lnet_me *
LNetMEAttach(unsigned int portal,
- struct lnet_process_id match_id_in,
+ struct lnet_processid *match_id_in,
__u64 match_bits_in,
__u64 ignore_bits_in,
enum lnet_unlink unlink_in,
/* match-table functions */
struct list_head *lnet_mt_match_head(struct lnet_match_table *mtable,
- struct lnet_process_id id, __u64 mbits);
+ struct lnet_processid *id, __u64 mbits);
struct lnet_match_table *lnet_mt_of_attach(unsigned int index,
- struct lnet_process_id id,
+ struct lnet_processid *id,
__u64 mbits, __u64 ignore_bits,
enum lnet_ins_pos pos);
int lnet_mt_match_md(struct lnet_match_table *mtable,
struct lnet_me {
struct list_head me_list;
int me_cpt;
- struct lnet_process_id me_match_id;
+ struct lnet_processid me_match_id;
unsigned int me_portal;
unsigned int me_pos; /* hash offset in mt_hash */
__u64 me_match_bits;
/* parameter for matching operations (GET, PUT) */
struct lnet_match_info {
__u64 mi_mbits;
- struct lnet_process_id mi_id;
+ struct lnet_processid mi_id;
unsigned int mi_cpt;
unsigned int mi_opc;
unsigned int mi_portal;
struct lnet_handle_md *ping_mdh,
int ni_count, bool set_eq)
{
- struct lnet_process_id id = {
- .nid = LNET_NID_ANY,
+ struct lnet_processid id = {
+ .nid = LNET_ANY_NID,
.pid = LNET_PID_ANY
};
struct lnet_me *me;
}
/* Ping target ME/MD */
- me = LNetMEAttach(LNET_RESERVED_PORTAL, id,
+ me = LNetMEAttach(LNET_RESERVED_PORTAL, &id,
LNET_PROTO_PING_MATCHBITS, 0,
LNET_UNLINK, LNET_INS_AFTER);
if (IS_ERR(me)) {
int lnet_push_target_post(struct lnet_ping_buffer *pbuf,
struct lnet_handle_md *mdhp)
{
- struct lnet_process_id id = { LNET_NID_ANY, LNET_PID_ANY };
+ struct lnet_processid id = { LNET_ANY_NID, LNET_PID_ANY };
struct lnet_md md = { NULL };
struct lnet_me *me;
int rc;
- me = LNetMEAttach(LNET_RESERVED_PORTAL, id,
+ me = LNetMEAttach(LNET_RESERVED_PORTAL, &id,
LNET_PROTO_PING_MATCHBITS, 0,
LNET_UNLINK, LNET_INS_AFTER);
if (IS_ERR(me)) {
*/
struct lnet_me *
LNetMEAttach(unsigned int portal,
- struct lnet_process_id match_id,
+ struct lnet_processid *match_id,
__u64 match_bits, __u64 ignore_bits,
enum lnet_unlink unlink, enum lnet_ins_pos pos)
{
lnet_res_lock(mtable->mt_cpt);
me->me_portal = portal;
- me->me_match_id = match_id;
+ me->me_match_id = *match_id;
me->me_match_bits = match_bits;
me->me_ignore_bits = ignore_bits;
me->me_unlink = unlink;
hdr->msg.put.offset = le32_to_cpu(hdr->msg.put.offset);
/* Primary peer NID. */
- info.mi_id.nid = msg->msg_initiator;
+ lnet_nid4_to_nid(msg->msg_initiator, &info.mi_id.nid);
info.mi_id.pid = hdr->src_pid;
info.mi_opc = LNET_MD_OP_PUT;
info.mi_portal = hdr->msg.put.ptl_index;
case LNET_MATCHMD_DROP:
CNETERR("Dropping PUT from %s portal %d match %llu"
" offset %d length %d: %d\n",
- libcfs_id2str(info.mi_id), info.mi_portal,
+ libcfs_idstr(&info.mi_id), info.mi_portal,
info.mi_mbits, info.mi_roffset, info.mi_rlength, rc);
return -ENOENT; /* -ve: OK but no match */
source_id.nid = hdr->src_nid;
source_id.pid = hdr->src_pid;
/* Primary peer NID */
- info.mi_id.nid = msg->msg_initiator;
+ lnet_nid4_to_nid(msg->msg_initiator, &info.mi_id.nid);
info.mi_id.pid = hdr->src_pid;
info.mi_opc = LNET_MD_OP_GET;
info.mi_portal = hdr->msg.get.ptl_index;
if (rc == LNET_MATCHMD_DROP) {
CNETERR("Dropping GET from %s portal %d match %llu"
" offset %d length %d\n",
- libcfs_id2str(info.mi_id), info.mi_portal,
+ libcfs_idstr(&info.mi_id), info.mi_portal,
info.mi_mbits, info.mi_roffset, info.mi_rlength);
return -ENOENT; /* -ve: OK but no match */
}
/* didn't get as far as lnet_ni_send() */
CERROR("%s: Unable to send REPLY for GET from %s: %d\n",
libcfs_nidstr(&ni->ni_nid),
- libcfs_id2str(info.mi_id), rc);
+ libcfs_idstr(&info.mi_id), rc);
lnet_finalize(msg, rc);
}
MODULE_PARM_DESC(portal_rotor, "redirect PUTs to different cpu-partitions");
static int
-lnet_ptl_match_type(unsigned int index, struct lnet_process_id match_id,
+lnet_ptl_match_type(unsigned int index, struct lnet_processid *match_id,
__u64 mbits, __u64 ignore_bits)
{
struct lnet_portal *ptl = the_lnet.ln_portals[index];
int unique;
- unique = ignore_bits == 0 &&
- match_id.nid != LNET_NID_ANY &&
- match_id.pid != LNET_PID_ANY;
+ unique = (ignore_bits == 0 &&
+ !LNET_NID_IS_ANY(&match_id->nid) &&
+ match_id->pid != LNET_PID_ANY);
LASSERT(!lnet_ptl_is_unique(ptl) || !lnet_ptl_is_wildcard(ptl));
return LNET_MATCHMD_NONE;
/* mismatched ME nid/pid? */
- if (me->me_match_id.nid != LNET_NID_ANY &&
- me->me_match_id.nid != info->mi_id.nid)
+ if (!LNET_NID_IS_ANY(&me->me_match_id.nid) &&
+ !nid_same(&me->me_match_id.nid, &info->mi_id.nid))
return LNET_MATCHMD_NONE;
if (me->me_match_id.pid != LNET_PID_ANY &&
/* this packet _really_ is too big */
CERROR("Matching packet from %s, match %llu"
" length %d too big: %d left, %d allowed\n",
- libcfs_id2str(info->mi_id), info->mi_mbits,
+ libcfs_idstr(&info->mi_id), info->mi_mbits,
info->mi_rlength, md->md_length - offset, mlength);
return LNET_MATCHMD_DROP;
CDEBUG(D_NET, "Incoming %s index %x from %s of "
"length %d/%d into md %#llx [%d] + %d\n",
(info->mi_opc == LNET_MD_OP_PUT) ? "put" : "get",
- info->mi_portal, libcfs_id2str(info->mi_id), mlength,
+ info->mi_portal, libcfs_idstr(&info->mi_id), mlength,
info->mi_rlength, md->md_lh.lh_cookie, md->md_niov, offset);
lnet_msg_attach_md(msg, md, offset, mlength);
}
static struct lnet_match_table *
-lnet_match2mt(struct lnet_portal *ptl, struct lnet_process_id id, __u64 mbits)
+lnet_match2mt(struct lnet_portal *ptl, struct lnet_processid *id, __u64 mbits)
{
if (LNET_CPT_NUMBER == 1)
return ptl->ptl_mtables[0]; /* the only one */
/* if it's a unique portal, return match-table hashed by NID */
return lnet_ptl_is_unique(ptl) ?
- ptl->ptl_mtables[lnet_cpt_of_nid(id.nid, NULL)] : NULL;
+ ptl->ptl_mtables[lnet_nid2cpt(&id->nid, NULL)] : NULL;
}
struct lnet_match_table *
-lnet_mt_of_attach(unsigned int index, struct lnet_process_id id,
+lnet_mt_of_attach(unsigned int index, struct lnet_processid *id,
__u64 mbits, __u64 ignore_bits, enum lnet_ins_pos pos)
{
struct lnet_portal *ptl;
LASSERT(lnet_ptl_is_wildcard(ptl) || lnet_ptl_is_unique(ptl));
- mtable = lnet_match2mt(ptl, info->mi_id, info->mi_mbits);
+ mtable = lnet_match2mt(ptl, &info->mi_id, info->mi_mbits);
if (mtable != NULL)
return mtable;
struct list_head *
lnet_mt_match_head(struct lnet_match_table *mtable,
- struct lnet_process_id id, __u64 mbits)
+ struct lnet_processid *id, __u64 mbits)
{
struct lnet_portal *ptl = the_lnet.ln_portals[mtable->mt_portal];
if (lnet_ptl_is_wildcard(ptl)) {
return &mtable->mt_mhash[mbits & LNET_MT_HASH_MASK];
} else {
- unsigned long hash = mbits + id.nid + id.pid;
+ unsigned long hash = mbits + nidhash(&id->nid) + id->pid;
LASSERT(lnet_ptl_is_unique(ptl));
hash = hash_long(hash, LNET_MT_HASH_BITS);
if (!list_empty(&mtable->mt_mhash[LNET_MT_HASH_IGNORE]))
head = &mtable->mt_mhash[LNET_MT_HASH_IGNORE];
else
- head = lnet_mt_match_head(mtable, info->mi_id, info->mi_mbits);
+ head = lnet_mt_match_head(mtable, &info->mi_id,
+ info->mi_mbits);
again:
/* NB: only wildcard portal needs to return LNET_MATCHMD_EXHAUSTED */
if (lnet_ptl_is_wildcard(the_lnet.ln_portals[mtable->mt_portal]))
}
if (exhausted == 0 && head == &mtable->mt_mhash[LNET_MT_HASH_IGNORE]) {
- head = lnet_mt_match_head(mtable, info->mi_id, info->mi_mbits);
+ head = lnet_mt_match_head(mtable, &info->mi_id,
+ info->mi_mbits);
goto again; /* re-check MEs w/o ignore-bits */
}
struct lnet_portal *ptl;
int rc;
- CDEBUG(D_NET, "Request from %s of length %d into portal %d "
- "MB=%#llx\n", libcfs_id2str(info->mi_id),
+ CDEBUG(D_NET,
+ "Request from %s of length %d into portal %d MB=%#llx\n",
+ libcfs_idstr(&info->mi_id),
info->mi_rlength, info->mi_portal, info->mi_mbits);
if (info->mi_portal >= the_lnet.ln_nportals) {
CDEBUG(D_NET,
"Delaying %s from %s ptl %d MB %#llx off %d len %d\n",
info->mi_opc == LNET_MD_OP_PUT ? "PUT" : "GET",
- libcfs_id2str(info->mi_id), info->mi_portal,
+ libcfs_idstr(&info->mi_id), info->mi_portal,
info->mi_mbits, info->mi_roffset, info->mi_rlength);
}
goto out0;
hdr = &msg->msg_hdr;
/* Multi-Rail: Primary peer NID */
- info.mi_id.nid = msg->msg_initiator;
+ lnet_nid4_to_nid(msg->msg_initiator, &info.mi_id.nid);
info.mi_id.pid = hdr->src_pid;
info.mi_opc = LNET_MD_OP_PUT;
info.mi_portal = hdr->msg.put.ptl_index;
CDEBUG(D_NET, "Resuming delayed PUT from %s portal %d "
"match %llu offset %d length %d.\n",
- libcfs_id2str(info.mi_id),
+ libcfs_idstr(&info.mi_id),
info.mi_portal, info.mi_mbits,
info.mi_roffset, info.mi_rlength);
} else {
static int
srpc_post_passive_rdma(int portal, int local, __u64 matchbits, void *buf,
- int len, int options, struct lnet_process_id peer,
+ int len, int options, struct lnet_process_id peer4,
struct lnet_handle_md *mdh, struct srpc_event *ev)
{
int rc;
struct lnet_md md;
struct lnet_me *me;
+ struct lnet_processid peer;
- me = LNetMEAttach(portal, peer, matchbits, 0, LNET_UNLINK,
+ peer.pid = peer4.pid;
+ lnet_nid4_to_nid(peer4.nid, &peer.nid);
+
+ me = LNetMEAttach(portal, &peer, matchbits, 0, LNET_UNLINK,
local ? LNET_INS_LOCAL : LNET_INS_AFTER);
if (IS_ERR(me)) {
rc = PTR_ERR(me);
CDEBUG(D_NET,
"Posted passive RDMA: peer %s, portal %d, matchbits %#llx\n",
- libcfs_id2str(peer), portal, matchbits);
+ libcfs_id2str(peer4), portal, matchbits);
return 0;
}
int ptlrpc_register_bulk(struct ptlrpc_request *req)
{
struct ptlrpc_bulk_desc *desc = req->rq_bulk;
- struct lnet_process_id peer;
+ struct lnet_processid peer;
int rc = 0;
int posted_md;
int total_md;
desc->bd_failure = 0;
- peer = desc->bd_import->imp_connection->c_peer;
+ peer.pid = desc->bd_import->imp_connection->c_peer.pid;
+ lnet_nid4_to_nid(desc->bd_import->imp_connection->c_peer.nid,
+ &peer.nid);
LASSERT(desc->bd_cbid.cbid_fn == client_bulk_callback);
LASSERT(desc->bd_cbid.cbid_arg == desc);
OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_BULK_ATTACH)) {
rc = -ENOMEM;
} else {
- me = LNetMEAttach(desc->bd_portal, peer, mbits, 0,
+ me = LNetMEAttach(desc->bd_portal, &peer, mbits, 0,
LNET_UNLINK, LNET_INS_AFTER);
rc = PTR_ERR_OR_ZERO(me);
}
/* Holler if peer manages to touch buffers before he knows the mbits */
if (desc->bd_refs != total_md)
CWARN("%s: Peer %s touched %d buffers while I registered\n",
- desc->bd_import->imp_obd->obd_name, libcfs_id2str(peer),
+ desc->bd_import->imp_obd->obd_name, libcfs_idstr(&peer),
total_md - desc->bd_refs);
spin_unlock(&desc->bd_lock);
int mpflag = 0;
bool rep_mbits = false;
struct lnet_handle_md bulk_cookie;
+ struct lnet_processid peer;
struct ptlrpc_connection *connection;
struct lnet_me *reply_me = NULL;
struct lnet_md reply_md;
request->rq_repmsg = NULL;
}
+ peer.pid = connection->c_peer.pid;
+ lnet_nid4_to_nid(connection->c_peer.nid, &peer.nid);
if (request->rq_bulk &&
OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_BULK_REPLY_ATTACH)) {
reply_me = ERR_PTR(-ENOMEM);
} else {
reply_me = LNetMEAttach(request->rq_reply_portal,
- connection->c_peer,
+ &peer,
rep_mbits ? request->rq_mbits :
request->rq_xid,
0, LNET_UNLINK, LNET_INS_AFTER);
int ptlrpc_register_rqbd(struct ptlrpc_request_buffer_desc *rqbd)
{
struct ptlrpc_service *service = rqbd->rqbd_svcpt->scp_service;
- static struct lnet_process_id match_id = {
- .nid = LNET_NID_ANY,
+ static struct lnet_processid match_id = {
+ .nid = LNET_ANY_NID,
.pid = LNET_PID_ANY
};
int rc;
* which means buffer can only be attached on local CPT, and LND
* threads can find it by grabbing a local lock */
me = LNetMEAttach(service->srv_req_portal,
- match_id, 0, ~0, LNET_UNLINK,
+ &match_id, 0, ~0, LNET_UNLINK,
rqbd->rqbd_svcpt->scp_cpt >= 0 ?
LNET_INS_LOCAL : LNET_INS_AFTER);
if (IS_ERR(me)) {