Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 11740ef4 authored by Andy Grover's avatar Andy Grover Committed by David S. Miller
Browse files

rds: check for excessive looping in rds_send_xmit



Original commit from 2011 updated to include a change by
Yuval Shaia <yuval.shaia@oracle.com>
that adds a new statistic counter "send_stuck_rm"
to capture the messages looping exessively
in the send path.

Signed-off-by: default avatarGerd Rausch <gerd.rausch@oracle.com>
Acked-by: default avatarSantosh Shilimkar <santosh.shilimkar@oracle.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 55c70ca0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -717,7 +717,7 @@ struct rds_statistics {
	uint64_t	s_cong_send_blocked;
	uint64_t	s_recv_bytes_added_to_socket;
	uint64_t	s_recv_bytes_removed_from_socket;

	uint64_t	s_send_stuck_rm;
};

/* af_rds.c */
+12 −0
Original line number Diff line number Diff line
@@ -145,6 +145,7 @@ int rds_send_xmit(struct rds_conn_path *cp)
	LIST_HEAD(to_be_dropped);
	int batch_count;
	unsigned long send_gen = 0;
	int same_rm = 0;

restart:
	batch_count = 0;
@@ -200,6 +201,17 @@ int rds_send_xmit(struct rds_conn_path *cp)

		rm = cp->cp_xmit_rm;

		if (!rm) {
			same_rm = 0;
		} else {
			same_rm++;
			if (same_rm >= 4096) {
				rds_stats_inc(s_send_stuck_rm);
				ret = -EAGAIN;
				break;
			}
		}

		/*
		 * If between sending messages, we can send a pending congestion
		 * map update.
+1 −0
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@ static const char *const rds_stat_names[] = {
	"cong_send_blocked",
	"recv_bytes_added_to_sock",
	"recv_bytes_freed_fromsock",
	"send_stuck_rm",
};

void rds_stats_info_copy(struct rds_info_iterator *iter,