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

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
...@@ -894,12 +894,8 @@ static struct srp_iu *__srp_get_tx_iu(struct srp_target_port *target) ...@@ -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) if (target->tx_head - target->tx_tail >= SRP_SQ_SIZE)
return NULL; return NULL;
if (unlikely(target->req_lim < 1)) { if (unlikely(target->req_lim < 1))
if (printk_ratelimit()) ++target->zero_req_lim;
printk(KERN_DEBUG PFX "Target has req_lim %d\n",
target->req_lim);
return NULL;
}
return target->tx_ring[target->tx_head & SRP_SQ_SIZE]; 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) ...@@ -1422,11 +1418,23 @@ static ssize_t show_dgid(struct class_device *cdev, char *buf)
be16_to_cpu(((__be16 *) target->path.dgid.raw)[7])); 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(id_ext, S_IRUGO, show_id_ext, NULL);
static CLASS_DEVICE_ATTR(ioc_guid, S_IRUGO, show_ioc_guid, 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(service_id, S_IRUGO, show_service_id, NULL);
static CLASS_DEVICE_ATTR(pkey, S_IRUGO, show_pkey, 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(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[] = { static struct class_device_attribute *srp_host_attrs[] = {
&class_device_attr_id_ext, &class_device_attr_id_ext,
...@@ -1434,6 +1442,7 @@ static struct class_device_attribute *srp_host_attrs[] = { ...@@ -1434,6 +1442,7 @@ static struct class_device_attribute *srp_host_attrs[] = {
&class_device_attr_service_id, &class_device_attr_service_id,
&class_device_attr_pkey, &class_device_attr_pkey,
&class_device_attr_dgid, &class_device_attr_dgid,
&class_device_attr_zero_req_lim,
NULL NULL
}; };
......
...@@ -138,6 +138,8 @@ struct srp_target_port { ...@@ -138,6 +138,8 @@ struct srp_target_port {
int max_ti_iu_len; int max_ti_iu_len;
s32 req_lim; s32 req_lim;
int zero_req_lim;
unsigned rx_head; unsigned rx_head;
struct srp_iu *rx_ring[SRP_RQ_SIZE]; struct srp_iu *rx_ring[SRP_RQ_SIZE];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment