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>
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 18:56:38 +0200	[thread overview]
Message-ID: <2311947c2f0f368bd10474edb0f0f5b51dde6b7d.camel@suse.com> (raw)
In-Reply-To: <a0b0e59b-60cd-9933-6752-4c21a7a975fe@kernel.dk>

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.

However, so far I've only identified a minor problem, see below - it
doesn't explain the data corruption we're seeing.

Martin

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


>From d0c74ef1fc73c03983950c496f7490da8aa56671 Mon Sep 17 00:00:00 2001
From: Martin Wilck <mwilck@suse.com>
Date: Fri, 13 Jul 2018 18:38:44 +0200
Subject: [PATCH] fs: fix error exit in __blkdev_direct_IO_simple

Cleanup code was missing in the error return path.
---
 fs/block_dev.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/fs/block_dev.c b/fs/block_dev.c
index 7ec920e..b82b516 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -218,8 +218,12 @@ __blkdev_direct_IO_simple(struct kiocb *iocb,
struct iov_iter *iter,
 	bio.bi_end_io = blkdev_bio_end_io_simple;
 
 	ret = bio_iov_iter_get_pages(&bio, iter);
-	if (unlikely(ret))
+	if (unlikely(ret)) {
+		if (vecs != inline_vecs)
+			kfree(vecs);
+		bio_uninit(&bio);
 		return ret;
+	}
 	ret = bio.bi_iter.bi_size;
 
 	if (iov_iter_rw(iter) == READ) {
-- 
2.17.1

  parent reply	other threads:[~2018-07-13 16:56 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 [this message]
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
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=2311947c2f0f368bd10474edb0f0f5b51dde6b7d.camel@suse.com \
    --to=mwilck@suse.com \
    --cc=axboe@kernel.dk \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --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.