Index: mps.c =================================================================== --- mps.c (revision 306014) +++ mps.c (working copy) @@ -989,8 +989,8 @@ { MPI2_DEFAULT_REPLY *reply; MPI2_IOC_FACTS_REQUEST request; - int error, req_sz, reply_sz; - + int error, req_sz, reply_sz, retry = 0; + MPS_FUNCTRACE(sc); req_sz = sizeof(MPI2_IOC_FACTS_REQUEST); @@ -999,8 +999,13 @@ bzero(&request, req_sz); request.Function = MPI2_FUNCTION_IOC_FACTS; - error = mps_request_sync(sc, &request, reply, req_sz, reply_sz, 5); - + while(retry < 5){ + error = mps_request_sync(sc, &request, reply, req_sz, reply_sz, 5); + if(!error) + break; + mps_dprint(sc, MPS_FAULT, "mps_request_sync failed retry %d\n",retry); + retry++; + } return (error); } @@ -1009,7 +1014,7 @@ { MPI2_IOC_INIT_REQUEST init; MPI2_DEFAULT_REPLY reply; - int req_sz, reply_sz, error; + int req_sz, reply_sz, error, retry = 0; struct timeval now; uint64_t time_in_msec; @@ -1044,11 +1049,16 @@ time_in_msec = (now.tv_sec * 1000 + now.tv_usec/1000); init.TimeStamp.High = htole32((time_in_msec >> 32) & 0xFFFFFFFF); init.TimeStamp.Low = htole32(time_in_msec & 0xFFFFFFFF); + while(retry < 5){ + error = mps_request_sync(sc, &init, &reply, req_sz, reply_sz, 5); + if ((reply.IOCStatus & MPI2_IOCSTATUS_MASK) != MPI2_IOCSTATUS_SUCCESS) + error = ENXIO; + if(!error) + break; + mps_dprint(sc, MPS_FAULT, "mps_request_sync failed retry %d\n",retry); + retry++; + } - error = mps_request_sync(sc, &init, &reply, req_sz, reply_sz, 5); - if ((reply.IOCStatus & MPI2_IOCSTATUS_MASK) != MPI2_IOCSTATUS_SUCCESS) - error = ENXIO; - mps_dprint(sc, MPS_INIT, "IOCInit status= 0x%x\n", reply.IOCStatus); return (error); }