Exemplo n.º 1
0
/**
 * Notify virtual SCSI LUN of media being unmounted.
 *
 * @returns VBox status code.
 * @param   hVScsiLun               The virtual SCSI LUN 
 *                                  mounting the medium.
 */
VBOXDDU_DECL(int) VSCSILunUnmountNotify(VSCSILUN hVScsiLun)
{
    PVSCSILUNINT pVScsiLun = (PVSCSILUNINT)hVScsiLun;

    LogFlowFunc(("hVScsiLun=%p\n", hVScsiLun));
    AssertPtrReturn(pVScsiLun, VERR_INVALID_HANDLE);
    AssertReturn(vscsiIoReqOutstandingCountGet(pVScsiLun) == 0, VERR_VSCSI_LUN_BUSY);

    pVScsiLun->fReady        = false;
    pVScsiLun->fMediaPresent = false;

    return VINF_SUCCESS;
}
Exemplo n.º 2
0
/**
 * Notify virtual SCSI LUN of media being mounted.
 *
 * @returns VBox status code.
 * @param   hVScsiLun               The virtual SCSI LUN 
 *                                  mounting the medium.
 */
VBOXDDU_DECL(int) VSCSILunMountNotify(VSCSILUN hVScsiLun)
{
    PVSCSILUNINT pVScsiLun = (PVSCSILUNINT)hVScsiLun;

    LogFlowFunc(("hVScsiLun=%p\n", hVScsiLun));
    AssertPtrReturn(pVScsiLun, VERR_INVALID_HANDLE);
    AssertReturn(vscsiIoReqOutstandingCountGet(pVScsiLun) == 0, VERR_VSCSI_LUN_BUSY);

    /* Mark the LUN as not ready so that LUN specific code can do its job. */
    pVScsiLun->fReady        = false;
    pVScsiLun->fMediaPresent = true;

    return VINF_SUCCESS;
}
/**
 * Destroy virtual SCSI LUN.
 *
 * @returns VBox status code.
 * @param   hVScsiLun               The virtual SCSI LUN handle to destroy.
 */
VBOXDDU_DECL(int) VSCSILunDestroy(VSCSILUN hVScsiLun)
{
    PVSCSILUNINT pVScsiLun = (PVSCSILUNINT)hVScsiLun;

    AssertPtrReturn(pVScsiLun, VERR_INVALID_HANDLE);
    AssertReturn(!pVScsiLun->pVScsiDevice, VERR_VSCSI_LUN_ATTACHED_TO_DEVICE);
    AssertReturn(vscsiIoReqOutstandingCountGet(pVScsiLun) == 0, VERR_VSCSI_LUN_BUSY);

    int rc = pVScsiLun->pVScsiLunDesc->pfnVScsiLunDestroy(pVScsiLun);
    if (RT_FAILURE(rc))
        return rc;

    /* Make LUN invalid */
    pVScsiLun->pvVScsiLunUser       = NULL;
    pVScsiLun->pVScsiLunIoCallbacks = NULL;
    pVScsiLun->pVScsiLunDesc        = NULL;

    RTMemFree(pVScsiLun);

    return VINF_SUCCESS;
}