All of lore.kernel.org
 help / color / mirror / Atom feed
From: kusumi.tomohiro@gmail.com
To: axboe@kernel.dk, fio@vger.kernel.org
Cc: Tomohiro Kusumi <tkusumi@tuxera.com>
Subject: [PATCH 3/8] Add assert(0) to DDIR_DATASYNC sync path if fdatasync(2) is unsupported
Date: Tue,  4 Apr 2017 23:22:13 +0300	[thread overview]
Message-ID: <20170404202218.52260-3-tkusumi@tuxera.com> (raw)
In-Reply-To: <20170404202218.52260-1-tkusumi@tuxera.com>

From: Tomohiro Kusumi <tkusumi@tuxera.com>

If ddir is DDIR_DATASYNC, it means fio supports fdatasync(2), or it
at least compiled on ./configure. If a platform without fdatasync(2)
happens to take DDIR_DATASYNC path in do_io_u_sync(), it's simply wrong
(because ddir should never be DDIR_DATASYNC due to td->o.fdatasync_blocks == 0)
thus should be aborted rather than continue with EINVAL.

This commit also leaves the existing code from #else path to avoid
compilers complain for uninitialized ret variable.

Tested on FreeBSD and DragonFlyBSD.

Signed-off-by: Tomohiro Kusumi <tkusumi@tuxera.com>
---
 HOWTO  | 3 ++-
 init.c | 4 ++++
 io_u.c | 1 +
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/HOWTO b/HOWTO
index 80b9e75..b9114b4 100644
--- a/HOWTO
+++ b/HOWTO
@@ -1109,7 +1109,8 @@ I/O type
 
 	Like :option:`fsync` but uses :manpage:`fdatasync(2)` to only sync data and
 	not metadata blocks.  In Windows, FreeBSD, and DragonFlyBSD there is no
-	:manpage:`fdatasync(2)`, this falls back to using :manpage:`fsync(2)`.
+	:manpage:`fdatasync(2)`, this falls back to using :manpage:`fsync(2)`
+	by overwriting :manpage:`fsync(2)` value with this option.
 	Defaults to 0, which means no sync data every certain number of writes.
 
 .. option:: write_barrier=int
diff --git a/init.c b/init.c
index 2f9433b..90aaea3 100644
--- a/init.c
+++ b/init.c
@@ -782,6 +782,10 @@ static int fixup_options(struct thread_data *td)
 	}
 
 #ifndef CONFIG_FDATASYNC
+	/*
+	 * If the platform doesn't support fdatasync(2) (e.g. FreeBSD),
+	 * force fsync= using fdatasync= value specified.
+	 */
 	if (o->fdatasync_blocks) {
 		log_info("fio: this platform does not support fdatasync()"
 			 " falling back to using fsync().  Use the 'fsync'"
diff --git a/io_u.c b/io_u.c
index 88f35c9..86c5fc1 100644
--- a/io_u.c
+++ b/io_u.c
@@ -2115,6 +2115,7 @@ int do_io_u_sync(const struct thread_data *td, struct io_u *io_u)
 #else
 		ret = io_u->xfer_buflen;
 		io_u->error = EINVAL;
+		assert(0); /* should be falling back to fsync(2) */
 #endif
 	} else if (io_u->ddir == DDIR_SYNC_FILE_RANGE)
 		ret = do_sync_file_range(td, io_u->file);
-- 
2.9.3



  parent reply	other threads:[~2017-04-04 20:22 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-04 20:22 [PATCH 1/8] Don't silently terminate td when no I/O performed due to error kusumi.tomohiro
2017-04-04 20:22 ` [PATCH 2/8] dump_td_info() doesn't really need to be a function kusumi.tomohiro
2017-04-04 20:22 ` kusumi.tomohiro [this message]
2017-04-08 17:02   ` [PATCH 3/8] Add assert(0) to DDIR_DATASYNC sync path if fdatasync(2) is unsupported Jens Axboe
2017-04-04 20:22 ` [PATCH 4/8] Make lib/prio_tree.c a stand-alone library kusumi.tomohiro
2017-04-04 20:22 ` [PATCH 5/8] Make lib/memalign.c " kusumi.tomohiro
2017-04-04 20:22 ` [PATCH 6/8] Make lib/num2str.c a stand-alone library by adding lib/num2str.h kusumi.tomohiro
2017-04-04 20:22 ` [PATCH 7/8] Fix num2str() output when maxlen <= strlen(tmp) kusumi.tomohiro
2017-04-04 20:22 ` [PATCH 8/8] Fix num2str() output when modulo != -1U kusumi.tomohiro
2017-04-04 20:46   ` Elliott, Robert (Persistent Memory)
2017-04-08 17:05 ` [PATCH 1/8] Don't silently terminate td when no I/O performed due to error Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170404202218.52260-3-tkusumi@tuxera.com \
    --to=kusumi.tomohiro@gmail.com \
    --cc=axboe@kernel.dk \
    --cc=fio@vger.kernel.org \
    --cc=tkusumi@tuxera.com \
    --subject='Re: [PATCH 3/8] Add assert(0) to DDIR_DATASYNC sync path if fdatasync(2) is unsupported' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.