|
@@ -38,6 +38,7 @@
|
|
|
#include <linux/list.h>
|
|
|
#include <linux/ratelimit.h>
|
|
|
#include <linux/export.h>
|
|
|
+#include <linux/sizes.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).
|
|
|
*/
|
|
|
-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");
|
|
|
|
|
@@ -223,7 +224,7 @@ restart:
|
|
|
* 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);
|
|
@@ -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);
|
|
|
- goto restart;
|
|
|
+ if (batch_count < send_batch_count)
|
|
|
+ goto restart;
|
|
|
+ queue_delayed_work(rds_wq, &conn->c_send_w, 1);
|
|
|
}
|
|
|
}
|
|
|
out:
|