Flexible I/O Tester development
 help / color / mirror / Atom feed
From: Jens Axboe <axboe@kernel.dk>
To: fio@vger.kernel.org
Subject: Recent changes (master)
Date: Fri, 10 Oct 2014 06:00:03 -0600 (MDT)	[thread overview]
Message-ID: <20141010120003.3BDF140155@lyth.info> (raw)

The following changes since commit c5dd6d8975fc36da778d08c21d3e051add6d3030:

  net: use SIGTERM for terminate (2014-10-08 14:14:05 -0600)

are available in the git repository at:

  git://git.kernel.dk/fio.git master

for you to fetch changes up to 3441a52d588b95267f31491d4dca5f1418b1dcf5:

  engines/libaio: better protect against a busy loop in getevents() (2014-10-09 20:14:27 -0600)

----------------------------------------------------------------
Andrey Kuzmin (1):
      engines/libaio: better protect against a busy loop in getevents()

Jens Axboe (12):
      net: fix error reported on job exit and full residual
      engines/net: add socket buffer window size setting
      engines/net: add TCP_MAXSEG setting (mss)
      engines/net: add start of tracking how many UDP packages are dropped
      stat: add dropped ios to the standard output
      engines/net: turn off UDP package dropping if buf size doesn't match
      eta: don't count TD_SETTING_UP as a running process
      engines/net: use link close message on TCP as well
      configure: only print gtk status if --enable-gfio used
      engines/net: add subjob number to given port
      Update documentation on net engine port usage
      stat: add total/short/drop ios to the json output

 HOWTO            |    9 ++-
 client.c         |    1 +
 configure        |   56 ++++++++++++++--
 engines/libaio.c |    4 +-
 engines/net.c    |  196 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 eta.c            |    5 +-
 fio.1            |   10 ++-
 server.c         |    1 +
 stat.c           |   18 +++--
 stat.h           |    1 +
 10 files changed, 268 insertions(+), 33 deletions(-)

---

Diff of recent changes:

diff --git a/HOWTO b/HOWTO
index 2cecbbb..e18eadb 100644
--- a/HOWTO
+++ b/HOWTO
@@ -1640,7 +1640,9 @@ that defines them is selected.
 		address.
 
 [netsplice] port=int
-[net] port=int	The TCP or UDP port to bind to or connect to.
+[net] port=int	The TCP or UDP port to bind to or connect to. If this is used
+with numjobs to spawn multiple instances of the same job type, then this will
+be the starting port number since fio will use a range of ports.
 
 [netsplice] interface=str
 [net] interface=str  The IP address of the network interface used to send or
@@ -1672,6 +1674,7 @@ that defines them is selected.
 [net] listen	For TCP network connections, tell fio to listen for incoming
 		connections rather than initiating an outgoing connection. The
 		hostname must be omitted if this option is used.
+
 [net] pingpong	Normaly a network writer will just continue writing data, and
 		a network reader will just consume packages. If pingpong=1
 		is set, a writer will send its normal payload to the reader,
@@ -1684,6 +1687,10 @@ that defines them is selected.
 		single reader when multiple readers are listening to the same
 		address.
 
+[net] window_size	Set the desired socket buffer size for the connection.
+
+[net] mss	Set the TCP maximum segment size (TCP_MAXSEG).
+
 [e4defrag] donorname=str
 	        File will be used as a block donor(swap extents between files)
 [e4defrag] inplace=int
diff --git a/client.c b/client.c
index 66f982c..1879e44 100644
--- a/client.c
+++ b/client.c
@@ -831,6 +831,7 @@ static void convert_ts(struct thread_stat *dst, struct thread_stat *src)
 	for (i = 0; i < DDIR_RWDIR_CNT; i++) {
 		dst->total_io_u[i]	= le64_to_cpu(src->total_io_u[i]);
 		dst->short_io_u[i]	= le64_to_cpu(src->short_io_u[i]);
+		dst->drop_io_u[i]	= le64_to_cpu(src->drop_io_u[i]);
 	}
 
 	dst->total_submit	= le64_to_cpu(src->total_submit);
diff --git a/configure b/configure
index e3ec252..58f02fa 100755
--- a/configure
+++ b/configure
@@ -133,7 +133,7 @@ cpu=""
 # default options
 show_help="no"
 exit_val=0
-gfio="no"
+gfio_check="no"
 libhdfs="no"
 
 # parse options
@@ -153,7 +153,7 @@ for opt do
   --build-32bit-win) build_32bit_win="yes"
   ;;
   --enable-gfio)
-  gfio="yes"
+  gfio_check="yes"
   ;;
   --disable-numa) disable_numa="yes"
   ;;
@@ -982,7 +982,8 @@ echo "__thread                      $tls_thread"
 
 ##########################################
 # Check if we have required gtk/glib support for gfio
-if test "$gfio" = "yes" ; then
+gfio="no"
+if test "$gfio_check" = "yes" ; then
   cat > $TMPC << EOF
 #include <glib.h>
 #include <cairo.h>
@@ -1021,7 +1022,9 @@ else
 fi
 fi
 
-echo "gtk 2.18 or higher            $gfio"
+if test "$gfio_check" = "yes" ; then
+  echo "gtk 2.18 or higher            $gfio"
+fi
 
 # Check whether we have getrusage(RUSAGE_THREAD)
 rusage_thread="no"
@@ -1075,6 +1078,45 @@ fi
 echo "TCP_NODELAY                   $tcp_nodelay"
 
 ##########################################
+# Check whether we have SO_SNDBUF
+window_size="no"
+cat > $TMPC << EOF
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/tcp.h>
+int main(int argc, char **argv)
+{
+  setsockopt(0, SOL_SOCKET, SO_SNDBUF, NULL, 0);
+  setsockopt(0, SOL_SOCKET, SO_RCVBUF, NULL, 0);
+}
+EOF
+if compile_prog "" "" "SO_SNDBUF"; then
+  window_size="yes"
+fi
+echo "Net engine window_size        $window_size"
+
+##########################################
+# Check whether we have TCP_MAXSEG
+mss="no"
+cat > $TMPC << EOF
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/tcp.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+int main(int argc, char **argv)
+{
+  return setsockopt(0, IPPROTO_TCP, TCP_MAXSEG, NULL, 0);
+}
+EOF
+if compile_prog "" "" "TCP_MAXSEG"; then
+  mss="yes"
+fi
+echo "TCP_MAXSEG                    $mss"
+
+##########################################
 # Check whether we have RLIMIT_MEMLOCK
 rlimit_memlock="no"
 cat > $TMPC << EOF
@@ -1429,6 +1471,12 @@ fi
 if test "$tcp_nodelay" = "yes" ; then
   output_sym "CONFIG_TCP_NODELAY"
 fi
+if test "$window_size" = "yes" ; then
+  output_sym "CONFIG_NET_WINDOWSIZE"
+fi
+if test "$mss" = "yes" ; then
+  output_sym "CONFIG_NET_MSS"
+fi
 if test "$rlimit_memlock" = "yes" ; then
   output_sym "CONFIG_RLIMIT_MEMLOCK"
 fi
diff --git a/engines/libaio.c b/engines/libaio.c
index 7c3a42a..12f3b36 100644
--- a/engines/libaio.c
+++ b/engines/libaio.c
@@ -165,9 +165,9 @@ static int fio_libaio_getevents(struct thread_data *td, unsigned int min,
 			r = io_getevents(ld->aio_ctx, actual_min,
 				max, ld->aio_events + events, lt);
 		}
-		if (r >= 0)
+		if (r > 0)
 			events += r;
