| 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; |