* The IOCache always needs a DMAResource; it was sometimes checked, and
sometimes not. * This fixes CIDs 1755-1756, and 1505-1506. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38460 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -49,6 +49,7 @@ IOCache::IOCache(DMAResource* resource, size_t cacheLineSize)
|
|||||||
fPages(NULL),
|
fPages(NULL),
|
||||||
fVecs(NULL)
|
fVecs(NULL)
|
||||||
{
|
{
|
||||||
|
ASSERT(resource != NULL);
|
||||||
TRACE("%p->IOCache::IOCache(%p, %" B_PRIuSIZE ")\n", this, resource,
|
TRACE("%p->IOCache::IOCache(%p, %" B_PRIuSIZE ")\n", this, resource,
|
||||||
cacheLineSize);
|
cacheLineSize);
|
||||||
|
|
||||||
@@ -461,8 +462,7 @@ IOCache::_TransferRequestLineUncached(IORequest* request, off_t lineOffset,
|
|||||||
// Keep the request in unfinished state. ScheduleRequest() will set
|
// Keep the request in unfinished state. ScheduleRequest() will set
|
||||||
// the final status and notify.
|
// the final status and notify.
|
||||||
|
|
||||||
if (fDMAResource != NULL)
|
fDMAResource->RecycleBuffer(operation.Buffer());
|
||||||
fDMAResource->RecycleBuffer(operation.Buffer());
|
|
||||||
|
|
||||||
if (error != B_OK) {
|
if (error != B_OK) {
|
||||||
TRACE("%p->IOCache::_TransferRequestLineUncached(): operation at "
|
TRACE("%p->IOCache::_TransferRequestLineUncached(): operation at "
|
||||||
@@ -558,8 +558,7 @@ IOCache::_TransferPages(size_t firstPage, size_t pageCount, bool isWrite,
|
|||||||
|
|
||||||
request.RemoveOperation(&operation);
|
request.RemoveOperation(&operation);
|
||||||
|
|
||||||
if (fDMAResource != NULL)
|
fDMAResource->RecycleBuffer(operation.Buffer());
|
||||||
fDMAResource->RecycleBuffer(operation.Buffer());
|
|
||||||
|
|
||||||
if (error != B_OK) {
|
if (error != B_OK) {
|
||||||
TRACE("%p->IOCache::_TransferLine(): operation at %" B_PRIdOFF
|
TRACE("%p->IOCache::_TransferLine(): operation at %" B_PRIdOFF
|
||||||
|
|||||||
Reference in New Issue
Block a user