git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
net
/
rxrpc
/
call.c
diff --git
a/net/rxrpc/call.c
b/net/rxrpc/call.c
index
f95617a
..
d07122b
100644
(file)
--- a/
net/rxrpc/call.c
+++ b/
net/rxrpc/call.c
@@
-26,10
+26,10
@@
__RXACCT_DECL(atomic_t rxrpc_message_count);
LIST_HEAD(rxrpc_calls);
DECLARE_RWSEM(rxrpc_calls_sem);
LIST_HEAD(rxrpc_calls);
DECLARE_RWSEM(rxrpc_calls_sem);
-unsigned rxrpc_call_rcv_timeout = HZ/3;
-
unsigned rxrpc_call_acks_timeout
= HZ/3;
-
unsigned rxrpc_call_dfr_ack_timeout
= HZ/20;
-
unsigned short rxrpc_call_max_resend
= HZ/10;
+unsigned rxrpc_call_rcv_timeout
= HZ/3;
+
static unsigned rxrpc_call_acks_timeout
= HZ/3;
+
static unsigned rxrpc_call_dfr_ack_timeout
= HZ/20;
+
static unsigned short rxrpc_call_max_resend
= HZ/10;
const char *rxrpc_call_states[] = {
"COMPLETE",
const char *rxrpc_call_states[] = {
"COMPLETE",
@@
-58,7
+58,7
@@
const char *rxrpc_pkts[] = {
"?09", "?10", "?11", "?12", "?13", "?14", "?15"
};
"?09", "?10", "?11", "?12", "?13", "?14", "?15"
};
-const char *rxrpc_acks[] = {
+
static
const char *rxrpc_acks[] = {
"---", "REQ", "DUP", "SEQ", "WIN", "MEM", "PNG", "PNR", "DLY", "IDL",
"-?-"
};
"---", "REQ", "DUP", "SEQ", "WIN", "MEM", "PNG", "PNR", "DLY", "IDL",
"-?-"
};
@@
-79,6
+79,9
@@
static int rxrpc_call_record_ACK(struct rxrpc_call *call,
struct rxrpc_message *msg,
rxrpc_seq_t seq,
size_t count);
struct rxrpc_message *msg,
rxrpc_seq_t seq,
size_t count);
+
+static int rxrpc_call_flush(struct rxrpc_call *call);
+
#define _state(call) \
_debug("[[[ state %s ]]]", rxrpc_call_states[call->app_call_state]);
#define _state(call) \
_debug("[[[ state %s ]]]", rxrpc_call_states[call->app_call_state]);
@@
-471,8
+474,8
@@
static inline int __rxrpc_call_gen_normal_ACK(struct rxrpc_call *call,
rxrpc_seq_t seq)
{
struct rxrpc_message *msg;
rxrpc_seq_t seq)
{
struct rxrpc_message *msg;
- struct
io
vec diov[3];
-
unsigned
aux[4];
+ struct
k
vec diov[3];
+
__be32
aux[4];
int delta, ret;
/* ACKs default to DELAY */
int delta, ret;
/* ACKs default to DELAY */
@@
-717,7
+720,7
@@
static int rxrpc_call_generate_ACK(struct rxrpc_call *call,
/* send a special ACK if one is required */
if (special_ACK) {
struct rxrpc_ackpacket ack;
/* send a special ACK if one is required */
if (special_ACK) {
struct rxrpc_ackpacket ack;
- struct
io
vec diov[2];
+ struct
k
vec diov[2];
uint8_t acks[1] = { RXRPC_ACK_TYPE_ACK };
/* fill out the appropriate form */
uint8_t acks[1] = { RXRPC_ACK_TYPE_ACK };
/* fill out the appropriate form */
@@
-838,9
+841,9
@@
static int __rxrpc_call_abort(struct rxrpc_call *call, int errno)
{
struct rxrpc_connection *conn = call->conn;
struct rxrpc_message *msg;
{
struct rxrpc_connection *conn = call->conn;
struct rxrpc_message *msg;
- struct
io
vec diov[1];
+ struct
k
vec diov[1];
int ret;
int ret;
-
u
32 _error;
+
__be
32 _error;
_enter("%p{%08x},%p{%d},%d",
conn, ntohl(conn->conn_id), call, ntohl(call->call_id), errno);
_enter("%p{%08x},%p{%d},%d",
conn, ntohl(conn->conn_id), call, ntohl(call->call_id), errno);
@@
-929,7
+932,6
@@
static void rxrpc_call_receive_packet(struct rxrpc_call *call)
{
struct rxrpc_message *msg;
struct list_head *_p;
{
struct rxrpc_message *msg;
struct list_head *_p;
- uint32_t data32;
_enter("%p", call);
_enter("%p", call);
@@
-986,22
+988,21
@@
static void rxrpc_call_receive_packet(struct rxrpc_call *call)
break;
/* deal with abort packets */
break;
/* deal with abort packets */
- case RXRPC_PACKET_TYPE_ABORT:
- data32 = 0;
- if (skb_copy_bits(msg->pkt, msg->offset,
- &data32, sizeof(data32)) < 0) {
+ case RXRPC_PACKET_TYPE_ABORT: {
+ __be32 _dbuf, *dp;
+
+ dp = skb_header_pointer(msg->pkt, msg->offset,
+ sizeof(_dbuf), &_dbuf);
+ if (dp == NULL)
printk("Rx Received short ABORT packet\n");
printk("Rx Received short ABORT packet\n");
- }
- else {
- data32 = ntohl(data32);
- }
- _proto("Rx Received Call ABORT { data=%d }", data32);
+ _proto("Rx Received Call ABORT { data=%d }",
+ (dp ? ntohl(*dp) : 0));
spin_lock(&call->lock);
call->app_call_state = RXRPC_CSTATE_ERROR;
call->app_err_state = RXRPC_ESTATE_PEER_ABORT;
spin_lock(&call->lock);
call->app_call_state = RXRPC_CSTATE_ERROR;
call->app_err_state = RXRPC_ESTATE_PEER_ABORT;
- call->app_abort_code =
data32
;
+ call->app_abort_code =
(dp ? ntohl(*dp) : 0)
;
call->app_errno = -ECONNABORTED;
call->app_mark = RXRPC_APP_MARK_EOF;
call->app_read_buf = NULL;
call->app_errno = -ECONNABORTED;
call->app_mark = RXRPC_APP_MARK_EOF;
call->app_read_buf = NULL;
@@
-1013,7
+1014,7
@@
static void rxrpc_call_receive_packet(struct rxrpc_call *call)
spin_unlock(&call->lock);
call->app_error_func(call);
break;
spin_unlock(&call->lock);
call->app_error_func(call);
break;
-
+ }
default:
/* deal with other packet types */
_proto("Rx Unsupported packet type %u (#%u)",
default:
/* deal with other packet types */
_proto("Rx Unsupported packet type %u (#%u)",
@@
-1050,7
+1051,7
@@
static void rxrpc_call_receive_data_packet(struct rxrpc_call *call,
struct rxrpc_message *pmsg;
struct list_head *_p;
int ret, lo, hi, rmtimo;
struct rxrpc_message *pmsg;
struct list_head *_p;
int ret, lo, hi, rmtimo;
-
u
32 opid;
+
__be
32 opid;
_enter("%p{%u},%p{%u}", call, ntohl(call->call_id), msg, msg->seq);
_enter("%p{%u},%p{%u}", call, ntohl(call->call_id), msg, msg->seq);
@@
-1097,8
+1098,7
@@
static void rxrpc_call_receive_data_packet(struct rxrpc_call *call,
call->app_ready_seq = pmsg->seq;
call->app_ready_qty += pmsg->dsize;
call->app_ready_seq = pmsg->seq;
call->app_ready_qty += pmsg->dsize;
- list_del_init(&pmsg->link);
- list_add_tail(&pmsg->link, &call->app_readyq);
+ list_move_tail(&pmsg->link, &call->app_readyq);
}
/* see if we've got the last packet yet */
}
/* see if we've got the last packet yet */
@@
-1271,41
+1271,42
@@
static void rxrpc_call_receive_data_packet(struct rxrpc_call *call,
static void rxrpc_call_receive_ack_packet(struct rxrpc_call *call,
struct rxrpc_message *msg)
{
static void rxrpc_call_receive_ack_packet(struct rxrpc_call *call,
struct rxrpc_message *msg)
{
- struct rxrpc_ackpacket
ack
;
- rxrpc_serial_t serial;
+ struct rxrpc_ackpacket
_ack, *ap
;
+ rxrpc_serial_
net_
t serial;
rxrpc_seq_t seq;
int ret;
_enter("%p{%u},%p{%u}", call, ntohl(call->call_id), msg, msg->seq);
/* extract the basic ACK record */
rxrpc_seq_t seq;
int ret;
_enter("%p{%u},%p{%u}", call, ntohl(call->call_id), msg, msg->seq);
/* extract the basic ACK record */
- if (skb_copy_bits(msg->pkt, msg->offset, &ack, sizeof(ack)) < 0) {
+ ap = skb_header_pointer(msg->pkt, msg->offset, sizeof(_ack), &_ack);
+ if (ap == NULL) {
printk("Rx Received short ACK packet\n");
return;
}
printk("Rx Received short ACK packet\n");
return;
}
- msg->offset += sizeof(ack);
+ msg->offset += sizeof(
_
ack);
- serial = a
ck.
serial;
- seq = ntohl(a
ck.
firstPacket);
+ serial = a
p->
serial;
+ seq = ntohl(a
p->
firstPacket);
_proto("Rx Received ACK %%%d { b=%hu m=%hu f=%u p=%u s=%u r=%s n=%u }",
ntohl(msg->hdr.serial),
_proto("Rx Received ACK %%%d { b=%hu m=%hu f=%u p=%u s=%u r=%s n=%u }",
ntohl(msg->hdr.serial),
- ntohs(a
ck.
bufferSpace),
- ntohs(a
ck.
maxSkew),
+ ntohs(a
p->
bufferSpace),
+ ntohs(a
p->
maxSkew),
seq,
seq,
- ntohl(a
ck.
previousPacket),
+ ntohl(a
p->
previousPacket),
ntohl(serial),
ntohl(serial),
- rxrpc_acks[a
ck.
reason],
+ rxrpc_acks[a
p->
reason],
call->ackr.nAcks
);
/* check the other side isn't ACK'ing a sequence number I haven't sent
* yet */
call->ackr.nAcks
);
/* check the other side isn't ACK'ing a sequence number I haven't sent
* yet */
- if (a
ck.
nAcks > 0 &&
+ if (a
p->
nAcks > 0 &&
(seq > call->snd_seq_count ||
(seq > call->snd_seq_count ||
- seq + a
ck.
nAcks - 1 > call->snd_seq_count)) {
+ seq + a
p->
nAcks - 1 > call->snd_seq_count)) {
printk("Received ACK (#%u-#%u) for unsent packet\n",
printk("Received ACK (#%u-#%u) for unsent packet\n",
- seq, seq + a
ck.
nAcks - 1);
+ seq, seq + a
p->
nAcks - 1);
rxrpc_call_abort(call, -EINVAL);
_leave("");
return;
rxrpc_call_abort(call, -EINVAL);
_leave("");
return;
@@
-1354,7
+1355,7
@@
static void rxrpc_call_receive_ack_packet(struct rxrpc_call *call,
}
}
}
}
- switch (a
ck.
reason) {
+ switch (a
p->
reason) {
/* deal with negative/positive acknowledgement of data
* packets */
case RXRPC_ACK_REQUESTED:
/* deal with negative/positive acknowledgement of data
* packets */
case RXRPC_ACK_REQUESTED:
@@
-1366,14
+1367,14
@@
static void rxrpc_call_receive_ack_packet(struct rxrpc_call *call,
case RXRPC_ACK_OUT_OF_SEQUENCE:
case RXRPC_ACK_EXCEEDS_WINDOW:
call->snd_resend_cnt = 0;
case RXRPC_ACK_OUT_OF_SEQUENCE:
case RXRPC_ACK_EXCEEDS_WINDOW:
call->snd_resend_cnt = 0;
- ret = rxrpc_call_record_ACK(call, msg, seq, a
ck.
nAcks);
+ ret = rxrpc_call_record_ACK(call, msg, seq, a
p->
nAcks);
if (ret < 0)
rxrpc_call_abort(call, ret);
break;
/* respond to ping packets immediately */
case RXRPC_ACK_PING:
if (ret < 0)
rxrpc_call_abort(call, ret);
break;
/* respond to ping packets immediately */
case RXRPC_ACK_PING:
- rxrpc_call_generate_ACK(call, &msg->hdr,
&ack
);
+ rxrpc_call_generate_ACK(call, &msg->hdr,
ap
);
break;
/* only record RTT on ping response packets */
break;
/* only record RTT on ping response packets */
@@
-1386,7
+1387,7
@@
static void rxrpc_call_receive_ack_packet(struct rxrpc_call *call,
rttmsg = NULL;
spin_lock(&call->lock);
if (call->snd_ping &&
rttmsg = NULL;
spin_lock(&call->lock);
if (call->snd_ping &&
- call->snd_ping->hdr.serial == a
ck.
serial) {
+ call->snd_ping->hdr.serial == a
p->
serial) {
rttmsg = call->snd_ping;
call->snd_ping = NULL;
}
rttmsg = call->snd_ping;
call->snd_ping = NULL;
}
@@
-1402,7
+1403,7
@@
static void rxrpc_call_receive_ack_packet(struct rxrpc_call *call,
break;
default:
break;
default:
- printk("Unsupported ACK reason %u\n", a
ck.
reason);
+ printk("Unsupported ACK reason %u\n", a
p->
reason);
break;
}
break;
}
@@
-1919,14
+1920,14
@@
int rxrpc_call_read_data(struct rxrpc_call *call,
*/
int rxrpc_call_write_data(struct rxrpc_call *call,
size_t sioc,
*/
int rxrpc_call_write_data(struct rxrpc_call *call,
size_t sioc,
- struct
iovec siov[]
,
+ struct
kvec *siov
,
u8 rxhdr_flags,
u8 rxhdr_flags,
-
in
t alloc_flags,
+
gfp_
t alloc_flags,
int dup_data,
size_t *size_sent)
{
struct rxrpc_message *msg;
int dup_data,
size_t *size_sent)
{
struct rxrpc_message *msg;
- struct
io
vec *sptr;
+ struct
k
vec *sptr;
size_t space, size, chunk, tmp;
char *buf;
int ret;
size_t space, size, chunk, tmp;
char *buf;
int ret;
@@
-2080,7
+2081,7
@@
int rxrpc_call_write_data(struct rxrpc_call *call,
/*
* flush outstanding packets to the network
*/
/*
* flush outstanding packets to the network
*/
-int rxrpc_call_flush(struct rxrpc_call *call)
+
static
int rxrpc_call_flush(struct rxrpc_call *call)
{
struct rxrpc_message *msg;
int ret = 0;
{
struct rxrpc_message *msg;
int ret = 0;