-		else if (r == -EAGAIN) {
+		else if ((min && r == 0) || r == -EAGAIN) {
 			fio_libaio_commit(td);
 			usleep(100);
 		} else if (r != -EINTR)
diff --git a/engines/net.c b/engines/net.c
index 1d89db1..aa7de96 100644
--- a/engines/net.c
+++ b/engines/net.c
@@ -21,14 +21,18 @@
 #include <sys/un.h>
 
 #include "../fio.h"
+#include "../verify.h"
 
 struct netio_data {
 	int listenfd;
 	int use_splice;
+	int seq_off;
 	int pipes[2];
 	struct sockaddr_in addr;
 	struct sockaddr_in6 addr6;
 	struct sockaddr_un addr_un;
+	uint64_t udp_send_seq;
+	uint64_t udp_recv_seq;
 };
 
 struct netio_options {
@@ -39,6 +43,8 @@ struct netio_options {
 	unsigned int pingpong;
 	unsigned int nodelay;
 	unsigned int ttl;
+	unsigned int window_size;
+	unsigned int mss;
 	char *intfc;
 };
 
@@ -47,10 +53,17 @@ struct udp_close_msg {
 	uint32_t cmd;
 };
 
+struct udp_seq {
+	uint64_t magic;
+	uint64_t seq;
+	uint64_t bs;
+};
+
 enum {
 	FIO_LINK_CLOSE = 0x89,
 	FIO_LINK_OPEN_CLOSE_MAGIC = 0x6c696e6b,
 	FIO_LINK_OPEN = 0x98,
+	FIO_UDP_SEQ_MAGIC = 0x657375716e556563ULL,
 
 	FIO_TYPE_TCP	= 1,
 	FIO_TYPE_UDP	= 2,
@@ -165,6 +178,30 @@ static struct fio_option options[] = {
 		.category = FIO_OPT_C_ENGINE,
 		.group	= FIO_OPT_G_NETIO,
 	},
+#ifdef CONFIG_NET_WINDOWSIZE
+	{
+		.name	= "window_size",
+		.lname	= "Window Size",
+		.type	= FIO_OPT_INT,
+		.off1	= offsetof(struct netio_options, window_size),
+		.minval	= 0,
+		.help	= "Set socket buffer window size",
+		.category = FIO_OPT_C_ENGINE,
+		.group	= FIO_OPT_G_NETIO,
+	},
+#endif
+#ifdef CONFIG_NET_MSS
+	{
+		.name	= "mss",
+		.lname	= "Maximum segment size",
+		.type	= FIO_OPT_INT,
+		.off1	= offsetof(struct netio_options, mss),
+		.minval	= 0,
+		.help	= "Set TCP maximum segment size",
+		.category = FIO_OPT_C_ENGINE,
+		.group	= FIO_OPT_G_NETIO,
+	},
+#endif
 	{
 		.name	= NULL,
 	},
@@ -185,6 +222,65 @@ static inline int is_ipv6(struct netio_options *o)
 	return o->proto == FIO_TYPE_UDP_V6 || o->proto == FIO_TYPE_TCP_V6;
 }
 
+static int set_window_size(struct thread_data *td, int fd)
+{
+#ifdef CONFIG_NET_WINDOWSIZE
+	struct netio_options *o = td->eo;
+	unsigned int wss;
+	int snd, rcv, ret;
+
+	if (!o->window_size)
+		return 0;
+
+	rcv = o->listen || o->pingpong;
+	snd = !o->listen || o->pingpong;
+	wss = o->window_size;
+	ret = 0;
+
+	if (rcv) {
+		ret = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (void *) &wss,
+					sizeof(wss));
+		if (ret < 0)
+			td_verror(td, errno, "rcvbuf window size");
+	}
+	if (snd && !ret) {
+		ret = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (void *) &wss,
+					sizeof(wss));
+		if (ret < 0)
+			td_verror(td, errno, "sndbuf window size");
+	}
+
+	return ret;
+#else
+	td_verror(td, -EINVAL, "setsockopt window size");
+	return -1;
+#endif
+}
+
+static int set_mss(struct thread_data *td, int fd)
+{
+#ifdef CONFIG_NET_MSS
+	struct netio_options *o = td->eo;
+	unsigned int mss;
+	int ret;
+
+	if (!o->mss || !is_tcp(o))
+		return 0;
+
+	mss = o->mss;
+	ret = setsockopt(fd, IPPROTO_TCP, TCP_MAXSEG, (void *) &mss,
+				sizeof(mss));
+	if (ret < 0)
+		td_verror(td, errno, "setsockopt TCP_MAXSEG");
+
+	return ret;
+#else
+	td_verror(td, -EINVAL, "setsockopt TCP_MAXSEG");
+	return -1;
+#endif
+}
+
+
 /*
  * Return -1 for error and 'nr events' for a positive number
  * of events
@@ -384,6 +480,41 @@ static int fio_netio_splice_out(struct thread_data *td, struct io_u *io_u)
 }
 #endif
 
+static void store_udp_seq(struct netio_data *nd, struct io_u *io_u)
+{
+	struct udp_seq *us;
+
+	us = io_u->xfer_buf + io_u->xfer_buflen - sizeof(*us);
+	us->magic = cpu_to_le64(FIO_UDP_SEQ_MAGIC);
+	us->bs = cpu_to_le64((uint64_t) io_u->xfer_buflen);
+	us->seq = cpu_to_le64(nd->udp_send_seq++);
+}
+
+static void verify_udp_seq(struct thread_data *td, struct netio_data *nd,
+			   struct io_u *io_u)
+{
+	struct udp_seq *us;
+	uint64_t seq;
+
+	if (nd->seq_off)
+		return;
+
+	us = io_u->xfer_buf + io_u->xfer_buflen - sizeof(*us);
+	if (le64_to_cpu(us->magic) != FIO_UDP_SEQ_MAGIC)
+		return;
+	if (le64_to_cpu(us->bs) != io_u->xfer_buflen) {
+		nd->seq_off = 1;
+		return;
+	}
+
+	seq = le64_to_cpu(us->seq);
+
+	if (seq != nd->udp_recv_seq)
+		td->ts.drop_io_u[io_u->ddir] += seq - nd->udp_recv_seq;
+
+	nd->udp_recv_seq = seq + 1;
+}
+
 static int fio_netio_send(struct thread_data *td, struct io_u *io_u)
 {
 	struct netio_data *nd = td->io_ops->data;
@@ -403,6 +534,9 @@ static int fio_netio_send(struct thread_data *td, struct io_u *io_u)
 				len = sizeof(nd->addr);
 			}
 
+			if (td->o.verify == VERIFY_NONE)
+				store_udp_seq(nd, io_u);
+
 			ret = sendto(io_u->file->fd, io_u->xfer_buf,
 					io_u->xfer_buflen, flags, to, len);
 		} else {
@@ -428,7 +562,7 @@ static int fio_netio_send(struct thread_data *td, struct io_u *io_u)
 	return ret;
 }
 
-static int is_udp_close(struct io_u *io_u, int len)
+static int is_close_msg(struct io_u *io_u, int len)
 {
 	struct udp_close_msg *msg;
 
@@ -436,9 +570,9 @@ static int is_udp_close(struct io_u *io_u, int len)
 		return 0;
 
 	msg = io_u->xfer_buf;
-	if (ntohl(msg->magic) != FIO_LINK_OPEN_CLOSE_MAGIC)
+	if (le32_to_cpu(msg->magic) != FIO_LINK_OPEN_CLOSE_MAGIC)
 		return 0;
-	if (ntohl(msg->cmd) != FIO_LINK_CLOSE)
+	if (le32_to_cpu(msg->cmd) != FIO_LINK_CLOSE)
 		return 0;
 
 	return 1;
@@ -470,13 +604,19 @@ static int fio_netio_recv(struct thread_data *td, struct io_u *io_u)
 
 			ret = recvfrom(io_u->file->fd, io_u->xfer_buf,
 					io_u->xfer_buflen, flags, from, len);
-			if (is_udp_close(io_u, ret)) {
+
+			if (is_close_msg(io_u, ret)) {
 				td->done = 1;
 				return 0;
 			}
 		} else {
 			ret = recv(io_u->file->fd, io_u->xfer_buf,
 					io_u->xfer_buflen, flags);
+
+			if (is_close_msg(io_u, ret)) {
+				td->done = 1;
+				return 0;
+			}
 		}
 		if (ret > 0)
 			break;
@@ -489,6 +629,9 @@ static int fio_netio_recv(struct thread_data *td, struct io_u *io_u)
 		flags |= MSG_WAITALL;
 	} while (1);
 
+	if (is_udp(o) && td->o.verify == VERIFY_NONE)
+		verify_udp_seq(td, nd, io_u);
+
 	return ret;
 }
 
@@ -515,11 +658,13 @@ static int __fio_netio_queue(struct thread_data *td, struct io_u *io_u,
 		ret = 0;	/* must be a SYNC */
 
 	if (ret != (int) io_u->xfer_buflen) {
-		if (ret >= 0) {
+		if (ret > 0) {
 			io_u->resid = io_u->xfer_buflen - ret;
 			io_u->error = 0;
 			return FIO_Q_COMPLETED;
-		} else {
+		} else if (!ret)
+			return FIO_Q_BUSY;
+		else {
 			int err = errno;
 
 			if (ddir == DDIR_WRITE && err == EMSGSIZE)
@@ -601,6 +746,15 @@ static int fio_netio_connect(struct thread_data *td, struct fio_file *f)
 	}
 #endif
 
+	if (set_window_size(td, f->fd)) {
+		close(f->fd);
+		return 1;
+	}
+	if (set_mss(td, f->fd)) {
+		close(f->fd);
+		return 1;
+	}
+
 	if (is_udp(o)) {
 		if (!fio_netio_is_multicast(td->o.filename))
 			return 0;
@@ -715,7 +869,7 @@ err:
 	return 1;
 }
 
-static void fio_netio_udp_close(struct thread_data *td, struct fio_file *f)
+static void fio_netio_send_close(struct thread_data *td, struct fio_file *f)
 {
 	struct netio_data *nd = td->io_ops->data;
 	struct netio_options *o = td->eo;
@@ -732,8 +886,8 @@ static void fio_netio_udp_close(struct thread_data *td, struct fio_file *f)
 		len = sizeof(nd->addr);
 	}
 
-	msg.magic = htonl(FIO_LINK_OPEN_CLOSE_MAGIC);
-	msg.cmd = htonl(FIO_LINK_CLOSE);
+	msg.magic = cpu_to_le32((uint32_t) FIO_LINK_OPEN_CLOSE_MAGIC);
+	msg.cmd = cpu_to_le32((uint32_t) FIO_LINK_CLOSE);
 
 	ret = sendto(f->fd, (void *) &msg, sizeof(msg), MSG_WAITALL, to, len);
 	if (ret < 0)
@@ -742,14 +896,10 @@ static void fio_netio_udp_close(struct thread_data *td, struct fio_file *f)
 
 static int fio_netio_close_file(struct thread_data *td, struct fio_file *f)
 {
-	struct netio_options *o = td->eo;
-
 	/*
-	 * If this is an UDP connection, notify the receiver that we are
-	 * closing down the link
+	 * Notify the receiver that we are closing down the link
 	 */
-	if (is_udp(o))
-		fio_netio_udp_close(td, f);
+	fio_netio_send_close(td, f);
 
 	return generic_close_file(td, f);
 }
@@ -784,10 +934,11 @@ static int fio_netio_udp_recv_open(struct thread_data *td, struct fio_file *f)
 		return -1;
 	}
 
+	fio_gettime(&td->start, NULL);
 	return 0;
 }
 
