diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 15:20:36 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 15:20:36 -0700 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /include/rxrpc/message.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'include/rxrpc/message.h')
-rw-r--r-- | include/rxrpc/message.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/include/rxrpc/message.h b/include/rxrpc/message.h new file mode 100644 index 00000000000..3a59df6870b --- /dev/null +++ b/include/rxrpc/message.h @@ -0,0 +1,71 @@ +/* message.h: Rx message caching + * + * Copyright (C) 2002 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ + +#ifndef _LINUX_RXRPC_MESSAGE_H +#define _LINUX_RXRPC_MESSAGE_H + +#include <rxrpc/packet.h> + +/*****************************************************************************/ +/* + * Rx message record + */ +struct rxrpc_message +{ + atomic_t usage; + struct list_head link; /* list link */ + struct timeval stamp; /* time received or last sent */ + rxrpc_seq_t seq; /* message sequence number */ + + int state; /* the state the message is currently in */ +#define RXRPC_MSG_PREPARED 0 +#define RXRPC_MSG_SENT 1 +#define RXRPC_MSG_ACKED 2 /* provisionally ACK'd */ +#define RXRPC_MSG_DONE 3 /* definitively ACK'd (msg->seq<ack.firstPacket) */ +#define RXRPC_MSG_RECEIVED 4 +#define RXRPC_MSG_ERROR -1 + char rttdone; /* used for RTT */ + + struct rxrpc_transport *trans; /* transport received through */ + struct rxrpc_connection *conn; /* connection received over */ + struct sk_buff *pkt; /* received packet */ + off_t offset; /* offset into pkt of next byte of data */ + + struct rxrpc_header hdr; /* message header */ + + int dcount; /* data part count */ + size_t dsize; /* data size */ +#define RXRPC_MSG_MAX_IOCS 8 + struct kvec data[RXRPC_MSG_MAX_IOCS]; /* message data */ + unsigned long dfree; /* bit mask indicating kfree(data[x]) if T */ +}; + +#define rxrpc_get_message(M) do { atomic_inc(&(M)->usage); } while(0) + +extern void __rxrpc_put_message(struct rxrpc_message *msg); +static inline void rxrpc_put_message(struct rxrpc_message *msg) +{ + BUG_ON(atomic_read(&msg->usage)<=0); + if (atomic_dec_and_test(&msg->usage)) + __rxrpc_put_message(msg); +} + +extern int rxrpc_conn_newmsg(struct rxrpc_connection *conn, + struct rxrpc_call *call, + uint8_t type, + int count, + struct kvec *diov, + int alloc_flags, + struct rxrpc_message **_msg); + +extern int rxrpc_conn_sendmsg(struct rxrpc_connection *conn, struct rxrpc_message *msg); + +#endif /* _LINUX_RXRPC_MESSAGE_H */ |