From: Jens Axboe <axboe@kernel.dk>
To: Jeremy Allison <jra@samba.org>
Cc: Pavel Begunkov <asml.silence@gmail.com>,
Stefan Metzmacher <metze@samba.org>,
io-uring <io-uring@vger.kernel.org>,
Samba Technical <samba-technical@lists.samba.org>
Subject: Re: Data Corruption bug with Samba's vfs_iouring and Linux 5.6.7/5.7rc3
Date: Thu, 7 May 2020 12:35:42 -0600 [thread overview]
Message-ID: <3130bca5-a2fb-a703-4387-65348fe1bdc8@kernel.dk> (raw)
In-Reply-To: <20200507183140.GD25085@jeremy-acer>
On 5/7/20 12:31 PM, Jeremy Allison wrote:
> On Thu, May 07, 2020 at 10:50:40AM -0600, Jens Axboe wrote:
>> On 5/7/20 10:48 AM, Jeremy Allison wrote:
>>> On Thu, May 07, 2020 at 10:43:17AM -0600, Jens Axboe wrote:
>>>>
>>>> Just like for regular system calls, applications must be able to deal
>>>> with short IO.
>>>
>>> Thanks, that's a helpful definitive reply. Of course, the SMB3
>>> protocol is designed to deal with short IO replies as well, and
>>> the Samba and linux kernel clients are well-enough written that
>>> they do so. MacOS and Windows however..
>>
>> I'm honestly surprised that such broken clients exists! Even being
>> a somewhat old timer cynic...
>>
>>> Unfortunately they're the most popular clients on the planet,
>>> so we'll probably have to fix Samba to never return short IOs.
>>
>> That does sound like the best way forward, short IOs is possible
>> with regular system calls as well, but will definitely be a lot
>> more frequent with io_uring depending on the access patterns,
>> page cache, number of threads, and so on.
>
> OK, I just want to be *REALLY CLEAR* what you're telling me
> (I've already written the pread/pwrite wrappers for Samba
> that deal with short IO but want to ensure I understand
> fully before making any changes to Samba).
>
> You're saying that on a bog-standard ext4 disk file:
>
> ret = pread(fd, buf, count, offset);
>
> can return *less* than count bytes if there's no IO
> error and the file size is greater than offset+count
> and no one else is in the middle of a truncate etc. ?
>
> And:
>
> ret = pwrite(fd, buf, count, offset);
>
> can return less* than count bytes if there's no IO
> error and there's ample space on disk ?
>
> I have to say I've *never* seen that happen, and
> Samba is widely enough used that IO corruption from
> short reads/writes from MacOSX and Windows clients
> would have been widely reported by now.
>
> Look at how quickly someone spotted disk corruption
> because of the change in userspace-visible behavior
> of the io_uring interface. We only shipped that code
> 03 March 2020 and someone *already* found it.
I _think_ that will only happen on regular files if you use RWF_NOWAIT
or similar, for regular blocking it should not happen. So I don't think
you're at risk there, though I do think that anyone should write
applications with short IOs in mind or they will run into surprises down
the line. Should have been more clear!
--
Jens Axboe
next prev parent reply other threads:[~2020-05-07 18:35 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-05 10:04 Data Corruption bug with Samba's vfs_iouring and Linux 5.6.7/5.7rc3 Stefan Metzmacher
2020-05-05 14:41 ` Jens Axboe
2020-05-05 15:44 ` Jens Axboe
2020-05-05 16:53 ` Jens Axboe
2020-05-05 17:39 ` Jens Axboe
2020-05-05 17:48 ` Jeremy Allison
2020-05-05 17:50 ` Jens Axboe
[not found] ` <3a3e311c7a4bc4d4df371b95ca0c66a792fab986.camel@cryptolab.net>
2020-05-06 10:33 ` Stefan Metzmacher
2020-05-06 10:41 ` Stefan Metzmacher
[not found] ` <62e94d8a6cecf60cfba7e5ca083e90bc8f216d61.camel@cryptolab.net>
2020-05-06 14:08 ` Stefan Metzmacher
2020-05-06 14:43 ` Andreas Schneider
2020-05-06 14:46 ` Andreas Schneider
2020-05-06 15:06 ` Stefan Metzmacher
2020-05-06 17:03 ` Jeremy Allison
2020-05-06 17:13 ` Jeremy Allison
2020-05-06 18:01 ` Jeremy Allison
2020-05-05 20:19 ` Stefan Metzmacher
2020-05-06 12:55 ` Pavel Begunkov
2020-05-06 15:20 ` Stefan Metzmacher
2020-05-06 15:42 ` Pavel Begunkov
2020-05-07 16:43 ` Jens Axboe
2020-05-07 16:48 ` Jeremy Allison
2020-05-07 16:50 ` Jens Axboe
2020-05-07 18:31 ` Jeremy Allison
2020-05-07 18:35 ` Jens Axboe [this message]
2020-05-07 18:55 ` Jeremy Allison
2020-05-07 18:58 ` 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=3130bca5-a2fb-a703-4387-65348fe1bdc8@kernel.dk \
--to=axboe@kernel.dk \
--cc=asml.silence@gmail.com \
--cc=io-uring@vger.kernel.org \
--cc=jra@samba.org \
--cc=metze@samba.org \
--cc=samba-technical@lists.samba.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.