All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <axboe@kernel.dk>
To: Martin Wilck <mwilck@suse.com>, Hannes Reinecke <hare@suse.de>
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: Fri, 13 Jul 2018 12:50:23 -0600	[thread overview]
Message-ID: <6ba0d73a-aaf7-f283-88e7-eb151caa8628@kernel.dk> (raw)
In-Reply-To: <b85c5eff-d6dc-e43c-8e2c-608249ae81a2@kernel.dk>

On 7/13/18 12:00 PM, Jens Axboe wrote:
> On 7/13/18 10:56 AM, Martin Wilck wrote:
>> On Thu, 2018-07-12 at 10:42 -0600, Jens Axboe wrote:
>>>
>>> Hence the patch I sent is wrong, the code actually looks fine. Which
>>> means we're back to trying to figure out what is going on here. It'd
>>> be great with a test case...
>>
>> We don't have an easy test case yet. But the customer has confirmed
>> that the problem occurs with upstream 4.17.5, too. We also confirmed
>> again that the problem occurs when the kernel uses the kmalloc() code
>> path in __blkdev_direct_IO_simple().
>>
>> My personal suggestion would be to ditch __blkdev_direct_IO_simple()
>> altogether. After all, it's not _that_ much simpler thatn
>> __blkdev_direct_IO(), and it seems to be broken in a subtle way.
> 
> That's not a great suggestion at all, we need to find out why we're
> hitting the issue. For all you know, the bug could be elsewhere and
> we're just going to be hitting it differently some other way. The
> head-in-the-sand approach is rarely a win long term.
> 
> It's saving an allocation per IO, that's definitely measurable on
> the faster storage. For reads, it's also not causing a context
> switch for dirtying pages. I'm not a huge fan of multiple cases
> in general, but this one is definitely warranted in an era where
> 1 usec is a lot of extra time for an IO.
> 
>> 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.

When someone reports to you that some kind of data corruption occurs,
you need to find out as many details you can. Ideally they can give you
a test case, but if they can't, you ask as many questions as possible to
help YOU make a test case.

- What is the nature of the corruption? Is it reads or writes? Is it
  zeroes, random data, or data from somewhere else? How big is the
  corrupted area?

- What does the workload look like that reproduces it? If they don't
  really know and they can't give you a reproducer, you help them with
  tracing to give you the information you need.

Those are a great start. Right now we have zero information, other than
reverting that patch fixes it. This means that we're likely dealing with
IO that is larger than 16k, since we're going to be hitting the same
path for <= 16k ios with the patch reverted. We also know it's less than
1MB. But that's it. I don't even know if it's writes, since your (and
Hannes's) report has no details at all.

Go look at what you ask customers to provide for bug reports, then apply
some of that to this case...

-- 
Jens Axboe

  reply	other threads:[~2018-07-13 18:50 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 [this message]
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
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=6ba0d73a-aaf7-f283-88e7-eb151caa8628@kernel.dk \
    --to=axboe@kernel.dk \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=linux-block@vger.kernel.org \
    --cc=mwilck@suse.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.