MSA Storage
cancel
Showing results for 
Search instead for 
Did you mean: 

Bug in cpq_cciss-3.6.24-5.rhel5.x86_64

 
Vladymyr_Denyso
Occasional Contributor

Bug in cpq_cciss-3.6.24-5.rhel5.x86_64

Hello! There's a bug in HP storage driver for Red Hat Enterprise Linux.

Steps to reproduce:

Hardware: BL460c G6 + P700m mezzanine card + MSA2312sa with dual controllers
OS: RHEL 5.5 X64_86
Storage driver: cpq_cciss-3.6.24-5.rhel5.x86_64

The connections between P700 and MSA temporary fail When add/change/delete LUNs on MSA.
In logs we can see:
queue:0
sglist:1
sgtot:1
Tag:0x00000000/0x00000004
LUN:0x0100024001000000
CDBLen:10
Type:0
Attr:4
Dir:1
Timeout:0
CDB: 2a 00 00 01 4e a9 00 00 08 00 00 00 00 00 00 00
sgs..........Errorinfo:
scsistatus: 0x2
Sesenselen: 0x12
senseinfo 0: 0x70
senseinfo 1: 0x0
senseinfo 2: 0x6
senseinfo 3: 0x0
senseinfo 4: 0x0
senseinfo 5: 0x0
senseinfo 6: 0x0
senseinfo 7: 0xa
senseinfo 8: 0x0
senseinfo 9: 0x0
senseinfo 10: 0x0
senseinfo 11: 0x0
senseinfo 12: 0x3f
senseinfo 13: 0xe
senseinfo 14: 0x0
senseinfo 15: 0x0
senseinfo 16: 0x0
senseinfo 17: 0x0
cmd status: 0x1
resid cnt: 0x1000
offense size: 0x0
offense byte: 0x0
offense value: 0x4
device-mapper: multipath: Failing path 104:32.

After some investigating I found strange code in cciss.c in function "evaluate_target_status":


        if (cmd->err_info->ScsiStatus != RESERVATION_CONFLICT) {
                if (cmd->err_info->ScsiStatus != SAM_STAT_CHECK_CONDITION)
                if (!blk_pc_request(cmd->rq))
                        printk(KERN_WARNING "cciss: cmd %p "
                               "has SCSI Status 0x%x\n",
                               cmd, cmd->err_info->ScsiStatus);
                return error_value;
        }

this code always return IO_ERROR in error_value and never execute next code to check for unit attention.

After a litte changing in code all works fine:

        if (cmd->err_info->ScsiStatus != RESERVATION_CONFLICT) {
                if (cmd->err_info->ScsiStatus != SAM_STAT_CHECK_CONDITION) {
                         if (!blk_pc_request(cmd->rq))
                                 printk(KERN_WARNING "cciss: cmd %p "
                                        "has SCSI Status 0x%x\n",
                                        cmd, cmd->err_info->ScsiStatus);
                         return error_value;
                 }
        }