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 \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.