All of lore.kernel.org
 help / color / mirror / Atom feed
From: Martin Wilck <mwilck@suse.com>
To: Jens Axboe <axboe@kernel.dk>, Hannes Reinecke <hare@suse.de>,
	Jan Kara <jack@suse.com>
Cc: Christoph Hellwig <hch@lst.de>,
	"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>
Subject: Re: Silent data corruption in blkdev_direct_IO()
Date: Mon, 16 Jul 2018 21:05:56 +0200	[thread overview]
Message-ID: <607e800a52055e4ce7c95d2ed23702ee3c218648.camel@suse.com> (raw)
In-Reply-To: <d7baebbd-1cd5-e6f1-c170-15e6dde67797@kernel.dk>

On Fri, 2018-07-13 at 14:52 -0600, Jens Axboe wrote:
> On 7/13/18 2:48 PM, Martin Wilck wrote:
> > > 
> > > > However, so far I've only identified a minor problem, see below
> > > > -
> > > > it
> > > > doesn't explain the data corruption we're seeing.
> > > 
> > > What would help is trying to boil down a test case. So far it's a
> > > lot
> > > of hand waving, and nothing that can really help narrow down what
> > > is
> > > going on here.
> > 
> > It's not that we didn't try. We've run fio with verification on
> > block
> > devices with varying io sizes, block sizes, and alignments, but so
> > far
> > we haven't hit the issue. We've also tried to reproduce it by
> > approximating the customer's VM setup, with no success up to now.
> 
> I ran some testing yesterday as well, but didn't trigger anything.
> Didn't expect to either, as all the basic functionality was verified
> when the patch was done. It's not really a path with a lot of corner
> cases, so it's really weird that we're seeing anything at all. Which
> is
> why I'm suspecting it's something else entirely, but it's really hard
> to
> guesstimate on that with no clues at all.
> 
> > However, we're now much closer than we used to be, so I'm confident
> > that we'll be able to present more concrete facts soon.
> 
> OK, sounds good.

Jan Kara has provided very convincing analysis and provided a patch
which we are going to have to the customer test. 

By calling bio_iov_iter_get_pages() only once,
__blkdev_direct_IO_simple() may not transfer all requested bytes,
because bio_iov_iter_get_pages() doesn't necessarily exhaust all data
in the iov_iter. Thus a short write may occur, and
__generic_file_write_iter() falls back to buffered IO. We've actually
observed these "short direct writes" in the error case with an
instrumented kernel (in a trace I got, ~13000/800000 direct write ops
on a block device transferred less data than requested).

We suspect that this concurrency of direct and buffered writes may
cause the corruption the customer observes.

Does that make sense to you?

Regards,
Martin

-- 
Dr. Martin Wilck <mwilck@suse.com>, Tel. +49 (0)911 74053 2107
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)

  reply	other threads:[~2018-07-16 19:05 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-12 14:36 Silent data corruption in blkdev_direct_IO() Hannes Reinecke
2018-07-12 15:08 ` Jens Axboe
2018-07-12 16:11   ` Martin Wilck
2018-07-12 16:14   ` Hannes Reinecke
2018-07-12 16:20     ` Jens Axboe
2018-07-12 16:42       ` Jens Axboe
2018-07-13  6:47         ` Martin Wilck
2018-07-13 16:56         ` Martin Wilck
2018-07-13 18:00           ` Jens Axboe
2018-07-13 18:50             ` Jens Axboe
2018-07-13 22:21               ` Martin Wilck
2018-07-13 20:48             ` Martin Wilck
2018-07-13 20:52               ` Jens Axboe
2018-07-16 19:05                 ` Martin Wilck [this message]
2018-07-12 23:29 ` Ming Lei
2018-07-13 18:54   ` Jens Axboe
2018-07-13 22:29     ` Martin Wilck
2018-07-16 11:45       ` Ming Lei
2018-07-18  0:07         ` Martin Wilck
2018-07-18  2:48           ` Ming Lei
2018-07-18  7:32             ` Martin Wilck
2018-07-18  7:54               ` Ming Lei
2018-07-18  9:20                 ` Johannes Thumshirn
2018-07-18 11:40                   ` Jan Kara
2018-07-18 11:57                     ` Jan Kara
2018-07-19  9:39                 ` [PATCH 0/2] Fix silent " Martin Wilck
2018-07-19  9:39                   ` [PATCH 1/2] block: bio_iov_iter_get_pages: fix size of last iovec Martin Wilck
2018-07-19 10:05                     ` Hannes Reinecke
2018-07-19 10:09                     ` Ming Lei
2018-07-19 10:20                     ` Jan Kara
2018-07-19 14:52                     ` Christoph Hellwig
2018-07-19  9:39                   ` [PATCH 2/2] blkdev: __blkdev_direct_IO_simple: make sure to fill up the bio Martin Wilck
2018-07-19 10:06                     ` Hannes Reinecke
2018-07-19 10:21                     ` Ming Lei
2018-07-19 10:37                       ` Jan Kara
2018-07-19 10:46                         ` Ming Lei
2018-07-19 11:08                         ` Al Viro
2018-07-19 14:53                           ` Christoph Hellwig
2018-07-19 15:06                             ` Jan Kara
2018-07-19 15:11                               ` Christoph Hellwig
2018-07-19 19:21                                 ` Martin Wilck
2018-07-19 19:34                             ` Martin Wilck
2018-07-19 10:45                     ` Jan Kara
2018-07-19 12:23                       ` Martin Wilck
2018-07-19 15:15                         ` Jan Kara
2018-07-19 20:01                           ` Martin Wilck
2018-07-19 11:04                     ` Ming Lei
2018-07-19 11:56                       ` Jan Kara
2018-07-19 12:20                         ` Ming Lei
2018-07-19 15:21                           ` Jan Kara
2018-07-19 19:06                             ` Martin Wilck
2018-07-19 12:25                         ` Martin Wilck
2018-07-19 10:08                   ` [PATCH 0/2] Fix silent data corruption in blkdev_direct_IO() Hannes Reinecke
2018-07-19 14:50                   ` Christoph Hellwig

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=607e800a52055e4ce7c95d2ed23702ee3c218648.camel@suse.com \
    --to=mwilck@suse.com \
    --cc=axboe@kernel.dk \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=jack@suse.com \
    --cc=linux-block@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 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.