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

Commit 6bfa24fa authored by Roland Dreier's avatar Roland Dreier
Browse files

IB/srp: Get rid of "Target has req_lim 0" messages



It's perfectly valid for a connection to an SRP target to have a
request limit of 0, so get rid of the message about it, which can spam
kernel logs even with printk_ratelimit().  Keep a count of such events
in a "zero_req_lim" SCSI host attribute instead, so someone who cares
can look at the statistics.

Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent b7ac4ab4
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -894,12 +894,8 @@ static struct srp_iu *__srp_get_tx_iu(struct srp_target_port *target)
	if (target->tx_head - target->tx_tail >= SRP_SQ_SIZE)
		return NULL;

	if (unlikely(target->req_lim < 1)) {
		if (printk_ratelimit())
			printk(KERN_DEBUG PFX "Target has req_lim %d\n",
			       target->req_lim);
		return NULL;
	}
	if (unlikely(target->req_lim < 1))
		++target->zero_req_lim;

	return target->tx_ring[target->tx_head & SRP_SQ_SIZE];
}
@@ -1422,11 +1418,23 @@ static ssize_t show_dgid(struct class_device *cdev, char *buf)
		       be16_to_cpu(((__be16 *) target->path.dgid.raw)[7]));
}

static ssize_t show_zero_req_lim(struct class_device *cdev, char *buf)
{
	struct srp_target_port *target = host_to_target(class_to_shost(cdev));

	if (target->state == SRP_TARGET_DEAD ||
	    target->state == SRP_TARGET_REMOVED)
		return -ENODEV;

	return sprintf(buf, "%d\n", target->zero_req_lim);
}

static CLASS_DEVICE_ATTR(id_ext,	S_IRUGO, show_id_ext,		NULL);
static CLASS_DEVICE_ATTR(ioc_guid,	S_IRUGO, show_ioc_guid,		NULL);
static CLASS_DEVICE_ATTR(service_id,	S_IRUGO, show_service_id,	NULL);
static CLASS_DEVICE_ATTR(pkey,		S_IRUGO, show_pkey,		NULL);
static CLASS_DEVICE_ATTR(dgid,		S_IRUGO, show_dgid,		NULL);
static CLASS_DEVICE_ATTR(zero_req_lim,	S_IRUGO, show_zero_req_lim,	NULL);

static struct class_device_attribute *srp_host_attrs[] = {
	&class_device_attr_id_ext,
@@ -1434,6 +1442,7 @@ static struct class_device_attribute *srp_host_attrs[] = {
	&class_device_attr_service_id,
	&class_device_attr_pkey,
	&class_device_attr_dgid,
	&class_device_attr_zero_req_lim,
	NULL
};

+2 −0
Original line number Diff line number Diff line
@@ -138,6 +138,8 @@ struct srp_target_port {
	int			max_ti_iu_len;
	s32			req_lim;

	int			zero_req_lim;

	unsigned		rx_head;
	struct srp_iu	       *rx_ring[SRP_RQ_SIZE];