Lines Matching refs:rbd
106 struct rbd_data *rbd; in _fio_setup_rbd_data() local
111 rbd = calloc(1, sizeof(struct rbd_data)); in _fio_setup_rbd_data()
112 if (!rbd) in _fio_setup_rbd_data()
115 rbd->connected = false; in _fio_setup_rbd_data()
118 rbd->fd = -1; in _fio_setup_rbd_data()
120 rbd->aio_events = calloc(td->o.iodepth, sizeof(struct io_u *)); in _fio_setup_rbd_data()
121 if (!rbd->aio_events) in _fio_setup_rbd_data()
124 rbd->sort_events = calloc(td->o.iodepth, sizeof(struct io_u *)); in _fio_setup_rbd_data()
125 if (!rbd->sort_events) in _fio_setup_rbd_data()
128 *rbd_data_ptr = rbd; in _fio_setup_rbd_data()
132 if (rbd) { in _fio_setup_rbd_data()
133 if (rbd->aio_events) in _fio_setup_rbd_data()
134 free(rbd->aio_events); in _fio_setup_rbd_data()
135 if (rbd->sort_events) in _fio_setup_rbd_data()
136 free(rbd->sort_events); in _fio_setup_rbd_data()
137 free(rbd); in _fio_setup_rbd_data()
144 static bool _fio_rbd_setup_poll(struct rbd_data *rbd) in _fio_rbd_setup_poll() argument
149 rbd->fd = eventfd(0, EFD_NONBLOCK); in _fio_rbd_setup_poll()
150 if (rbd->fd < 0) { in _fio_rbd_setup_poll()
155 r = rbd_set_image_notification(rbd->image, rbd->fd, EVENT_TYPE_EVENTFD); in _fio_rbd_setup_poll()
158 close(rbd->fd); in _fio_rbd_setup_poll()
159 rbd->fd = -1; in _fio_rbd_setup_poll()
166 static bool _fio_rbd_setup_poll(struct rbd_data *rbd) in _fio_rbd_setup_poll() argument
174 struct rbd_data *rbd = td->io_ops_data; in _fio_rbd_connect() local
197 r = rados_create2(&rbd->cluster, o->cluster_name, in _fio_rbd_connect()
203 r = rados_create(&rbd->cluster, o->client_name); in _fio_rbd_connect()
210 r = rados_conf_read_file(rbd->cluster, NULL); in _fio_rbd_connect()
216 r = rados_connect(rbd->cluster); in _fio_rbd_connect()
222 r = rados_ioctx_create(rbd->cluster, o->pool_name, &rbd->io_ctx); in _fio_rbd_connect()
228 r = rbd_open(rbd->io_ctx, o->rbd_name, &rbd->image, NULL /*snap */ ); in _fio_rbd_connect()
234 if (!_fio_rbd_setup_poll(rbd)) in _fio_rbd_connect()
240 rbd_close(rbd->image); in _fio_rbd_connect()
241 rbd->image = NULL; in _fio_rbd_connect()
243 rados_ioctx_destroy(rbd->io_ctx); in _fio_rbd_connect()
244 rbd->io_ctx = NULL; in _fio_rbd_connect()
246 rados_shutdown(rbd->cluster); in _fio_rbd_connect()
247 rbd->cluster = NULL; in _fio_rbd_connect()
252 static void _fio_rbd_disconnect(struct rbd_data *rbd) in _fio_rbd_disconnect() argument
254 if (!rbd) in _fio_rbd_disconnect()
258 if (rbd->fd != -1) { in _fio_rbd_disconnect()
259 close(rbd->fd); in _fio_rbd_disconnect()
260 rbd->fd = -1; in _fio_rbd_disconnect()
264 if (rbd->image) { in _fio_rbd_disconnect()
265 rbd_close(rbd->image); in _fio_rbd_disconnect()
266 rbd->image = NULL; in _fio_rbd_disconnect()
269 if (rbd->io_ctx) { in _fio_rbd_disconnect()
270 rados_ioctx_destroy(rbd->io_ctx); in _fio_rbd_disconnect()
271 rbd->io_ctx = NULL; in _fio_rbd_disconnect()
274 if (rbd->cluster) { in _fio_rbd_disconnect()
275 rados_shutdown(rbd->cluster); in _fio_rbd_disconnect()
276 rbd->cluster = NULL; in _fio_rbd_disconnect()
303 struct rbd_data *rbd = td->io_ops_data; in fio_rbd_event() local
305 return rbd->aio_events[event]; in fio_rbd_event()
308 static inline int fri_check_complete(struct rbd_data *rbd, struct io_u *io_u, in fri_check_complete() argument
315 rbd->aio_events[*events] = io_u; in fri_check_complete()
359 struct rbd_data *rbd = td->io_ops_data; local
371 pfd.fd = rbd->fd;
380 event_num = rbd_poll_io_events(rbd->image, comps, min_evts);
393 if (fri_check_complete(rbd, io_u, events))
396 rbd->sort_events[sidx++] = io_u;
408 qsort(rbd->sort_events, sidx, sizeof(struct io_u *), rbd_io_u_cmp);
411 io_u = rbd->sort_events[i];
413 if (fri_check_complete(rbd, io_u, events)) {
427 if (fri_check_complete(rbd, io_u, events))
460 struct rbd_data *rbd = td->io_ops_data; local
479 r = rbd_aio_write_traced(rbd->image, io_u->offset, io_u->xfer_buflen,
482 r = rbd_aio_write(rbd->image, io_u->offset, io_u->xfer_buflen,
493 r = rbd_aio_read_traced(rbd->image, io_u->offset, io_u->xfer_buflen,
496 r = rbd_aio_read(rbd->image, io_u->offset, io_u->xfer_buflen,
505 r = rbd_aio_discard(rbd->image, io_u->offset,
512 r = rbd_aio_flush(rbd->image, fri->completion);
535 struct rbd_data *rbd = td->io_ops_data; local
537 if (rbd->connected)
554 struct rbd_data *rbd = td->io_ops_data; local
556 if (rbd) {
557 _fio_rbd_disconnect(rbd);
558 free(rbd->aio_events);
559 free(rbd->sort_events);
560 free(rbd);
568 struct rbd_data *rbd = NULL; local
572 r = _fio_setup_rbd_data(td, &rbd);
577 td->io_ops_data = rbd;
594 rbd->connected = true;
597 r = rbd_stat(rbd->image, &info, sizeof(info));
636 struct rbd_data *rbd = td->io_ops_data; local
638 return rbd_invalidate_cache(rbd->image);