hc
2024-01-05 071106ecf68c401173c58808b1cf5f68cc50d390
kernel/drivers/infiniband/ulp/srp/ib_srp.c
....@@ -1990,12 +1990,8 @@
19901990
19911991 if (unlikely(rsp->flags & SRP_RSP_FLAG_DIUNDER))
19921992 scsi_set_resid(scmnd, be32_to_cpu(rsp->data_in_res_cnt));
1993
- else if (unlikely(rsp->flags & SRP_RSP_FLAG_DIOVER))
1994
- scsi_set_resid(scmnd, -be32_to_cpu(rsp->data_in_res_cnt));
19951993 else if (unlikely(rsp->flags & SRP_RSP_FLAG_DOUNDER))
19961994 scsi_set_resid(scmnd, be32_to_cpu(rsp->data_out_res_cnt));
1997
- else if (unlikely(rsp->flags & SRP_RSP_FLAG_DOOVER))
1998
- scsi_set_resid(scmnd, -be32_to_cpu(rsp->data_out_res_cnt));
19991995
20001996 srp_free_req(ch, req, scmnd,
20011997 be32_to_cpu(rsp->req_lim_delta));
....@@ -3397,7 +3393,8 @@
33973393 break;
33983394
33993395 case SRP_OPT_PKEY:
3400
- if (match_hex(args, &token)) {
3396
+ ret = match_hex(args, &token);
3397
+ if (ret) {
34013398 pr_warn("bad P_Key parameter '%s'\n", p);
34023399 goto out;
34033400 }
....@@ -3457,7 +3454,8 @@
34573454 break;
34583455
34593456 case SRP_OPT_MAX_SECT:
3460
- if (match_int(args, &token)) {
3457
+ ret = match_int(args, &token);
3458
+ if (ret) {
34613459 pr_warn("bad max sect parameter '%s'\n", p);
34623460 goto out;
34633461 }
....@@ -3465,8 +3463,15 @@
34653463 break;
34663464
34673465 case SRP_OPT_QUEUE_SIZE:
3468
- if (match_int(args, &token) || token < 1) {
3466
+ ret = match_int(args, &token);
3467
+ if (ret) {
3468
+ pr_warn("match_int() failed for queue_size parameter '%s', Error %d\n",
3469
+ p, ret);
3470
+ goto out;
3471
+ }
3472
+ if (token < 1) {
34693473 pr_warn("bad queue_size parameter '%s'\n", p);
3474
+ ret = -EINVAL;
34703475 goto out;
34713476 }
34723477 target->scsi_host->can_queue = token;
....@@ -3477,25 +3482,40 @@
34773482 break;
34783483
34793484 case SRP_OPT_MAX_CMD_PER_LUN:
3480
- if (match_int(args, &token) || token < 1) {
3485
+ ret = match_int(args, &token);
3486
+ if (ret) {
3487
+ pr_warn("match_int() failed for max cmd_per_lun parameter '%s', Error %d\n",
3488
+ p, ret);
3489
+ goto out;
3490
+ }
3491
+ if (token < 1) {
34813492 pr_warn("bad max cmd_per_lun parameter '%s'\n",
34823493 p);
3494
+ ret = -EINVAL;
34833495 goto out;
34843496 }
34853497 target->scsi_host->cmd_per_lun = token;
34863498 break;
34873499
34883500 case SRP_OPT_TARGET_CAN_QUEUE:
3489
- if (match_int(args, &token) || token < 1) {
3501
+ ret = match_int(args, &token);
3502
+ if (ret) {
3503
+ pr_warn("match_int() failed for max target_can_queue parameter '%s', Error %d\n",
3504
+ p, ret);
3505
+ goto out;
3506
+ }
3507
+ if (token < 1) {
34903508 pr_warn("bad max target_can_queue parameter '%s'\n",
34913509 p);
3510
+ ret = -EINVAL;
34923511 goto out;
34933512 }
34943513 target->target_can_queue = token;
34953514 break;
34963515
34973516 case SRP_OPT_IO_CLASS:
3498
- if (match_hex(args, &token)) {
3517
+ ret = match_hex(args, &token);
3518
+ if (ret) {
34993519 pr_warn("bad IO class parameter '%s'\n", p);
35003520 goto out;
35013521 }
....@@ -3504,6 +3524,7 @@
35043524 pr_warn("unknown IO class parameter value %x specified (use %x or %x).\n",
35053525 token, SRP_REV10_IB_IO_CLASS,
35063526 SRP_REV16A_IB_IO_CLASS);
3527
+ ret = -EINVAL;
35073528 goto out;
35083529 }
35093530 target->io_class = token;
....@@ -3526,16 +3547,24 @@
35263547 break;
35273548
35283549 case SRP_OPT_CMD_SG_ENTRIES:
3529
- if (match_int(args, &token) || token < 1 || token > 255) {
3550
+ ret = match_int(args, &token);
3551
+ if (ret) {
3552
+ pr_warn("match_int() failed for max cmd_sg_entries parameter '%s', Error %d\n",
3553
+ p, ret);
3554
+ goto out;
3555
+ }
3556
+ if (token < 1 || token > 255) {
35303557 pr_warn("bad max cmd_sg_entries parameter '%s'\n",
35313558 p);
3559
+ ret = -EINVAL;
35323560 goto out;
35333561 }
35343562 target->cmd_sg_cnt = token;
35353563 break;
35363564
35373565 case SRP_OPT_ALLOW_EXT_SG:
3538
- if (match_int(args, &token)) {
3566
+ ret = match_int(args, &token);
3567
+ if (ret) {
35393568 pr_warn("bad allow_ext_sg parameter '%s'\n", p);
35403569 goto out;
35413570 }
....@@ -3543,43 +3572,77 @@
35433572 break;
35443573
35453574 case SRP_OPT_SG_TABLESIZE:
3546
- if (match_int(args, &token) || token < 1 ||
3547
- token > SG_MAX_SEGMENTS) {
3575
+ ret = match_int(args, &token);
3576
+ if (ret) {
3577
+ pr_warn("match_int() failed for max sg_tablesize parameter '%s', Error %d\n",
3578
+ p, ret);
3579
+ goto out;
3580
+ }
3581
+ if (token < 1 || token > SG_MAX_SEGMENTS) {
35483582 pr_warn("bad max sg_tablesize parameter '%s'\n",
35493583 p);
3584
+ ret = -EINVAL;
35503585 goto out;
35513586 }
35523587 target->sg_tablesize = token;
35533588 break;
35543589
35553590 case SRP_OPT_COMP_VECTOR:
3556
- if (match_int(args, &token) || token < 0) {
3591
+ ret = match_int(args, &token);
3592
+ if (ret) {
3593
+ pr_warn("match_int() failed for comp_vector parameter '%s', Error %d\n",
3594
+ p, ret);
3595
+ goto out;
3596
+ }
3597
+ if (token < 0) {
35573598 pr_warn("bad comp_vector parameter '%s'\n", p);
3599
+ ret = -EINVAL;
35583600 goto out;
35593601 }
35603602 target->comp_vector = token;
35613603 break;
35623604
35633605 case SRP_OPT_TL_RETRY_COUNT:
3564
- if (match_int(args, &token) || token < 2 || token > 7) {
3606
+ ret = match_int(args, &token);
3607
+ if (ret) {
3608
+ pr_warn("match_int() failed for tl_retry_count parameter '%s', Error %d\n",
3609
+ p, ret);
3610
+ goto out;
3611
+ }
3612
+ if (token < 2 || token > 7) {
35653613 pr_warn("bad tl_retry_count parameter '%s' (must be a number between 2 and 7)\n",
35663614 p);
3615
+ ret = -EINVAL;
35673616 goto out;
35683617 }
35693618 target->tl_retry_count = token;
35703619 break;
35713620
35723621 case SRP_OPT_MAX_IT_IU_SIZE:
3573
- if (match_int(args, &token) || token < 0) {
3622
+ ret = match_int(args, &token);
3623
+ if (ret) {
3624
+ pr_warn("match_int() failed for max it_iu_size parameter '%s', Error %d\n",
3625
+ p, ret);
3626
+ goto out;
3627
+ }
3628
+ if (token < 0) {
35743629 pr_warn("bad maximum initiator to target IU size '%s'\n", p);
3630
+ ret = -EINVAL;
35753631 goto out;
35763632 }
35773633 target->max_it_iu_size = token;
35783634 break;
35793635
35803636 case SRP_OPT_CH_COUNT:
3581
- if (match_int(args, &token) || token < 1) {
3637
+ ret = match_int(args, &token);
3638
+ if (ret) {
3639
+ pr_warn("match_int() failed for channel count parameter '%s', Error %d\n",
3640
+ p, ret);
3641
+ goto out;
3642
+ }
3643
+ if (token < 1) {
35823644 pr_warn("bad channel count %s\n", p);
3645
+ ret = -EINVAL;
35833646 goto out;
35843647 }
35853648 target->ch_count = token;
....@@ -3588,6 +3651,7 @@
35883651 default:
35893652 pr_warn("unknown parameter or missing value '%s' in target creation request\n",
35903653 p);
3654
+ ret = -EINVAL;
35913655 goto out;
35923656 }
35933657 }