X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=engines%2Frbd.c;h=2f25889ac877a09730bf6e037f5c9a3d7042dc64;hb=9dc528b1638b625b5e167983a74de4e85c5859ea;hp=268b6ebdffad2b71e4da565ed90867e76f90947a;hpb=fa443634fbfa38fd5d6418a96a45022c78b90df4;p=fio.git diff --git a/engines/rbd.c b/engines/rbd.c index 268b6ebd..2f25889a 100644 --- a/engines/rbd.c +++ b/engines/rbd.c @@ -173,7 +173,7 @@ static int _fio_rbd_connect(struct thread_data *td) char *client_name = NULL; /* - * If we specify cluser name, the rados_create2 + * If we specify cluster name, the rados_create2 * will not assume 'client.'. name is considered * as a full type.id namestr */ @@ -227,12 +227,30 @@ static int _fio_rbd_connect(struct thread_data *td) goto failed_shutdown; } + if (td->o.odirect) { + r = rados_conf_set(rbd->cluster, "rbd_cache", "false"); + if (r < 0) { + log_info("failed to disable RBD in-memory cache\n"); + } + } + r = rbd_open(rbd->io_ctx, o->rbd_name, &rbd->image, NULL /*snap */ ); if (r < 0) { log_err("rbd_open failed.\n"); goto failed_open; } + if (!td->o.odirect) { + /* + * ensure cache enables writeback/around mode unless explicitly + * configured for writethrough mode + */ + r = rbd_flush(rbd->image); + if (r < 0) { + log_info("rbd: failed to issue initial flush\n"); + } + } + if (!_fio_rbd_setup_poll(rbd)) goto failed_poll; @@ -615,7 +633,7 @@ static int fio_rbd_setup(struct thread_data *td) /* taken from "net" engine. Pretend we deal with files, * even if we do not have any ideas about files. - * The size of the RBD is set instead of a artificial file. + * The size of the RBD is set instead of an artificial file. */ if (!td->files_index) { add_file(td, td->o.filename ? : "rbd", 0, 0);