b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -1113,7 +1113,7 @@ static void srp_send_completion(struct ib_cq
*cq, void *target_ptr)
static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
{
struct srp_target_port *target = host_to_target(shost);
- struct srp_request *req;
+ struct srp_request *uninitialized_var(req);
struct srp_iu *iu;
struct srp_cmd *cmd;
struct ib_device *dev;
While I don't doubt that that patch has been tested properly and that it has
been carefully selected over the possible alternatives, I have been wondering
why an approach like the one below (patch has not been tested) has not been
chosen ? Not only should that patch avoid triggering a warning about the
variable 'req' not being initialized but it also eliminates an if-statement
and hence might improve performance a little.
Bart.
b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -1132,16 +1132,12 @@ static int srp_queuecommand(struct Scsi_Host
*shost, struct scsi_cmnd *scmnd)
spin_lock_irqsave(&target->lock, flags);
iu = __srp_get_tx_iu(target, SRP_IU_CMD);
- if (iu) {
- req = list_first_entry(&target->free_reqs, struct srp_request,
- list);
- list_del(&req->list);
- }
+ if (unlikely(!iu))
+ goto err_unlock;
+ req = list_first_entry(&target->free_reqs, struct srp_request, list);
+ list_del(&req->list);
spin_unlock_irqrestore(&target->lock, flags);
- if (!iu)
- goto err;
-
dev = target->srp_host->srp_dev->dev;
ib_dma_sync_single_for_cpu(dev, iu->dma, srp_max_iu_len,