-static int fio_netio_udp_send_open(struct thread_data *td, struct fio_file *f)
+static int fio_netio_send_open(struct thread_data *td, struct fio_file *f)
 {
 	struct netio_data *nd = td->io_ops->data;
 	struct netio_options *o = td->eo;
@@ -833,7 +984,7 @@ static int fio_netio_open_file(struct thread_data *td, struct fio_file *f)
 
 	if (is_udp(o)) {
 		if (td_write(td))
-			ret = fio_netio_udp_send_open(td, f);
+			ret = fio_netio_send_open(td, f);
 		else {
 			int state;
 
@@ -1042,6 +1193,15 @@ static int fio_netio_setup_listen_inet(struct thread_data *td, short port)
 	}
 #endif
 
+	if (set_window_size(td, fd)) {
+		close(fd);
+		return 1;
+	}
+	if (set_mss(td, fd)) {
+		close(fd);
+		return 1;
+	}
+
 	if (td->o.filename) {
 		if (!is_udp(o) || !fio_netio_is_multicast(td->o.filename)) {
 			log_err("fio: hostname not valid for non-multicast inbound network IO\n");
@@ -1148,6 +1308,8 @@ static int fio_netio_init(struct thread_data *td)
 		return 1;
 	}
 
+	o->port += td->subjob_number;
+
 	if (!is_tcp(o)) {
 		if (o->listen) {
 			log_err("fio: listen only valid for TCP proto IO\n");
diff --git a/eta.c b/eta.c
index 0105cda..baada7b 100644
--- a/eta.c
+++ b/eta.c
@@ -392,10 +392,9 @@ int calc_thread_status(struct jobs_eta *je, int force)
 		} else if (td->runstate == TD_RAMP) {
 			je->nr_running++;
 			je->nr_ramp++;
-		} else if (td->runstate == TD_SETTING_UP) {
-			je->nr_running++;
+		} else if (td->runstate == TD_SETTING_UP)
 			je->nr_setting_up++;
-		} else if (td->runstate < TD_RUNNING)
+		else if (td->runstate < TD_RUNNING)
 			je->nr_pending++;
 
 		if (je->elapsed_sec >= 3)
diff --git a/fio.1 b/fio.1
index 91c3074..8d02632 100644
--- a/fio.1
+++ b/fio.1
@@ -1471,7 +1471,9 @@ If the job is a TCP listener or UDP reader, the hostname is not
 used and must be omitted unless it is a valid UDP multicast address.
 .TP
 .BI (net,netsplice)port \fR=\fPint
-The TCP or UDP port to bind to or connect to.
+The TCP or UDP port to bind to or connect to. If this is used with
+\fBnumjobs\fR to spawn multiple instances of the same job type, then
+this will be the starting port number since fio will use a range of ports.
 .TP
 .BI (net,netsplice)interface \fR=\fPstr
 The IP address of the network interface used to send or receive UDP multicast
@@ -1525,6 +1527,12 @@ completion latency measures how long it took for the other end to receive and
 send back. For UDP multicast traffic pingpong=1 should only be set for a single
 reader when multiple readers are listening to the same address.
 .TP
+.BI (net, window_size) \fR=\fPint
+Set the desired socket buffer size for the connection.
+.TP
+.BI (net, mss) \fR=\fPint
+Set the TCP maximum segment size (TCP_MAXSEG).
+.TP
 .BI (e4defrag,donorname) \fR=\fPstr
 File will be used as a block donor (swap extents between files)
 .TP
diff --git a/server.c b/server.c
index fa029ca..33c512c 100644
--- a/server.c
+++ b/server.c
@@ -1066,6 +1066,7 @@ void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs)
 	for (i = 0; i < DDIR_RWDIR_CNT; i++) {
 		p.ts.total_io_u[i]	= cpu_to_le64(ts->total_io_u[i]);
 		p.ts.short_io_u[i]	= cpu_to_le64(ts->short_io_u[i]);
+		p.ts.drop_io_u[i]	= cpu_to_le64(ts->drop_io_u[i]);
 	}
 
 	p.ts.total_submit	= cpu_to_le64(ts->total_submit);
diff --git a/stat.c b/stat.c
index 89d7194..77e389c 100644
--- a/stat.c
+++ b/stat.c
@@ -506,9 +506,7 @@ static void show_thread_status_normal(struct thread_stat *ts,
 	time_t time_p;
 	char time_buf[64];
 
-	if (!(ts->io_bytes[DDIR_READ] + ts->io_bytes[DDIR_WRITE] +
-	    ts->io_bytes[DDIR_TRIM]) && !(ts->total_io_u[DDIR_READ] +
-	    ts->total_io_u[DDIR_WRITE] + ts->total_io_u[DDIR_TRIM]))
+	if (!ddir_rw_sum(ts->io_bytes) && !ddir_rw_sum(ts->total_io_u))
 		return;
 
 	time(&time_p);
@@ -574,13 +572,17 @@ static void show_thread_status_normal(struct thread_stat *ts,
 					io_u_dist[3], io_u_dist[4],
 					io_u_dist[5], io_u_dist[6]);
 	log_info("     issued    : total=r=%llu/w=%llu/d=%llu,"
-				 " short=r=%llu/w=%llu/d=%llu\n",
+				 " short=r=%llu/w=%llu/d=%llu,"
+				 " drop=r=%llu/w=%llu/d=%llu\n",
 					(unsigned long long) ts->total_io_u[0],
 					(unsigned long long) ts->total_io_u[1],
 					(unsigned long long) ts->total_io_u[2],
 					(unsigned long long) ts->short_io_u[0],
 					(unsigned long long) ts->short_io_u[1],
-					(unsigned long long) ts->short_io_u[2]);
+					(unsigned long long) ts->short_io_u[2],
+					(unsigned long long) ts->drop_io_u[0],
+					(unsigned long long) ts->drop_io_u[1],
+					(unsigned long long) ts->drop_io_u[2]);
 	if (ts->continue_on_error) {
 		log_info("     errors    : total=%llu, first_error=%d/<%s>\n",
 					(unsigned long long)ts->total_err_count,
@@ -703,6 +705,9 @@ static void add_ddir_status_json(struct thread_stat *ts,
 	json_object_add_value_int(dir_object, "bw", bw);
 	json_object_add_value_int(dir_object, "iops", iops);
 	json_object_add_value_int(dir_object, "runtime", ts->runtime[ddir]);
+	json_object_add_value_int(dir_object, "total_ios", ts->total_io_u[ddir]);
+	json_object_add_value_int(dir_object, "short_ios", ts->short_io_u[ddir]);
+	json_object_add_value_int(dir_object, "drop_ios", ts->drop_io_u[ddir]);
 
 	if (!calc_lat(&ts->slat_stat[ddir], &min, &max, &mean, &dev)) {
 		min = max = 0;
@@ -1123,9 +1128,11 @@ void sum_thread_stats(struct thread_stat *dst, struct thread_stat *src, int nr)
 		if (!dst->unified_rw_rep) {
 			dst->total_io_u[k] += src->total_io_u[k];
 			dst->short_io_u[k] += src->short_io_u[k];
+			dst->drop_io_u[k] += src->drop_io_u[k];
 		} else {
 			dst->total_io_u[0] += src->total_io_u[k];
 			dst->short_io_u[0] += src->short_io_u[k];
+			dst->drop_io_u[0] += src->drop_io_u[k];
 		}
 	}
 
@@ -1658,6 +1665,7 @@ void reset_io_stats(struct thread_data *td)
 	for (i = 0; i < 3; i++) {
 		ts->total_io_u[i] = 0;
 		ts->short_io_u[i] = 0;
+		ts->drop_io_u[i] = 0;
 	}
 }
 
diff --git a/stat.h b/stat.h
index 90a7fb3..1727c0c 100644
--- a/stat.h
+++ b/stat.h
@@ -160,6 +160,7 @@ struct thread_stat {
 	uint32_t io_u_plat[DDIR_RWDIR_CNT][FIO_IO_U_PLAT_NR];
 	uint64_t total_io_u[3];
 	uint64_t short_io_u[3];
+	uint64_t drop_io_u[3];
 	uint64_t total_submit;
 	uint64_t total_complete;
 

             reply	other threads:[~2014-10-10 12:00 UTC|newest]

Thread overview: 1466+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-10 12:00 Jens Axboe [this message]
  -- strict thread matches above, loose matches on Subject: below --
2017-03-17 12:00 Recent changes (master) Jens Axboe
2017-03-18 12:00 Jens Axboe
2017-03-20 12:00 Jens Axboe
2017-03-22 12:00 Jens Axboe
2017-03-29 12:00 Jens Axboe
2017-04-03 12:00 Jens Axboe
2017-04-04 12:00 Jens Axboe
2017-04-05 12:00 Jens Axboe
2017-04-08 12:00 Jens Axboe
2017-04-09 12:00 Jens Axboe
2017-04-11 12:00 Jens Axboe
2017-04-20 12:00 Jens Axboe
2017-04-26 12:00 Jens Axboe
2017-04-27 12:00 Jens Axboe
2017-05-01 12:00 Jens Axboe
2017-05-02 12:00 Jens Axboe
2017-05-04 12:00 Jens Axboe
2017-05-05 12:00 Jens Axboe
2017-05-10 12:00 Jens Axboe
2017-05-19 12:00 Jens Axboe
2017-05-20 12:00 Jens Axboe
2017-05-23 12:00 Jens Axboe
2017-05-24 12:00 Jens Axboe
2017-05-25 12:00 Jens Axboe
2017-05-27 12:00 Jens Axboe
2017-06-03 12:00 Jens Axboe
2017-06-06 12:00 Jens Axboe
2017-06-08 12:00 Jens Axboe
2017-06-09 12:00 Jens Axboe
2017-06-13 12:00 Jens Axboe
2017-06-15 12:00 Jens Axboe
2017-06-16 12:00 Jens Axboe
2017-06-19 12:00 Jens Axboe
2017-06-20 12:00 Jens Axboe
2017-06-23 12:00 Jens Axboe
2017-06-24 12:00 Jens Axboe
2017-06-26 12:00 Jens Axboe
2017-06-27 12:00 Jens Axboe
2017-06-28 12:00 Jens Axboe
2017-06-29 12:00 Jens Axboe
2017-07-03 12:00 Jens Axboe
2017-07-04 12:00 Jens Axboe
2017-07-05 12:00 Jens Axboe
2017-07-07 12:00 Jens Axboe
2017-07-08 12:00 Jens Axboe
2017-07-11 12:00 Jens Axboe
2017-07-13 12:00 Jens Axboe
2017-07-14 12:00 Jens Axboe
2017-07-15 12:00 Jens Axboe
2017-07-17 12:00 Jens Axboe
2017-07-21 12:00 Jens Axboe
2017-07-26 12:00 Jens Axboe
2017-07-28 12:00 Jens Axboe
2017-08-01 12:00 Jens Axboe
2017-08-02 12:00 Jens Axboe
2017-08-08 12:00 Jens Axboe
2017-08-09 12:00 Jens Axboe
2017-08-10 12:00 Jens Axboe
2017-08-15 12:00 Jens Axboe
2017-08-17 12:00 Jens Axboe
2017-08-18 12:00 Jens Axboe
2017-08-23 12:00 Jens Axboe
2017-08-24 12:00 Jens Axboe
2017-08-28 12:00 Jens Axboe
2017-08-29 12:00 Jens Axboe
2017-08-30 12:00 Jens Axboe
2017-08-31 12:00 Jens Axboe
2017-09-01 12:00 Jens Axboe
2017-09-02 12:00 Jens Axboe
2017-09-03 12:00 Jens Axboe
2017-09-06 12:00 Jens Axboe
2017-09-12 12:00 Jens Axboe
2017-09-13 12:00 Jens Axboe
2017-09-14 12:00 Jens Axboe
2017-09-15 12:00 Jens Axboe
2017-09-19 12:00 Jens Axboe
2017-09-21 12:00 Jens Axboe
2017-09-27 12:00 Jens Axboe
2017-09-28 12:00 Jens Axboe
2017-09-29 12:00 Jens Axboe
2017-10-04 12:00 Jens Axboe
2017-10-07 12:00 Jens Axboe
2017-10-10 12:00 Jens Axboe
2017-10-11 12:00 Jens Axboe
2017-10-12 12:00 Jens Axboe
2017-10-13 12:00 Jens Axboe
2017-10-18 12:00 Jens Axboe
2017-10-21 12:00 Jens Axboe
2017-10-26 12:00 Jens Axboe
2017-10-27 12:00 Jens Axboe
2017-10-31 12:00 Jens Axboe
2017-11-01 12:00 Jens Axboe
2017-11-02 12:00 Jens Axboe
2017-11-03 12:00 Jens Axboe
2017-11-04 12:00 Jens Axboe
2017-11-07 13:00 Jens Axboe
2017-11-16 13:00 Jens Axboe
2017-11-17 13:00 Jens Axboe
2017-11-18 13:00 Jens Axboe
2017-11-20 15:00 ` Elliott, Robert (Persistent Memory)
2017-11-23 13:00 Jens Axboe
2017-11-24 13:00 Jens Axboe
2017-11-29 13:00 Jens Axboe
2017-11-30 13:00 Jens Axboe
2017-12-01 13:00 Jens Axboe
2017-12-02 13:00 Jens Axboe
2017-12-03 13:00 Jens Axboe
2017-12-04 13:00 Jens Axboe
2017-12-07 13:00 Jens Axboe
2017-12-08 13:00 Jens Axboe
2017-12-09 13:00 Jens Axboe
2017-12-14 13:00 Jens Axboe
2017-12-15 13:00 Jens Axboe
2017-12-16 13:00 Jens Axboe
2017-12-20 13:00 Jens Axboe
2017-12-22 13:00 Jens Axboe
2017-12-28 13:00 Jens Axboe
2017-12-29 13:00 Jens Axboe
2017-12-30 13:00 Jens Axboe
2018-01-03 13:00 Jens Axboe
2018-01-06 13:00 Jens Axboe
2018-01-07 13:00 Jens Axboe
2018-01-11 13:00 Jens Axboe
2018-01-13 13:00 Jens Axboe
2018-01-17 13:00 Jens Axboe
2018-01-25 13:00 Jens Axboe
2018-01-26 13:00 Jens Axboe
2018-02-08 13:00 Jens Axboe
2018-02-09 13:00 Jens Axboe
2018-02-11 13:00 Jens Axboe
2018-02-13 13:00 Jens Axboe
2018-02-15 13:00 Jens Axboe
2018-02-21 13:00 Jens Axboe
2018-02-27 13:00 Jens Axboe
2018-02-28 13:00 Jens Axboe
2018-03-01 13:00 Jens Axboe
2018-03-02 13:00 Jens Axboe
2018-03-03 13:00 Jens Axboe
2018-03-06 13:00 Jens Axboe
2018-03-07 13:00 Jens Axboe
2018-03-08 13:00 Jens Axboe
2018-03-10 13:00 Jens Axboe
2018-03-13 12:00 Jens Axboe
2018-03-14 12:00 Jens Axboe
2018-03-20 12:00 Jens Axboe
2018-03-21 12:00 Jens Axboe
2018-03-22 12:00 Jens Axboe
2018-03-23 12:00 Jens Axboe
2018-03-24 12:00 Jens Axboe
2018-03-30 12:00 Jens Axboe
2018-03-31 12:00 Jens Axboe
2018-04-04 12:00 Jens Axboe
2018-04-05 12:00 Jens Axboe
2018-04-07 12:00 Jens Axboe
2018-04-09 12:00 Jens Axboe
2018-04-10 12:00 Jens Axboe
2018-04-11 12:00 Jens Axboe
2018-04-14 12:00 Jens Axboe
2018-04-15 12:00 Jens Axboe
2018-04-17 12:00 Jens Axboe
2018-04-18 12:00 Jens Axboe
2018-04-19 12:00 Jens Axboe
2018-04-21 12:00 Jens Axboe
2018-04-25 12:00 Jens Axboe
2018-04-27 12:00 Jens Axboe
2018-05-15 12:00 Jens Axboe
2018-05-17 12:00 Jens Axboe
2018-05-19 12:00 Jens Axboe
2018-05-26 12:00 Jens Axboe
2018-06-01 12:00 Jens Axboe
2018-06-02 12:00 Jens Axboe
2018-06-05 12:00 Jens Axboe
2018-06-06 12:00 Jens Axboe
2018-06-08 12:00 Jens Axboe
2018-06-09 12:00 Jens Axboe
2018-06-12 12:00 Jens Axboe
2018-06-13 12:00 Jens Axboe
2018-06-16 12:00 Jens Axboe
2018-06-19 12:00 Jens Axboe
2018-06-22 12:00 Jens Axboe
2018-06-30 12:00 Jens Axboe
2018-07-05 12:00 Jens Axboe
2018-07-11 12:00 Jens Axboe
2018-07-12 12:00 Jens Axboe
2018-07-13 12:00 Jens Axboe
2018-07-24 12:00 Jens Axboe
2018-07-25 12:00 Jens Axboe
2018-07-26 12:00 Jens Axboe
2018-07-27 12:00 Jens Axboe
2018-07-31 12:00 Jens Axboe
2018-08-03 12:00 Jens Axboe
2018-08-04 12:00 Jens Axboe
2018-08-06 12:00 Jens Axboe
2018-08-08 12:00 Jens Axboe
2018-08-10 12:00 Jens Axboe
2018-08-11 12:00 Jens Axboe
2018-08-13 12:00 Jens Axboe
2018-08-14 12:00 Jens Axboe
2018-08-15 12:00 Jens Axboe
2018-08-16 12:00 Jens Axboe
2018-08-17 12:00 Jens Axboe
2018-08-18 12:00 Jens Axboe
2018-08-21 12:00 Jens Axboe
2018-08-22 12:00 Jens Axboe
2018-08-23 12:00 Jens Axboe
2018-08-24 12:00 Jens Axboe
2018-08-25 12:00 Jens Axboe
2018-08-26 12:00 Jens Axboe
2018-08-31 12:00 Jens Axboe
2018-09-01 12:00 Jens Axboe
2018-09-04 12:00 Jens Axboe
2018-09-06 12:00 Jens Axboe
2018-09-07 12:00 Jens Axboe
2018-09-08 12:00 Jens Axboe
2018-09-09 12:00 Jens Axboe
2018-09-10 12:00 Jens Axboe
2018-09-11 12:00 Jens Axboe
2018-09-12 12:00 Jens Axboe
2018-09-13 12:00 Jens Axboe
2018-09-17 12:00 Jens Axboe
2018-09-18 12:00 Jens Axboe
2018-09-20 12:00 Jens Axboe
2018-09-21 12:00 Jens Axboe
2018-09-22 12:00 Jens Axboe
2018-09-23 12:00 Jens Axboe
2018-09-26 12:00 Jens Axboe
2018-09-27 12:00 Jens Axboe
2018-09-28 12:00 Jens Axboe
2018-09-30 12:00 Jens Axboe
2018-10-01 12:00 Jens Axboe
2018-10-02 12:00 Jens Axboe
2018-10-04 12:00 Jens Axboe
2018-10-05 12:00 Jens Axboe
2018-10-06 12:00 Jens Axboe
2018-10-09 12:00 Jens Axboe
2018-10-16 12:00 Jens Axboe
2018-10-19 12:00 Jens Axboe
2018-10-20 12:00 Jens Axboe
2018-10-24 12:00 Jens Axboe
2018-10-27 12:00 Jens Axboe
2018-11-03 12:00 Jens Axboe
2018-11-07 13:00 Jens Axboe
2018-11-16 13:00 Jens Axboe
2018-11-20 13:00 Jens Axboe
2018-11-21 13:00 Jens Axboe
2018-11-22 13:00 Jens Axboe
2018-11-25 13:00 Jens Axboe
2018-11-26 13:00 Jens Axboe
2018-11-27 13:00 Jens Axboe
2018-11-28 13:00 Jens Axboe
2018-11-30 13:00 Jens Axboe
2018-12-01 13:00 Jens Axboe
2018-12-02 13:00 Jens Axboe
2018-12-05 13:00 Jens Axboe
2018-12-11 13:00 Jens Axboe
2018-12-13 13:00 Jens Axboe
2018-12-14 13:00 Jens Axboe
2018-12-15 13:00 Jens Axboe
2018-12-20 13:00 Jens Axboe
2018-12-22 13:00 Jens Axboe
2018-12-31 13:00 Jens Axboe
2019-01-05 13:00 Jens Axboe
2019-01-06 13:00 Jens Axboe
2019-01-08 13:00 Jens Axboe
2019-01-09 13:00 Jens Axboe
2019-01-10 13:00 Jens Axboe
2019-01-11 13:00 Jens Axboe
2019-01-12 13:00 Jens Axboe
2019-01-13 13:00 Jens Axboe
2019-01-14 13:00 Jens Axboe
2019-01-15 13:00 Jens Axboe
2019-01-16 13:00 Jens Axboe
2019-01-17 13:00 Jens Axboe
2019-01-24 13:00 Jens Axboe
2019-01-25 13:00 Jens Axboe
2019-01-29 13:00 Jens Axboe
2019-01-30 13:00 Jens Axboe
2019-02-01 13:00 Jens Axboe
2019-02-05 13:00 Jens Axboe
2019-02-08 13:00 Jens Axboe
2019-02-09 13:00 Jens Axboe
2019-02-11 13:00 Jens Axboe
2019-02-12 13:00 Jens Axboe
2019-02-22 13:00 Jens Axboe
2019-02-24 13:00 Jens Axboe
2019-02-25 13:00 Jens Axboe
2019-03-01 13:00 Jens Axboe
2019-03-07 13:00 Jens Axboe
2019-03-08 13:00 Jens Axboe
2019-03-09 13:00 Jens Axboe
2019-03-12 12:00 Jens Axboe
2019-03-22 12:00 Jens Axboe
2019-03-26 12:00 Jens Axboe
2019-04-02 12:00 Jens Axboe
2019-04-18 12:00 Jens Axboe
2019-04-19 12:00 Jens Axboe
2019-04-20 12:00 Jens Axboe
2019-04-23 12:00 Jens Axboe
2019-04-26 12:00 Jens Axboe
2019-05-07 12:00 Jens Axboe
2019-05-09 12:00 Jens Axboe
2019-05-09 12:47 ` Erwan Velu
2019-05-09 14:07   ` Jens Axboe
2019-05-09 15:47 ` Elliott, Robert (Servers)
2019-05-09 15:52   ` Sebastien Boisvert
2019-05-09 16:12     ` Elliott, Robert (Servers)
2019-05-09 15:57   ` Jens Axboe
2019-05-10 12:00 Jens Axboe
2019-05-17 12:00 Jens Axboe
2019-05-21 12:00 Jens Axboe
2019-05-23 12:00 Jens Axboe
2019-05-24 12:00 Jens Axboe
2019-06-01 12:00 Jens Axboe
2019-07-02 12:00 Jens Axboe
2019-07-10 12:00 Jens Axboe
2019-07-13 12:00 Jens Axboe
2019-07-27 12:00 Jens Axboe
2019-08-01 12:00 Jens Axboe
2019-08-03 12:00 Jens Axboe
2019-08-04 12:00 Jens Axboe
2019-08-06 12:00 Jens Axboe
2019-08-09 12:00 Jens Axboe
2019-08-15 12:00 Jens Axboe
2019-08-15 14:27 ` Rebecca Cran
2019-08-15 14:28   ` Jens Axboe
2019-08-15 15:05     ` Rebecca Cran
2019-08-15 15:17       ` Jens Axboe
2019-08-15 15:35         ` Rebecca Cran
2019-08-16 12:00 Jens Axboe
2019-08-29 12:00 Jens Axboe
2019-08-30 12:00 Jens Axboe
2019-09-04 12:00 Jens Axboe
2019-09-06 12:00 Jens Axboe
2019-09-13 12:00 Jens Axboe
2019-09-14 12:00 Jens Axboe
2019-09-20 12:00 Jens Axboe
2019-09-24 12:00 Jens Axboe
2019-09-25 12:00 Jens Axboe
2019-09-26 12:00 Jens Axboe
2019-09-28 12:00 Jens Axboe
2019-10-02 12:00 Jens Axboe
2019-10-03 12:00 Jens Axboe
2019-10-07 12:00 Jens Axboe
2019-10-08 12:00 Jens Axboe
2019-10-09 12:00 Jens Axboe
2019-10-14 12:00 Jens Axboe
2019-10-15 12:00 Jens Axboe
2019-10-16 12:00 Jens Axboe
2019-10-22 12:00 Jens Axboe
2019-10-25 12:00 Jens Axboe
2019-10-30 12:00 Jens Axboe
2019-11-03 13:00 Jens Axboe
2019-11-04 13:00 Jens Axboe
2019-11-06 13:00 Jens Axboe
2019-11-07 13:00 Jens Axboe
2019-11-07 15:25 Jens Axboe
2019-11-15 13:00 Jens Axboe
2019-11-26 13:00 Jens Axboe
2019-11-27 13:00 Jens Axboe
2019-11-28 13:00 Jens Axboe
2019-12-07 13:00 Jens Axboe
2019-12-12 13:00 Jens Axboe
2019-12-17 13:00 Jens Axboe
2019-12-19 13:00 Jens Axboe
2019-12-22 13:00 Jens Axboe
2019-12-24 13:00 Jens Axboe
2019-12-26 13:00 Jens Axboe
2020-01-04 13:00 Jens Axboe
2020-01-05 13:00 Jens Axboe
2020-01-06 13:00 Jens Axboe
2020-01-07 13:00 Jens Axboe
2020-01-10 13:00 Jens Axboe
2020-01-14 13:00 Jens Axboe
2020-01-15 13:00 Jens Axboe
2020-01-17 13:00 Jens Axboe
2020-01-19 13:00 Jens Axboe
2020-01-23 13:00 Jens Axboe
2020-01-24 13:00 Jens Axboe
2020-01-29 13:00 Jens Axboe
2020-02-05 13:00 Jens Axboe
2020-02-06 13:00 Jens Axboe
2020-02-07 13:00 Jens Axboe
2020-02-25 13:00 Jens Axboe
2020-02-27 13:00 Jens Axboe
2020-03-02 13:00 Jens Axboe
2020-03-03 13:00 Jens Axboe
2020-03-04 13:00 Jens Axboe
2020-03-13 12:00 Jens Axboe
2020-03-16 12:00 Jens Axboe
2020-03-17 12:00 Jens Axboe
2020-03-18 12:00 Jens Axboe
2020-03-27 12:00 Jens Axboe
2020-04-01 12:00 Jens Axboe
2020-04-03 12:00 Jens Axboe
2020-04-07 12:00 Jens Axboe
2020-04-08 12:00 Jens Axboe
2020-04-09 12:00 Jens Axboe
2020-04-14 12:00 Jens Axboe
2020-04-16 12:00 Jens Axboe
2020-04-17 12:00 Jens Axboe
2020-04-18 12:00 Jens Axboe
2020-04-21 12:00 Jens Axboe
2020-04-22 12:00 Jens Axboe
2020-04-30 12:00 Jens Axboe
2020-05-12 12:00 Jens Axboe
2020-05-14 12:00 Jens Axboe
2020-05-15 12:00 Jens Axboe
2020-05-19 12:00 Jens Axboe
2020-05-20 12:00 Jens Axboe
2020-05-21 12:00 Jens Axboe
2020-05-22 12:00 Jens Axboe
2020-05-24 12:00 Jens Axboe
2020-05-25 12:00 Jens Axboe
2020-05-26 12:00 Jens Axboe
2020-05-29 12:00 Jens Axboe
2020-05-30 12:00 Jens Axboe
2020-06-03 12:00 Jens Axboe
2020-06-04 12:00 Jens Axboe
2020-06-06 12:00 Jens Axboe
2020-06-08 12:00 Jens Axboe
2020-06-10 12:00 Jens Axboe
2020-06-13 12:00 Jens Axboe
2020-06-22 12:00 Jens Axboe
2020-06-24 12:00 Jens Axboe
2020-06-25 12:00 Jens Axboe
2020-06-29 12:00 Jens Axboe
2020-07-03 12:00 Jens Axboe
2020-07-04 12:00 Jens Axboe
2020-07-05 12:00 Jens Axboe
2020-07-09 12:00 Jens Axboe
2020-07-14 12:00 Jens Axboe
2020-07-15 12:00 Jens Axboe
2020-07-18 12:00 Jens Axboe
2020-07-19 12:00 Jens Axboe
2020-07-21 12:00 Jens Axboe
2020-07-22 12:00 Jens Axboe
2020-07-25 12:00 Jens Axboe
2020-07-26 12:00 Jens Axboe
2020-07-27 12:00 Jens Axboe
2020-07-28 12:00 Jens Axboe
2020-08-02 12:00 Jens Axboe
2020-08-08 12:00 Jens Axboe
2020-08-11 12:00 Jens Axboe
2020-08-12 12:00 Jens Axboe
2020-08-13 12:00 Jens Axboe
2020-08-14 12:00 Jens Axboe
2020-08-15 12:00 Jens Axboe
2020-08-17 12:00 Jens Axboe
2020-08-18 12:00 Jens Axboe
2020-08-19 12:00 Jens Axboe
2020-08-20 12:00 Jens Axboe
2020-08-22 12:00 Jens Axboe
2020-08-23 12:00 Jens Axboe
2020-08-28 12:00 Jens Axboe
2020-08-29 12:00 Jens Axboe
2020-08-30 12:00 Jens Axboe
2020-09-01 12:00 Jens Axboe
2020-09-02 12:00 Jens Axboe
2020-09-04 12:00 Jens Axboe
2020-09-06 12:00 Jens Axboe
2020-09-07 12:00 Jens Axboe
2020-09-08 12:00 Jens Axboe
2020-09-09 12:00 Jens Axboe
2020-09-10 12:00 Jens Axboe
2020-09-12 12:00 Jens Axboe
2020-09-15 12:00 Jens Axboe
2020-10-10 12:00 Jens Axboe
2020-10-11 12:00 Jens Axboe
2020-10-14 12:00 Jens Axboe
2020-10-15 12:00 Jens Axboe
2020-10-29 12:00 Jens Axboe
2020-10-31 12:00 Jens Axboe
2020-11-02 13:00 Jens Axboe
2020-11-05 13:00 Jens Axboe
2020-11-06 13:00 Jens Axboe
2020-11-12 20:51 ` Rebecca Cran
2020-11-10 13:00 Jens Axboe
2020-11-13 13:00 Jens Axboe
2020-11-14 13:00 Jens Axboe
2020-11-23 13:00 Jens Axboe
2020-11-26 13:00 Jens Axboe
2020-11-28 13:00 Jens Axboe
2020-12-04 13:00 Jens Axboe
2020-12-05 13:00 Jens Axboe
2020-12-06 13:00 Jens Axboe
2020-12-08 13:00 Jens Axboe
2020-12-16 13:00 Jens Axboe
2020-12-18 13:00 Jens Axboe
2020-12-25 13:00 Jens Axboe
2020-12-30 13:00 Jens Axboe
2021-01-06 13:00 Jens Axboe
2021-01-07 13:00 Jens Axboe
2021-01-08 13:00 Jens Axboe
2021-01-10 13:00 Jens Axboe
2021-01-13 13:00 Jens Axboe
2021-01-16 13:00 Jens Axboe
2021-01-17 13:00 Jens Axboe
2021-01-24 13:00 Jens Axboe
2021-01-26 13:00 Jens Axboe
2021-01-27 13:00 Jens Axboe
2021-01-28 13:00 Jens Axboe
2021-01-30 13:00 Jens Axboe
2021-02-11 13:00 Jens Axboe
2021-02-15 13:00 Jens Axboe
2021-02-17 13:00 Jens Axboe
2021-02-22 13:00 Jens Axboe
2021-03-07 13:00 Jens Axboe
2021-03-09 13:00 Jens Axboe
2021-03-10 13:00 Jens Axboe
2021-03-11 13:00 Jens Axboe
2021-03-12 13:00 Jens Axboe
2021-03-18 12:00 Jens Axboe
2021-03-19 12:00 Jens Axboe
2021-03-31 12:00 Jens Axboe
2021-04-11 12:00 Jens Axboe
2021-04-13 12:00 Jens Axboe
2021-04-14 12:00 Jens Axboe
2021-04-16 12:00 Jens Axboe
2021-04-17 12:00 Jens Axboe
2021-04-23 12:00 Jens Axboe
2021-04-24 12:00 Jens Axboe
2021-04-26 12:00 Jens Axboe
2021-04-28 12:00 Jens Axboe
2021-05-07 12:00 Jens Axboe
2021-05-09 12:00 Jens Axboe
2021-05-11 12:00 Jens Axboe
2021-05-12 12:00 Jens Axboe
2021-05-15 12:00 Jens Axboe
2021-05-19 12:00 Jens Axboe
2021-05-26 12:00 Jens Axboe
2021-05-27 12:00 Jens Axboe
2021-05-28 12:00 Jens Axboe
2021-06-04 12:00 Jens Axboe
2021-06-09 12:00 Jens Axboe
2021-06-11 12:00 Jens Axboe
2021-06-15 12:00 Jens Axboe
2021-06-18 12:00 Jens Axboe
2021-06-21 12:00 Jens Axboe
2021-06-30 12:00 Jens Axboe
2021-07-02 12:00 Jens Axboe
2021-07-08 12:00 Jens Axboe
2021-07-16 12:00 Jens Axboe
2021-07-26 12:00 Jens Axboe
2021-07-29 12:00 Jens Axboe
2021-08-02 12:00 Jens Axboe
2021-08-03 12:00 Jens Axboe
2021-08-04 12:00 Jens Axboe
2021-08-05 12:00 Jens Axboe
2021-08-07 12:00 Jens Axboe
2021-08-12 12:00 Jens Axboe
2021-08-14 12:00 Jens Axboe
2021-08-19 12:00 Jens Axboe
2021-08-21 12:00 Jens Axboe
2021-08-27 12:00 Jens Axboe
2021-08-28 12:00 Jens Axboe
2021-08-29 12:00 Jens Axboe
2021-09-03 12:00 Jens Axboe
2021-09-04 12:00 Jens Axboe
2021-09-04 12:00 ` Jens Axboe
2021-09-06 12:00 Jens Axboe
2021-09-09 12:00 Jens Axboe
2021-09-14 12:00 Jens Axboe
2021-09-16 12:00 Jens Axboe
2021-09-17 12:00 Jens Axboe
2021-09-21 12:00 Jens Axboe
2021-09-24 12:00 Jens Axboe
2021-09-25 12:00 Jens Axboe
2021-09-26 12:00 Jens Axboe
2021-09-27 12:00 Jens Axboe
2021-09-29 12:00 Jens Axboe
2021-09-30 12:00 Jens Axboe
2021-10-01 12:00 Jens Axboe
2021-10-02 12:00 Jens Axboe
2021-10-05 12:00 Jens Axboe
2021-10-06 12:00 Jens Axboe
2021-10-08 12:00 Jens Axboe
2021-10-10 12:00 Jens Axboe
2021-10-12 12:00 Jens Axboe
2021-10-13 12:00 Jens Axboe
2021-10-14 12:00 Jens Axboe
2021-10-15 12:00 Jens Axboe
2021-10-16 12:00 Jens Axboe
2021-10-18 12:00 Jens Axboe
2021-10-19 12:00 Jens Axboe
2021-10-20 12:00 Jens Axboe
2021-10-23 12:00 Jens Axboe
2021-10-25 15:37 ` Rebecca Cran
2021-10-25 15:41   ` Jens Axboe
2021-10-25 15:42     ` Rebecca Cran
2021-10-25 15:43       ` Jens Axboe
2021-10-26 12:00 Jens Axboe
2021-11-11 13:00 Jens Axboe
2021-11-13 13:00 Jens Axboe
2021-11-18 13:00 Jens Axboe
2021-11-20 13:00 Jens Axboe
2021-11-21 13:00 Jens Axboe
2021-11-22 13:00 Jens Axboe
2021-11-25 13:00 Jens Axboe
2021-11-26 13:00 Jens Axboe
2021-12-03 13:00 Jens Axboe
2021-12-07 13:00 Jens Axboe
2021-12-10 13:00 Jens Axboe
2021-12-11 13:00 Jens Axboe
2021-12-15 13:00 Jens Axboe
2021-12-16 13:00 Jens Axboe
2021-12-19 13:00 Jens Axboe
2021-12-24 13:00 Jens Axboe
2022-01-10 13:00 Jens Axboe
2022-01-11 13:00 Jens Axboe
2022-01-18 13:00 Jens Axboe
2022-01-19 13:00 Jens Axboe
2022-01-21 13:00 Jens Axboe
2022-01-22 13:00 Jens Axboe
2022-01-27 13:00 Jens Axboe
2022-01-29 13:00 Jens Axboe
2022-02-04 13:00 Jens Axboe
2022-02-05 13:00 Jens Axboe
2022-02-09 13:00 Jens Axboe
2022-02-12 13:00 Jens Axboe
2022-02-16 13:00 Jens Axboe
2022-02-18 13:00 Jens Axboe
2022-02-19 13:00 Jens Axboe
2022-02-21 13:00 Jens Axboe
2022-02-22 13:00 Jens Axboe
2022-02-25 13:00 Jens Axboe
2022-02-27 13:00 Jens Axboe
2022-03-08 13:00 Jens Axboe
2022-03-09 13:00 Jens Axboe
2022-03-10 13:00 Jens Axboe
2022-03-11 13:00 Jens Axboe
2022-03-12 13:00 Jens Axboe
2022-03-16 12:00 Jens Axboe
2022-03-21 12:00 Jens Axboe
2022-03-25 12:00 Jens Axboe
2022-03-29 12:00 Jens Axboe
2022-03-30 12:00 Jens Axboe
2022-03-31 12:00 Jens Axboe
2022-04-06 12:00 Jens Axboe
2022-04-07 12:00 Jens Axboe
2022-04-09 12:00 Jens Axboe
2022-04-11 12:00 Jens Axboe
2022-04-18 12:00 Jens Axboe
2022-04-30 12:00 Jens Axboe
2022-05-02 12:00 Jens Axboe
2022-05-13 12:00 Jens Axboe
2022-05-26 12:00 Jens Axboe
2022-05-30 12:00 Jens Axboe
2022-06-01 12:00 Jens Axboe
2022-06-02 12:00 Jens Axboe
2022-06-14 12:00 Jens Axboe
2022-06-16 12:00 Jens Axboe
2022-06-20 12:00 Jens Axboe
2022-06-23 12:00 Jens Axboe
2022-06-24 12:00 Jens Axboe
2022-07-02 12:00 Jens Axboe
2022-07-06 12:00 Jens Axboe
2022-07-07 12:00 Jens Axboe
2022-07-08 12:00 Jens Axboe
2022-07-12 12:00 Jens Axboe
2022-07-20 12:00 Jens Axboe
2022-07-22 12:00 Jens Axboe
2022-07-23 12:00 Jens Axboe
2022-07-28 12:00 Jens Axboe
2022-07-29 12:00 Jens Axboe
2022-08-01 12:00 Jens Axboe
2022-08-03 12:00 Jens Axboe
2022-08-04 12:00 Jens Axboe
2022-08-08 12:00 Jens Axboe
2022-08-10 12:00 Jens Axboe
2022-08-11 12:00 Jens Axboe
2022-08-12 12:00 Jens Axboe
2022-08-16 12:00 Jens Axboe
2022-08-17 12:00 Jens Axboe
2022-08-24 12:00 Jens Axboe
2022-08-25 12:00 Jens Axboe
2022-08-26 12:00 Jens Axboe
2022-08-27 12:00 Jens Axboe
2022-08-30 12:00 Jens Axboe
2022-08-31 12:00 Jens Axboe
2022-09-01 12:00 Jens Axboe
2022-09-02 12:00 Jens Axboe
2022-09-03 12:00 Jens Axboe
2022-09-04 12:00 Jens Axboe
2022-09-07 12:00 Jens Axboe
2022-09-13 12:00 Jens Axboe
2022-09-14 12:00 Jens Axboe
2022-09-16 12:00 Jens Axboe
2022-09-20 12:00 Jens Axboe
2022-09-23 12:00 Jens Axboe
2022-09-29 12:00 Jens Axboe
2022-10-04 12:00 Jens Axboe
2022-10-05 12:00 Jens Axboe
2022-10-06 12:00 Jens Axboe
2022-10-08 12:00 Jens Axboe
2022-10-15 12:00 Jens Axboe
2022-10-16 12:00 Jens Axboe
2022-10-17 12:00 Jens Axboe
2022-10-19 12:00 Jens Axboe
2022-10-20 12:00 Jens Axboe
2022-10-22 12:00 Jens Axboe
2022-10-25 12:00 Jens Axboe
2022-11-02 12:00 Jens Axboe
2022-11-03 12:00 Jens Axboe
2022-11-05 12:00 Jens Axboe
2022-11-07 13:00 Jens Axboe
2022-11-08 13:00 Jens Axboe
2022-11-15 13:00 Jens Axboe
2022-11-19 13:00 Jens Axboe
2022-11-24 13:00 Jens Axboe
2022-11-29 13:00 Jens Axboe
2022-11-30 13:00 Jens Axboe
2022-12-01 13:00 Jens Axboe
2022-12-02 13:00 Jens Axboe
2022-12-03 13:00 Jens Axboe
2022-12-13 13:00 Jens Axboe
2022-12-16 13:00 Jens Axboe
2022-12-17 13:00 Jens Axboe
2022-12-23 13:00 Jens Axboe
2023-01-12 13:00 Jens Axboe
2023-01-19 13:00 Jens Axboe
2023-01-21 13:00 Jens Axboe
2023-01-24 13:00 Jens Axboe
2023-01-25 13:00 Jens Axboe
2023-01-26 13:00 Jens Axboe
2023-01-31 13:00 Jens Axboe
2023-02-01 13:00 Jens Axboe
2023-02-04 13:00 Jens Axboe
2023-02-07 13:00 Jens Axboe
2023-02-08 13:00 Jens Axboe
2023-02-10 13:00 Jens Axboe
2023-02-11 13:00 Jens Axboe
2023-02-15 13:00 Jens Axboe
2023-02-16 13:00 Jens Axboe
2023-02-18 13:00 Jens Axboe
2023-02-21 13:00 Jens Axboe
2023-02-22 13:00 Jens Axboe
2023-02-24 13:00 Jens Axboe
2023-02-28 13:00 Jens Axboe
2023-03-01 13:00 Jens Axboe
2023-03-03 13:00 Jens Axboe
2023-03-04 13:00 Jens Axboe
2023-03-08 13:00 Jens Axboe
2023-03-15 12:00 Jens Axboe
2023-03-16 12:00 Jens Axboe
2023-03-21 12:00 Jens Axboe
2023-03-22 12:00 Jens Axboe
2023-03-28 12:00 Jens Axboe
2023-04-01 12:00 Jens Axboe
2023-04-05 12:00 Jens Axboe
2023-04-08 12:00 Jens Axboe
2023-04-11 12:00 Jens Axboe
2023-04-14 12:00 Jens Axboe
2023-04-21 12:00 Jens Axboe
2023-04-27 12:00 Jens Axboe
2023-04-28 12:00 Jens Axboe
2023-05-11 12:00 Jens Axboe
2023-05-12 12:00 Jens Axboe
2023-05-16 12:00 Jens Axboe
2023-05-17 12:00 Jens Axboe
2023-05-18 12:00 Jens Axboe
2023-05-19 12:00 Jens Axboe
2023-05-20 12:00 Jens Axboe
2023-05-24 12:00 Jens Axboe
2023-05-25 12:00 Jens Axboe
2023-05-31 12:00 Jens Axboe
2023-06-02 12:00 Jens Axboe
2023-06-09 12:00 Jens Axboe
2023-06-10 12:00 Jens Axboe
2023-06-17 12:00 Jens Axboe
2023-06-22 12:00 Jens Axboe
2023-07-04 12:00 Jens Axboe
2023-07-06 12:00 Jens Axboe
2023-07-14 12:00 Jens Axboe
2023-07-15 12:00 Jens Axboe
2023-07-16 12:00 Jens Axboe
2023-07-21 12:00 Jens Axboe
2023-07-22 12:00 Jens Axboe
2023-07-28 12:00 Jens Axboe
2023-07-29 12:00 Jens Axboe
2023-08-01 12:00 Jens Axboe
2023-08-03 12:00 Jens Axboe
2023-08-04 12:00 Jens Axboe
2023-08-15 12:00 Jens Axboe
2023-08-17 12:00 Jens Axboe
2023-08-24 12:00 Jens Axboe
2023-09-03 12:00 Jens Axboe
2023-09-12 12:00 Jens Axboe
2023-09-16 12:00 Jens Axboe
2023-09-20 12:00 Jens Axboe
2023-09-27 12:00 Jens Axboe
2023-09-29 12:00 Jens Axboe
2023-09-30 12:00 Jens Axboe
2023-10-03 12:00 Jens Axboe
2023-10-07 12:00 Jens Axboe
2023-10-14 12:00 Jens Axboe
2023-10-17 12:00 Jens Axboe
2023-10-20 12:00 Jens Axboe
2023-10-23 12:00 Jens Axboe
2023-10-24 12:00 Jens Axboe
2023-10-26 12:00 Jens Axboe
2023-11-01 12:00 Jens Axboe
2023-11-03 12:00 Jens Axboe
2023-11-04 12:00 Jens Axboe
2023-11-07 13:00 Jens Axboe
2023-11-08 13:00 Jens Axboe
2023-11-20 13:00 Jens Axboe
2023-12-12 13:00 Jens Axboe
2023-12-13 13:00 Jens Axboe
2023-12-15 13:00 Jens Axboe
2023-12-16 13:00 Jens Axboe
2023-12-20 13:00 Jens Axboe
2023-12-30 13:00 Jens Axboe
2024-01-17 13:00 Jens Axboe
2024-01-18 13:00 Jens Axboe
2024-01-19 13:00 Jens Axboe
2024-01-23 13:00 Jens Axboe
2024-01-24 13:00 Jens Axboe
2024-01-25 13:00 Jens Axboe
2024-01-26 13:00 Jens Axboe
2024-01-28 13:00 Jens Axboe
2024-02-08 13:00 Jens Axboe
2024-02-09 13:00 Jens Axboe
2024-02-13 13:00 Jens Axboe
2024-02-14 13:00 Jens Axboe
2024-02-15 13:00 Jens Axboe
2024-02-16 13:00 Jens Axboe
2024-02-17 13:00 Jens Axboe
2024-02-23 13:00 Jens Axboe
2024-02-28 13:00 Jens Axboe
2024-03-05 13:00 Jens Axboe
2024-03-06 13:00 Jens Axboe
2024-03-08 13:00 Jens Axboe
2024-03-19 12:00 Jens Axboe
2024-03-21 12:00 Jens Axboe
2024-03-22 12:00 Jens Axboe
2024-03-23 12:00 Jens Axboe
2024-03-26 12:00 Jens Axboe
2024-03-27 12:00 Jens Axboe
2024-04-03 12:00 Jens Axboe
2024-04-16 12:00 Jens Axboe
2024-04-17 12:00 Jens Axboe
2024-04-18 12:00 Jens Axboe
2024-04-19 12:00 Jens Axboe
2024-04-20 12:00 Jens Axboe
2024-04-25 12:00 Jens Axboe
2024-04-26 12:00 Jens Axboe
2024-05-01 12:00 Jens Axboe
2024-05-22 12:00 Jens Axboe
2024-05-25 12:00 Jens Axboe
2024-05-29 12:00 Jens Axboe
2024-06-01 12:00 Jens Axboe
2024-06-04 12:00 Jens Axboe
2024-06-04 12:11 ` Niklas Cassel
2024-06-04 12:53   ` Vincent Fu
2024-06-05 12:00 Jens Axboe
2024-06-07 12:00 Jens Axboe
2024-06-08 12:00 Jens Axboe
2024-06-12 12:00 Jens Axboe
2024-06-13 12:00 Jens Axboe
2024-06-15 12:00 Jens Axboe
2024-06-29 12:00 Jens Axboe
2024-07-12 12:00 Jens Axboe
2024-07-13 12:00 Jens Axboe
2024-07-16 12:00 Jens Axboe
2024-07-18 12:00 Jens Axboe
2024-07-27 12:00 Jens Axboe
2024-08-06 12:00 Jens Axboe
2024-08-07 12:00 Jens Axboe
2024-08-17 12:00 Jens Axboe
2024-08-22 12:00 Jens Axboe
2024-08-29 12:00 Jens Axboe
2024-08-30 12:00 Jens Axboe
2024-09-04 12:00 Jens Axboe
2024-09-05 12:00 Jens Axboe
2024-09-06 12:00 Jens Axboe
2024-09-07 12:00 Jens Axboe
2024-09-17 12:00 Jens Axboe
2024-09-27 12:00 Jens Axboe
2024-09-28 12:00 Jens Axboe
2024-10-01 12:00 Jens Axboe
2024-10-03 12:00 Jens Axboe
2024-10-04 12:00 Jens Axboe
2024-10-17 12:00 Jens Axboe
2024-10-29 12:00 Jens Axboe
2024-11-05 13:00 Jens Axboe
2024-11-06 13:00 Jens Axboe
2024-11-23 13:00 Jens Axboe
2024-12-05 13:00 Jens Axboe
2024-12-10 13:00 Jens Axboe
2024-12-17 13:00 Jens Axboe
2025-01-22 13:00 Jens Axboe
2025-01-23 13:00 Jens Axboe
2025-01-24 13:00 Jens Axboe
2025-02-14 13:00 Jens Axboe
2025-02-15 13:00 Jens Axboe
2025-02-18 13:00 Jens Axboe
2025-02-19 13:00 Jens Axboe
2025-02-21 13:00 Jens Axboe
2025-03-06 13:00 Jens Axboe
2025-03-07 13:00 Jens Axboe
2025-03-08 13:00 Jens Axboe
2025-03-19 12:00 Jens Axboe
2025-04-05 12:00 Jens Axboe
2025-04-08 12:00 Jens Axboe
2025-04-15 12:00 Jens Axboe
2025-04-16 12:00 Jens Axboe
2025-05-07 12:00 Jens Axboe
2025-05-08 12:00 Jens Axboe
2025-05-09 12:00 Jens Axboe
2025-05-10 12:00 Jens Axboe
2025-05-14 12:00 Jens Axboe
2025-05-17 12:00 Jens Axboe
2025-05-21 12:00 Jens Axboe
2025-05-24 12:00 Jens Axboe
2025-06-01 12:00 Jens Axboe
2025-06-03 12:00 Jens Axboe
2025-06-05 12:00 Jens Axboe
2025-06-24 12:00 Jens Axboe
2025-07-01 12:00 Jens Axboe
2025-07-09 12:00 Jens Axboe
2025-07-10 12:00 Jens Axboe
2025-07-17 12:00 Jens Axboe
2025-07-19 12:00 Jens Axboe
2025-07-23 12:00 Jens Axboe
2025-07-24 12:00 Jens Axboe
2025-08-01 12:00 Jens Axboe
2025-08-03 12:00 Jens Axboe
2025-08-06 12:00 Jens Axboe
2025-08-08 12:00 Jens Axboe
2025-08-10 12:00 Jens Axboe
2025-08-12 12:00 Jens Axboe
2025-08-19 12:00 Jens Axboe
2025-08-20 12:00 Jens Axboe
2025-08-21 12:00 Jens Axboe
2025-08-22 12:00 Jens Axboe
2025-08-23 12:00 Jens Axboe
2025-08-26 12:00 Jens Axboe
2025-08-27 12:00 Jens Axboe
2025-09-04 12:00 Jens Axboe
2025-09-05 12:00 Jens Axboe
2025-09-06 12:00 Jens Axboe
2025-09-09 12:00 Jens Axboe
2025-09-17 12:00 Jens Axboe
2025-09-18 12:00 Jens Axboe
2025-09-19 12:00 Jens Axboe
2025-09-24 12:00 Jens Axboe
2025-09-26 12:00 Jens Axboe
2025-10-02 12:00 Jens Axboe
2025-10-05 12:00 Jens Axboe
2025-10-06 12:00 Jens Axboe
2025-10-09 12:00 Jens Axboe
2025-10-10 12:00 Jens Axboe
2025-10-11 12:00 Jens Axboe
2025-10-16 12:00 Jens Axboe
2025-10-29 12:00 Jens Axboe
2025-10-30 12:00 Jens Axboe
2025-10-31 12:00 Jens Axboe
2025-11-01 12:00 Jens Axboe
2025-11-06 13:00 Jens Axboe
2025-11-15 13:00 Jens Axboe
2025-11-18 13:00 Jens Axboe
2025-11-19 13:00 Jens Axboe
2025-11-25 13:00 Jens Axboe
2025-12-09 13:00 Jens Axboe
2025-12-14 13:00 Jens Axboe
2025-12-17 13:00 Jens Axboe
2025-12-19 13:00 Jens Axboe
2025-12-30 13:00 Jens Axboe
2026-01-08 13:00 Jens Axboe
2026-01-12 13:00 Jens Axboe
2026-01-16 13:00 Jens Axboe
2026-01-17 13:00 Jens Axboe
2026-01-21 13:00 Jens Axboe
2026-01-24 13:00 Jens Axboe
2026-01-28 13:00 Jens Axboe
2026-01-31 13:00 Jens Axboe
2026-02-03 13:00 Jens Axboe
2026-02-06 13:00 Jens Axboe
2026-02-09 13:00 Jens Axboe
2026-02-10 13:00 Jens Axboe
2026-02-14 13:00 Jens Axboe
2026-02-25 13:00 Jens Axboe
2026-03-02 13:00 Jens Axboe
2026-03-03 13:00 Jens Axboe
2026-03-04 13:00 Jens Axboe
2026-03-10 12:00 Jens Axboe
2026-03-11 12:00 Jens Axboe
2026-03-17 12:00 Jens Axboe
2026-03-19 12:00 Jens Axboe
2026-04-02 12:00 Jens Axboe
2026-04-07 12:00 Jens Axboe
2026-04-08 12:00 Jens Axboe
2026-04-17 12:00 Jens Axboe
2026-04-18 12:00 Jens Axboe
2026-04-23 12:00 Jens Axboe
2026-04-29 12:00 Jens Axboe
2026-05-01 12:00 Jens Axboe
2026-05-13 12:00 Jens Axboe
2026-05-16 12:00 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=20141010120003.3BDF140155@lyth.info \
    --to=axboe@kernel.dk \
    --cc=fio@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox