From: Nick Piggin <nickpiggin@yahoo.com.au>
To: David Howells <dhowells@redhat.com>
Cc: akpm@osdl.org, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH] AFS: Implement shared-writable mmap [try #2]
Date: Thu, 17 May 2007 03:28:13 +1000 [thread overview]
Message-ID: <464B3F2D.9030603@yahoo.com.au> (raw)
In-Reply-To: <23262.1179334587@redhat.com>
David Howells wrote:
> Nick Piggin <nickpiggin@yahoo.com.au> wrote:
>
>
>>>I can't call invalidate_inode_pages() or similar because that might
>>>incorrectly kill one of B's writes (or someone else's writes); besides,
>>>the on-server file hasn't changed.
>>
>>Why would that kill anyone's writes?
>
>
> Because invalidate_inode_pages() forcibly removes the dirty flag from each page
It had better not. We use that sucker to nuke pagecache when we're trying to
reclaim inodes, for example...
>>>I can't as it can/would deadlock if called from prepare_write() in two
>>>different ways.
>>
>>Which ways? Are you talking about prepare_write being called from
>>page_mkwrite, or anywhere?
>
>
> (1) prepare_write() is called with the target page locked and does not release
> the lock. The truncation routines lock the page prior to invalidating it.
> Any truncation routine that skips locked pages is of no use.
You can drop the lock, do the invalidation, and return AOP_TRUNCATED_PAGE. The
new aops patches will provide a better solution, but that will work today.
> (2) Consider a run of pages that make up a single write by one user. Two
> other writes from other users may be attempting to overwrite that run at
> the same time. Each of them would need to invalidate the other's locked
> page(s).
See #1.
> Furthermore, the caller of prepare_write() probably won't take kindly to the
> page it's dealing with being evicted from the pagecache.
It's fine if you return AOP_TRUNCATED_PAGE.
>>More generally it sounds like a nasty thing to have a writeback cache if it
>>can become incoherent (due to dirty pages that subsequently cannot be
>>written back) without notification. Have you tried doing a write-through
>>one?
>
>
> How do you do a write-through cache for shared-writable mmap?
I just mean more generally. simple write(2) writes, for starters.
For shared writable mmap? I don't know... does POSIX require mmap data
to be coherent with read(2)/write(2)? ;)
>>You may be clearing PG_uptodate, but isn't there still an underlying problem
>>that you can have mappings to the page at that point? If that isn't a problem
>>for you, then I don't know why you would have to clear PG_uptodate at all.
>
>
> There might be, yes. I guess I should ask the VM to nuke all PTEs to each of
> these pages too.
That's what the invalidate / truncate routines do.
--
SUSE Labs, Novell Inc.
next prev parent reply other threads:[~2007-05-16 17:28 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-16 10:02 [PATCH] AFS: Implement shared-writable mmap [try #2] David Howells
2007-05-16 12:07 ` Nick Piggin
2007-05-16 13:16 ` David Howells
2007-05-16 13:32 ` Nick Piggin
2007-05-16 16:12 ` David Howells
2007-05-16 16:32 ` Nick Piggin
2007-05-16 16:56 ` David Howells
2007-05-16 17:28 ` Nick Piggin [this message]
2007-05-16 17:46 ` David Howells
2007-05-16 17:59 ` Nick Piggin
2007-05-16 18:45 ` David Howells
2007-05-17 6:39 ` Nick Piggin
2007-05-17 12:30 ` David Howells
2007-05-17 17:46 ` David Howells
2007-05-18 2:29 ` Nick Piggin
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=464B3F2D.9030603@yahoo.com.au \
--to=nickpiggin@yahoo.com.au \
--cc=akpm@osdl.org \
--cc=dhowells@redhat.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@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.