37 AIODiskFile::AIODiskFile(
char const *aPath, AIODiskIOStrategy *aStrategy) : fd(-1), closed(true), error_(false)
42 debugs(79, 3,
"AIODiskFile::AIODiskFile: " << aPath);
45 AIODiskFile::~AIODiskFile()
59 fd = aio_open(path.termedBuf(), flags);
64 ioRequestor = callback;
67 debugs(79, 3,
"got failure (" << errno <<
")");
72 debugs(79, 3,
"opened FD " << fd);
82 open(flags, mode, callback);
89 async_queue_entry_t *qe;
91 assert(strategy->aq.aq_state == AQ_STATE_SETUP);
94 slot = strategy->findSlot();
98 fatal(
"Aiee! out of aiocb slots! - TODO fix and wrap file_read\n");
106 qe = &strategy->aq.aq_queue[slot];
108 qe->aq_e_state = AQ_ENTRY_USED;
114 qe->aq_e_type = AQ_ENTRY_READ;
116 qe->aq_e_free =
nullptr;
118 qe->aq_e_buf = request->
buf;
120 qe->aq_e_fd = getFD();
122 qe->aq_e_aiocb.aio_fildes = getFD();
124 qe->aq_e_aiocb.aio_nbytes = request->
len;
126 qe->aq_e_aiocb.aio_offset = request->
offset;
128 qe->aq_e_aiocb.aio_buf = request->
buf;
131 ++ strategy->aq.aq_numpending;
134 if (aio_read(&qe->aq_e_aiocb) < 0) {
136 fatalf(
"Aiee! aio_read() returned error (%d) TODO fix and wrap file_read !\n", xerrno);
148 async_queue_entry_t *qe;
150 assert(strategy->aq.aq_state == AQ_STATE_SETUP);
153 slot = strategy->findSlot();
157 fatal(
"Aiee! out of aiocb slots TODO fix and wrap file_write !\n");
165 qe = &strategy->aq.aq_queue[slot];
167 qe->aq_e_state = AQ_ENTRY_USED;
173 qe->aq_e_type = AQ_ENTRY_WRITE;
177 qe->aq_e_buf = (
void *)request->
buf;
181 qe->aq_e_aiocb.aio_fildes = fd;
183 qe->aq_e_aiocb.aio_nbytes = request->
len;
185 qe->aq_e_aiocb.aio_offset = request->
offset;
187 qe->aq_e_aiocb.aio_buf = (
void *)request->
buf;
190 ++strategy->aq.aq_numpending;
193 if (aio_write(&qe->aq_e_aiocb) < 0) {
195 fatalf(
"Aiee! aio_write() returned error (%d) TODO fix and wrap file_write !\n", xerrno);
203 AIODiskFile::close ()
214 assert (ioRequestor !=
nullptr);
215 ioRequestor->closeCompleted();
219 AIODiskFile::canRead()
const
225 AIODiskFile::canWrite()
const
231 AIODiskFile::getFD()
const
243 AIODiskFile::ioInProgress()
const