VirtualBox

Changeset 29213 in vbox


Ignore:
Timestamp:
May 7, 2010 1:56:43 PM (15 years ago)
Author:
vboxsync
Message:

DrvSCSI: Fix crash when an error occurs and print errors in the release log

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/DrvSCSI.cpp

    r29049 r29213  
    3333
    3434#include "Builtins.h"
     35
     36/** The maximum number of release log entries per device. */
     37#define MAX_LOG_REL_ERRORS  1024
    3538
    3639/**
     
    98101    /** Release statistics: Current I/O depth. */
    99102    volatile uint32_t       StatIoDepth;
     103    /** Errors printed in the release log. */
     104    unsigned                cErrors;
    100105} DRVSCSI, *PDRVSCSI;
    101106
     
    231236            {
    232237                rc = pThis->pDrvBlockAsync->pfnStartFlush(pThis->pDrvBlockAsync, hVScsiIoReq);
    233                 if (RT_FAILURE(rc) && rc != VERR_VD_ASYNC_IO_IN_PROGRESS)
    234                     AssertMsgFailed(("%s: Failed to flush data %Rrc\n", __FUNCTION__, rc));
     238                if (   RT_FAILURE(rc)
     239                    && rc != VERR_VD_ASYNC_IO_IN_PROGRESS
     240                    && pThis->cErrors++ < MAX_LOG_REL_ERRORS)
     241                    LogRel(("SCSI#%u: Flush returned rc=%Rrc\n",
     242                            pThis->pDrvIns->iInstance, rc));
    235243                break;
    236244            }
     
    254262                                                             paSeg, cSeg, cbTransfer,
    255263                                                             hVScsiIoReq);
    256                     if (RT_FAILURE(rc) && rc != VERR_VD_ASYNC_IO_IN_PROGRESS)
    257                         AssertMsgFailed(("%s: Failed to read data %Rrc\n", __FUNCTION__, rc));
    258264                    STAM_REL_COUNTER_ADD(&pThis->StatBytesRead, cbTransfer);
    259265                }
     
    264270                                                              paSeg, cSeg, cbTransfer,
    265271                                                              hVScsiIoReq);
    266                     if (RT_FAILURE(rc) && rc != VERR_VD_ASYNC_IO_IN_PROGRESS)
    267                         AssertMsgFailed(("%s: Failed to write data %Rrc\n", __FUNCTION__, rc));
    268272                    STAM_REL_COUNTER_ADD(&pThis->StatBytesWritten, cbTransfer);
    269273                }
    270274
     275                if (   RT_FAILURE(rc)
     276                    && rc != VERR_VD_ASYNC_IO_IN_PROGRESS
     277                    && pThis->cErrors++ < MAX_LOG_REL_ERRORS)
     278                    LogRel(("SCSI#%u: %s at offset %llu (%u bytes left) returned rc=%Rrc\n",
     279                            pThis->pDrvIns->iInstance,
     280                            enmTxDir == VSCSIIOREQTXDIR_READ
     281                            ? "Read"
     282                            : "Write",
     283                            uOffset,
     284                            cbTransfer, rc));
    271285                break;
    272286            }
     
    300314            ASMAtomicDecU32(&pThis->StatIoDepth);
    301315            VSCSIIoReqCompleted(hVScsiIoReq, rc);
     316            rc = VINF_SUCCESS;
    302317        }
    303318        else
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette