projects
/
cascardo
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
RDS: use rds_send_xmit() state instead of RDS_LL_SEND_FULL
[cascardo/linux.git]
/
net
/
rds
/
send.c
diff --git
a/net/rds/send.c
b/net/rds/send.c
index
4df61a5
..
a081a64
100644
(file)
--- a/
net/rds/send.c
+++ b/
net/rds/send.c
@@
-38,6
+38,7
@@
#include <linux/list.h>
#include <linux/ratelimit.h>
#include <linux/export.h>
#include <linux/list.h>
#include <linux/ratelimit.h>
#include <linux/export.h>
+#include <linux/sizes.h>
#include "rds.h"
#include "rds.h"
@@
-51,7
+52,7
@@
* it to 0 will restore the old behavior (where we looped until we had
* drained the queue).
*/
* it to 0 will restore the old behavior (where we looped until we had
* drained the queue).
*/
-static int send_batch_count =
64
;
+static int send_batch_count =
SZ_1K
;
module_param(send_batch_count, int, 0444);
MODULE_PARM_DESC(send_batch_count, " batch factor when working the send queue");
module_param(send_batch_count, int, 0444);
MODULE_PARM_DESC(send_batch_count, " batch factor when working the send queue");
@@
-223,7
+224,7
@@
restart:
* through a lot of messages, lets back off and see
* if anyone else jumps in
*/
* through a lot of messages, lets back off and see
* if anyone else jumps in
*/
- if (batch_count >=
1024
)
+ if (batch_count >=
send_batch_count
)
goto over_batch;
spin_lock_irqsave(&conn->c_lock, flags);
goto over_batch;
spin_lock_irqsave(&conn->c_lock, flags);
@@
-423,7
+424,9
@@
over_batch:
!list_empty(&conn->c_send_queue)) &&
send_gen == conn->c_send_gen) {
rds_stats_inc(s_send_lock_queue_raced);
!list_empty(&conn->c_send_queue)) &&
send_gen == conn->c_send_gen) {
rds_stats_inc(s_send_lock_queue_raced);
- goto restart;
+ if (batch_count < send_batch_count)
+ goto restart;
+ queue_delayed_work(rds_wq, &conn->c_send_w, 1);
}
}
out:
}
}
out:
@@
-1120,8
+1123,9
@@
int rds_sendmsg(struct socket *sock, struct msghdr *msg, size_t payload_len)
*/
rds_stats_inc(s_send_queued);
*/
rds_stats_inc(s_send_queued);
- if (!test_bit(RDS_LL_SEND_FULL, &conn->c_flags))
- rds_send_xmit(conn);
+ ret = rds_send_xmit(conn);
+ if (ret == -ENOMEM || ret == -EAGAIN)
+ queue_delayed_work(rds_wq, &conn->c_send_w, 1);
rds_message_put(rm);
return payload_len;
rds_message_put(rm);
return payload_len;
@@
-1177,8
+1181,9
@@
rds_send_pong(struct rds_connection *conn, __be16 dport)
rds_stats_inc(s_send_queued);
rds_stats_inc(s_send_pong);
rds_stats_inc(s_send_queued);
rds_stats_inc(s_send_pong);
- if (!test_bit(RDS_LL_SEND_FULL, &conn->c_flags))
- queue_delayed_work(rds_wq, &conn->c_send_w, 0);
+ ret = rds_send_xmit(conn);
+ if (ret == -ENOMEM || ret == -EAGAIN)
+ queue_delayed_work(rds_wq, &conn->c_send_w, 1);
rds_message_put(rm);
return 0;
rds_message_put(rm);
return 0;