diff options
Diffstat (limited to 'drivers/scsi/aacraid/commctrl.c')
-rw-r--r-- | drivers/scsi/aacraid/commctrl.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/scsi/aacraid/commctrl.c b/drivers/scsi/aacraid/commctrl.c index fc268a410c27..1fef92d55dee 100644 --- a/drivers/scsi/aacraid/commctrl.c +++ b/drivers/scsi/aacraid/commctrl.c | |||
@@ -451,7 +451,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
451 | * Allocate and initialize a Fib then setup a BlockWrite command | 451 | * Allocate and initialize a Fib then setup a BlockWrite command |
452 | */ | 452 | */ |
453 | if (!(srbfib = fib_alloc(dev))) { | 453 | if (!(srbfib = fib_alloc(dev))) { |
454 | return -1; | 454 | return -ENOMEM; |
455 | } | 455 | } |
456 | fib_init(srbfib); | 456 | fib_init(srbfib); |
457 | 457 | ||
@@ -490,10 +490,11 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
490 | srbcmd->channel = cpu_to_le32(user_srbcmd->channel); | 490 | srbcmd->channel = cpu_to_le32(user_srbcmd->channel); |
491 | srbcmd->id = cpu_to_le32(user_srbcmd->id); | 491 | srbcmd->id = cpu_to_le32(user_srbcmd->id); |
492 | srbcmd->lun = cpu_to_le32(user_srbcmd->lun); | 492 | srbcmd->lun = cpu_to_le32(user_srbcmd->lun); |
493 | srbcmd->flags = cpu_to_le32(flags); | ||
494 | srbcmd->timeout = cpu_to_le32(user_srbcmd->timeout); | 493 | srbcmd->timeout = cpu_to_le32(user_srbcmd->timeout); |
495 | srbcmd->retry_limit =cpu_to_le32(0); // Obsolete parameter | 494 | srbcmd->flags = cpu_to_le32(flags); |
495 | srbcmd->retry_limit = 0; // Obsolete parameter | ||
496 | srbcmd->cdb_size = cpu_to_le32(user_srbcmd->cdb_size); | 496 | srbcmd->cdb_size = cpu_to_le32(user_srbcmd->cdb_size); |
497 | memcpy(srbcmd->cdb, user_srbcmd->cdb, sizeof(srbcmd->cdb)); | ||
497 | 498 | ||
498 | switch (flags & (SRB_DataIn | SRB_DataOut)) { | 499 | switch (flags & (SRB_DataIn | SRB_DataOut)) { |
499 | case SRB_DataOut: | 500 | case SRB_DataOut: |
@@ -508,7 +509,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
508 | default: | 509 | default: |
509 | data_dir = DMA_NONE; | 510 | data_dir = DMA_NONE; |
510 | } | 511 | } |
511 | if (le32_to_cpu(srbcmd->sg.count) > (sizeof(sg_list)/sizeof(sg_list[0]))) { | 512 | if (user_srbcmd->sg.count > (sizeof(sg_list)/sizeof(sg_list[0]))) { |
512 | dprintk((KERN_DEBUG"aacraid: too many sg entries %d\n", | 513 | dprintk((KERN_DEBUG"aacraid: too many sg entries %d\n", |
513 | le32_to_cpu(srbcmd->sg.count))); | 514 | le32_to_cpu(srbcmd->sg.count))); |
514 | rcode = -EINVAL; | 515 | rcode = -EINVAL; |
@@ -592,7 +593,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
592 | struct sgmap* psg = &srbcmd->sg; | 593 | struct sgmap* psg = &srbcmd->sg; |
593 | byte_count = 0; | 594 | byte_count = 0; |
594 | 595 | ||
595 | actual_fibsize = sizeof (struct aac_srb) + (((le32_to_cpu(srbcmd->sg.count) & 0xff) - 1) * sizeof (struct sgentry)); | 596 | actual_fibsize = sizeof (struct aac_srb) + (((user_srbcmd->sg.count & 0xff) - 1) * sizeof (struct sgentry)); |
596 | if(actual_fibsize != fibsize){ // User made a mistake - should not continue | 597 | if(actual_fibsize != fibsize){ // User made a mistake - should not continue |
597 | dprintk((KERN_DEBUG"aacraid: Bad Size specified in Raw SRB command\n")); | 598 | dprintk((KERN_DEBUG"aacraid: Bad Size specified in Raw SRB command\n")); |
598 | rcode = -EINVAL; | 599 | rcode = -EINVAL; |
@@ -639,7 +640,7 @@ static int aac_send_raw_srb(struct aac_dev* dev, void __user * arg) | |||
639 | 640 | ||
640 | if (status != 0){ | 641 | if (status != 0){ |
641 | dprintk((KERN_DEBUG"aacraid: Could not send raw srb fib to hba\n")); | 642 | dprintk((KERN_DEBUG"aacraid: Could not send raw srb fib to hba\n")); |
642 | rcode = -1; | 643 | rcode = -ENXIO; |
643 | goto cleanup; | 644 | goto cleanup; |
644 | } | 645 | } |
645 | 646 | ||