From: Steve Dickson <SteveD@RedHat.com>
To: Trond Myklebust <trond.myklebust@fys.uio.no>
Cc: nfs@lists.sourceforge.net, linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [NFS] [PATCH] mmap corruption
Date: Sat, 5 Apr 2003 11:47:41 -0500 [thread overview]
Message-ID: <20030405164741.GA6450@RedHat.com> (raw)
In-Reply-To: <shsistt7wip.fsf@charged.uio.no>
Hi Trond,
On Sat, Apr 05, 2003 at 12:01:02AM +0200, Trond Myklebust wrote:
> >>>>> " " == Steve Dickson <SteveD@redhat.com> writes:
>
> That simply doesn't ring true. The nfs_wb_all() immediately after the
> call to filemap_fdatasync() should ensure that *all* scheduled writes
> will flushed out.
>
Here is my evidence your honor... :-)
1) Through my debugging I was able to show when (and only when)
the following if statement is true, there would be corruption:
nfs_notify_change(struct dentry *dentry, struct iattr *attr)
{
/*
* beginning code skipped
*/
filemap_fdatasync(inode->i_mapping);
error = nfs_wb_all(inode);
filemap_fdatawait(inode->i_mapping);
if (error)
goto out;
/*
* Every time either npages or ncommit had a value and the file size is
* immediately changed (with in a microsecond or two) by another
* truncation, followed by a mmap read, the file would be corrupted.
*/
if (NFS_I(inode)->npages || NFS_I(inode)->ncommit || NFS_I(inode)->ndirty) {
printk("nfs_notify_change: fid %Ld npages %d ncommit %d ndirty %d\n",
NFS_FILEID(inode), NFS_I(inode)->npages,
NFS_I(inode)->ncommit, NFS_I(inode)->ndirty);
}
}
I was also able to log the fact that the page was being written out (and committed)
by kupdated was after second truncation finished. At first, I was thinking
there was a problem with the nfs_fattr_obsolete() code (and still might be)
since this late write/commit is *truly* obsolete. But I just could not figure
out how to detect this event so I went with avoidance approach. Now, if the
server supplied the client with valid pre and post attrs, I believe this condition
could be detected. But I didn't have a server that did that so I could
not test out my theroy...
2) Without this patch my script that startups 300 process fails within
minutes. With this patch the script runs to completion constistanly...
I rest my case... and the verdict is?
SteveD.
next prev parent reply other threads:[~2003-04-05 16:47 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-04-04 19:20 [NFS] [PATCH] mmap corruption Steve Dickson
2003-04-04 22:01 ` Trond Myklebust
2003-04-04 22:01 ` [NFS] " Trond Myklebust
2003-04-05 16:47 ` Steve Dickson [this message]
2003-04-06 12:30 ` Trond Myklebust
2003-04-06 12:30 ` [NFS] " Trond Myklebust
2003-04-07 14:00 ` Steve Dickson
2003-04-07 14:56 ` Trond Myklebust
2003-04-07 17:39 ` Steve Dickson
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=20030405164741.GA6450@RedHat.com \
--to=steved@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nfs@lists.sourceforge.net \
--cc=trond.myklebust@fys.uio.no \
/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.