X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Flnet%2Flib-msg.c;h=4ab5fa4d8418d50f3571e7199e0e2b05575f5c18;hb=8d8d0f2cacd5769a2e324fbd37f5a0674748621f;hp=c46ad1a4c6a4ccad7b89113484d492e87a09ec70;hpb=977211ac514d75a3fd1af73f9655783ada7fe309;p=fs%2Flustre-release.git diff --git a/lnet/lnet/lib-msg.c b/lnet/lnet/lib-msg.c index c46ad1a..4ab5fa4 100644 --- a/lnet/lnet/lib-msg.c +++ b/lnet/lnet/lib-msg.c @@ -1,25 +1,41 @@ /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=8:tabstop=8: * - * lib/lib-msg.c - * Message decoding, parsing and finalizing routines + * GPL HEADER START + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (c) 2001-2003 Cluster File Systems, Inc. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. * - * This file is part of Lustre, http://www.lustre.org + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). * - * Lustre is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * - * Lustre is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. * - * You should have received a copy of the GNU General Public License - * along with Lustre; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * GPL HEADER END + */ +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. + * + * lnet/lnet/lib-msg.c + * + * Message decoding, parsing and finalizing routines */ #define DEBUG_SUBSYSTEM S_LNET @@ -27,6 +43,21 @@ #include void +lnet_build_unlink_event (lnet_libmd_t *md, lnet_event_t *ev) +{ + ENTRY; + + memset(ev, 0, sizeof(*ev)); + + ev->status = 0; + ev->unlinked = 1; + ev->type = LNET_EVENT_UNLINK; + lnet_md_deconstruct(md, &ev->md); + lnet_md2handle(&ev->md_handle, md); + EXIT; +} + +void lnet_enq_event_locked (lnet_eq_t *eq, lnet_event_t *ev) { lnet_event_t *eq_slot; @@ -41,7 +72,7 @@ lnet_enq_event_locked (lnet_eq_t *eq, lnet_event_t *ev) /* There is no race since both event consumers and event producers * take the LNET_LOCK, so we don't screw around with memory - * barriers, setting the sequence number last or wierd structure + * barriers, setting the sequence number last or weird structure * layout assertions. */ *eq_slot = *ev; @@ -79,18 +110,18 @@ lnet_complete_msg_locked(lnet_msg_t *msg) msg->msg_ack = 0; LNET_UNLOCK(); - + LASSERT(msg->msg_ev.type == LNET_EVENT_PUT); LASSERT(!msg->msg_routing); ack_wmd = msg->msg_hdr.msg.put.ack_wmd; - + lnet_prep_send(msg, LNET_MSG_ACK, msg->msg_ev.initiator, 0, 0); msg->msg_hdr.msg.ack.dst_wmd = ack_wmd; msg->msg_hdr.msg.ack.match_bits = msg->msg_ev.match_bits; msg->msg_hdr.msg.ack.mlength = cpu_to_le32(msg->msg_ev.mlength); - + rc = lnet_send(msg->msg_ev.target.nid, msg); LNET_LOCK(); @@ -116,7 +147,7 @@ lnet_complete_msg_locked(lnet_msg_t *msg) LASSERT (msg->msg_onactivelist); msg->msg_onactivelist = 0; - list_del (&msg->msg_activelist); + cfs_list_del (&msg->msg_activelist); the_lnet.ln_counters.msgs_alloc--; lnet_msg_free(msg); } @@ -131,7 +162,7 @@ lnet_finalize (lnet_ni_t *ni, lnet_msg_t *msg, int status) #endif lnet_libmd_t *md; - LASSERT (!in_interrupt ()); + LASSERT (!cfs_in_interrupt ()); if (msg == NULL) return; @@ -167,19 +198,19 @@ lnet_finalize (lnet_ni_t *ni, lnet_msg_t *msg, int status) LASSERT (md->md_refcount >= 0); unlink = lnet_md_unlinkable(md); - + msg->msg_ev.unlinked = unlink; - + if (md->md_eq != NULL) lnet_enq_event_locked(md->md_eq, &msg->msg_ev); - + if (unlink) lnet_md_unlink(md); msg->msg_md = NULL; } - list_add_tail (&msg->msg_list, &the_lnet.ln_finalizeq); + cfs_list_add_tail (&msg->msg_list, &the_lnet.ln_finalizeq); /* Recursion breaker. Don't complete the message here if I am (or * enough other threads are) already completing messages */ @@ -203,11 +234,11 @@ lnet_finalize (lnet_ni_t *ni, lnet_msg_t *msg, int status) the_lnet.ln_finalizing = 1; #endif - while (!list_empty(&the_lnet.ln_finalizeq)) { - msg = list_entry(the_lnet.ln_finalizeq.next, - lnet_msg_t, msg_list); - - list_del(&msg->msg_list); + while (!cfs_list_empty(&the_lnet.ln_finalizeq)) { + msg = cfs_list_entry(the_lnet.ln_finalizeq.next, + lnet_msg_t, msg_list); + + cfs_list_del(&msg->msg_list); /* NB drops and regains the lnet lock if it actually does * anything, so my finalizing friends can chomp along too */ @@ -223,4 +254,3 @@ lnet_finalize (lnet_ni_t *ni, lnet_msg_t *msg, int status) out: LNET_UNLOCK(); } -