Changeset 1951 for Whitix/tags

Show
Ignore:
Timestamp:
02/28/09 15:53:25 (3 years ago)
Author:
mwhitworth
Message:

Rework AtaPartitionRequest function, add shadow buffer.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • Whitix/tags/0.2b/devices/storage/ata/ata.c

    r1916 r1951  
    446446        struct Request* request=StorageGetCurrRequest(partDev); 
    447447        struct Request newRequest; 
     448        struct Buffer newBuffer; 
    448449        int err; 
    449450 
    450451        if (!request) 
    451452                return 0; 
    452  
    453 again: 
    454         if (request->sector > part->secLen) 
    455                 return -EIO; 
    456          
    457         memcpy(&newRequest, request, sizeof(struct Request)); 
    458  
    459         newRequest.sector += part->startSector; 
    460          
    461         err=BlockSendRequestRaw(part->sDev, &newRequest); 
    462  
    463         StorageEndRequest(partDev,-err); 
    464          
    465         request = StorageGetCurrRequest(partDev); 
    466          
    467         if (request) 
    468                 goto again; 
    469          
    470         return err; 
     453         
     454        do 
     455        { 
     456                if (request->sector > part->secLen) 
     457                        break; 
     458         
     459                memcpy(&newRequest, request, sizeof(struct Request)); 
     460 
     461                newRequest.sector += part->startSector; 
     462         
     463                memcpy(&newBuffer, newRequest.buffer, sizeof(struct Buffer)); 
     464                INIT_WAITQUEUE_HEAD(&newBuffer.waitQueue); 
     465                newRequest.buffer = &newBuffer; 
     466                newRequest.buffer->flags = (1 << BUFFER_LOCKED); 
     467         
     468                err = BlockSendRequestRaw(part->sDev, &newRequest); 
     469 
     470                StorageEndRequest(partDev, -err); 
     471         
     472        } while (( request = StorageGetCurrRequest(partDev) )); 
     473         
     474        return 0; 
    471475} 
    472476