Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: 9.99.73 NFS file corruption



On 2020/10/18 2:25, Anthony Mallet wrote:
I made some progress on this, and could apparently fix something. See
attached a sample script that reliably reproduces the issue.

To summarize: when the script is run on the NFS client, changes in the
sqlite database do appear on the NFS client, but do not appear on
the server.

As Chuck suggested in another e-mail, reverting uvm_bio.c to previous 1.121
$NetBSD: uvm_bio.c,v 1.121 2020/07/09 09:24:32 rin Exp $
appears to fix the issue (at least the test script was working 3 times
in a row while it always failed with uvm_bio.c:1.222).

Thank you very much for providing test case. I can reproduce the
problem on amd64 and i386. I've reverted that commit.

I'm so sorry everyone for breakage.

Thanks,
rin

-------- Forwarded Message --------
Subject: CVS commit: src/sys/uvm
Date: Sun, 18 Oct 2020 08:52:15 +0000
From: Rin Okuyama <rin%netbsd.org@localhost>
Reply-To: source-changes-d%NetBSD.org@localhost
To: source-changes-full%NetBSD.org@localhost

Module Name:	src
Committed By:	rin
Date:		Sun Oct 18 08:52:15 UTC 2020

Modified Files:
	src/sys/uvm: uvm_bio.c

Log Message:
PR kern/55658

Revert rev 1.122:
http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/uvm/uvm_bio.c#rev1.122

If this commit is applied to NFS client, changes to files in client
side are sometimes invisible in server side, which results in file
corruption.

Demonstrated by test code provided by Anthony Mallet:
https://mail-index.netbsd.org/current-users/2020/10/17/msg039708.html

Whether the test case above passes or not depends on architectures
and size of NFS I/O specified by -r and -w options of mount_nfs(8)
(the default size is 32KB for x86 and 8KB for other archs).

Whereas it fails on amd64 and i386 with the default size, it passes
on other archs (aarch64, arm, alpha, m68k, and powerpc at least) with
their default. On most ports, it fails with some I/O sizes.

However, the condition for failure is still unclear; whereas it fails
with 2KB I/O size on amiga (m68k, 8KB page), it passes with same I/O
size on alpha (8KB page). It may depends on some VM parameters or
details in pmap implementation, or some race conditions are involved.

Great thanks to Anthony Mallet for providing the test code, and sorry
everyone for breakage.


To generate a diff of this commit:
cvs rdiff -u -r1.122 -r1.123 src/sys/uvm/uvm_bio.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.


Home | Main Index | Thread Index | Old Index