From: Christoph Hellwig <hch@infradead.org>
To: Tim Chen <tim.c.chen@linux.intel.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>,
suruchi <suruchi.a.kadu@intel.com>, ak <ak@linux.intel.com>,
Dave Hansen <dave.hansen@intel.com>,
Matthew Wilcox <willy@linux.intel.com>,
"hubert.nueckel" <hubert.nueckel@intel.com>,
beth.marsh-prime@intel.com, "doug.nelson" <doug.nelson@intel.com>,
linux-kernel <linux-kernel@vger.kernel.org>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>
Subject: Re: [Regression 3.16-rc kernel] -55% reduction in throughput for OLTP benchmark
Date: Tue, 29 Jul 2014 07:19:08 -0700 [thread overview]
Message-ID: <20140729141908.GA4464@infradead.org> (raw)
In-Reply-To: <1406584299.2970.924.camel@schen9-DESK>
Hi Tim,
I think the problem is that sdio.size doesn't get set set with
the new dio code. Please try the patch below to fix this by not
relying on that field:
diff --git a/fs/direct-io.c b/fs/direct-io.c
index 194d0d1..adbb847 100644
--- a/fs/direct-io.c
+++ b/fs/direct-io.c
@@ -71,7 +71,6 @@ struct dio_submit {
been performed at the start of a
write */
int pages_in_io; /* approximate total IO pages */
- size_t size; /* total request size (doesn't change)*/
sector_t block_in_file; /* Current offset into the underlying
file in dio_block units. */
unsigned blocks_available; /* At block_in_file. changes */
@@ -1104,7 +1103,8 @@ do_blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
unsigned blkbits = i_blkbits;
unsigned blocksize_mask = (1 << blkbits) - 1;
ssize_t retval = -EINVAL;
- loff_t end = offset + iov_iter_count(iter);
+ size_t count = iov_iter_count(iter);
+ loff_t end = offset + count;
struct dio *dio;
struct dio_submit sdio = { 0, };
struct buffer_head map_bh = { 0, };
@@ -1286,16 +1286,14 @@ do_blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode,
* This had *better* be the only place that raises -EIOCBQUEUED.
*/
BUG_ON(retval == -EIOCBQUEUED);
- if (dio->is_async && retval == 0 && dio->result &&
- ((rw == READ) || (dio->result == sdio.size)))
+ if (dio->is_async && rw == READ && retval == 0 && dio->result == count)
retval = -EIOCBQUEUED;
-
- if (retval != -EIOCBQUEUED)
+ else
dio_await_completion(dio);
- if (drop_refcount(dio) == 0) {
+ if (drop_refcount(dio) == 0)
retval = dio_complete(dio, offset, retval, false);
- } else
+ else
BUG_ON(retval != -EIOCBQUEUED);
out:
next prev parent reply other threads:[~2014-07-29 14:19 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-28 21:51 [Regression 3.16-rc kernel] -55% reduction in throughput for OLTP benchmark Tim Chen
2014-07-29 14:19 ` Christoph Hellwig [this message]
2014-07-29 16:35 ` Tim Chen
2014-07-29 16:49 ` Christoph Hellwig
2014-07-29 17:41 ` Tim Chen
2014-07-29 23:57 ` Tim Chen
2014-07-30 0:12 ` Christoph Hellwig
2014-07-31 16:13 ` Tim Chen
2014-07-31 17:07 ` Linus Torvalds
2014-07-31 17:10 ` Christoph Hellwig
2014-07-31 17:22 ` Linus Torvalds
2014-08-01 6:45 ` Al Viro
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=20140729141908.GA4464@infradead.org \
--to=hch@infradead.org \
--cc=ak@linux.intel.com \
--cc=beth.marsh-prime@intel.com \
--cc=dave.hansen@intel.com \
--cc=doug.nelson@intel.com \
--cc=hubert.nueckel@intel.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=suruchi.a.kadu@intel.com \
--cc=tim.c.chen@linux.intel.com \
--cc=viro@zeniv.linux.org.uk \
--cc=willy@linux.intel.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.