Disable flushing if the device doesn't support it or if it isn't enabled. Modified: trunk/reactos/drivers/storage/atapi/atapi.c _____
Modified: trunk/reactos/drivers/storage/atapi/atapi.c --- trunk/reactos/drivers/storage/atapi/atapi.c 2005-09-28 18:56:01 UTC (rev 18138) +++ trunk/reactos/drivers/storage/atapi/atapi.c 2005-09-28 19:34:07 UTC (rev 18139) @@ -1171,6 +1171,11 @@
DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_DMA_CMD; } #endif + if (!(DeviceExtension->DeviceParams[UnitNumber].SupportedFeatures83 & 0x1000) || + !(DeviceExtension->DeviceParams[UnitNumber].EnabledFeatures86 & 0x1000)) + { + DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_NO_FLUSH; + } DeviceFound = TRUE; } else @@ -1212,6 +1217,22 @@ DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_DMA_CMD; } #endif + if (DeviceExtension->DeviceFlags[UnitNumber] & DEVICE_48BIT_ADDRESS) + { + if (!(DeviceExtension->DeviceParams[UnitNumber].SupportedFeatures83 & 0x2000) || + !(DeviceExtension->DeviceParams[UnitNumber].EnabledFeatures86 & 0x2000)) + { + DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_NO_FLUSH; + } + } + else + { + if (!(DeviceExtension->DeviceParams[UnitNumber].SupportedFeatures83 & 0x1000) || + !(DeviceExtension->DeviceParams[UnitNumber].EnabledFeatures86 & 0x1000)) + { + DeviceExtension->DeviceFlags[UnitNumber] |= DEVICE_NO_FLUSH; + } + } DeviceFound = TRUE; } else @@ -2311,12 +2332,8 @@ * it doesn't make sense to flush cache on devices we don't * write to. */ - return SRB_STATUS_INVALID_REQUEST; - } - - if (!(DeviceExtension->DeviceParams[Srb->TargetId].SupportedFeatures83 & 0x1000)) - { - /* The device states it doesn't support the command */ + + /* The device states it doesn't support the command or it is disabled */ DPRINT("The drive doesn't support FLUSH_CACHE\n"); return SRB_STATUS_INVALID_REQUEST; }