linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@linux-foundation.org>
To: Peter Zijlstra <peterz@infradead.org>, Hugh Dickins <hughd@google.com>
Cc: Dave Hansen <dave.hansen@intel.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
	linux-mm <linux-mm@kvack.org>,
	Russell King - ARM Linux <linux@arm.linux.org.uk>,
	Tony Luck <tony.luck@intel.com>
Subject: Re: Dirty/Access bits vs. page content
Date: Tue, 22 Apr 2014 14:36:40 -0700	[thread overview]
Message-ID: <CA+55aFzM+NpE-EzJdDeYX=cqWRzkGv9o-vybDR=oFtDLMRK-mA@mail.gmail.com> (raw)
In-Reply-To: <20140422075459.GD11182@twins.programming.kicks-ass.net>

On Tue, Apr 22, 2014 at 12:54 AM, Peter Zijlstra <peterz@infradead.org> wrote:
>
> So PAGE_FLAGS_CHECK_AT_FREE doesn't include PG_dirty, so while we now
> properly mark the page dirty, we could continue and simply free the
> thing?

Yes. But being free'd while dirty should be fairly normal for
anonymous pages, no? And while I did a "pte_mkclean()" the the
PageAnon() case (so that we won't waste time on "set_page_dirty()" on
pages we don't care about, a concurrent truncate() could have turned
what *used* to be a file-backed page into just a dirty page with no
mapping any more.

So I don't think we would necessarily want to check for PG_dirty at
page freeing time, because freeing dirty pages isn't necessarily
wrong. For example, tmpfs/shmfs pages are generally always dirty, and
would get freed when the inode is deleted.

That said, Dave Hansen did report a BUG_ON() in
mpage_prepare_extent_to_map(). His line number was odd, but I assume
it's this one:

        BUG_ON(PageWriteback(page));

which may be indicative of some oddity here wrt the dirty bit.

So I'm a bit worried.  I'm starting to think that we need to do
"set_page_dirty_lock()". It *used* to be the case that because we held
the page table lock and the page used to be mapped (even if we then
unmapped it), page_mapping() could not go away from under us because
truncate would see it in the rmap list and then get serialized on that
page table lock. But moving the set_page_dirty() later - and to
outside the page table lock - means that we probably need to use that
version that takes the page lock.

Which might kind of suck from a performance angle. But it might
explain DaveH's BUG_ON() when testing those patches?

I wonder if we could hold on to the page mapping some other way than
taking that page lock, because taking that page lock sounds
potentially damn expensive.

Who is the master of the lock_page() semantics? Hugh Dickins again?
I'm bringing him in for this issue too, since whenever there is some
vm locking issue, he is always on top of it.

Hugh - I'm assuming you are on linux-mm. If not, holler, and I'll send
you the two patches I wrote for the TLB dirty shootdown (short
explanation: dirty bit setting needs to be delayed until after tlb
flushing, since other CPU's may be busily writing to the page until
that time).

                    Linus

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2014-04-22 21:36 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1398032742.19682.11.camel@pasglop>
     [not found] ` <CA+55aFz1sK+PF96LYYZY7OB7PBpxZu-uNLWLvPiRz-tJsBqX3w@mail.gmail.com>
     [not found]   ` <1398054064.19682.32.camel@pasglop>
     [not found]     ` <1398057630.19682.38.camel@pasglop>
     [not found]       ` <CA+55aFwWHBtihC3w9E4+j4pz+6w7iTnYhTf4N3ie15BM9thxLQ@mail.gmail.com>
     [not found]         ` <53558507.9050703@zytor.com>
     [not found]           ` <CA+55aFxGm6J6N=4L7exLUFMr1_siNGHpK=wApd9GPCH1=63PPA@mail.gmail.com>
     [not found]             ` <53559F48.8040808@intel.com>
2014-04-22  0:31               ` Linus Torvalds
2014-04-22  0:44                 ` Linus Torvalds
2014-04-22  5:15                   ` Tony Luck
2014-04-22 14:55                     ` Linus Torvalds
2014-04-22  7:34                   ` Peter Zijlstra
2014-04-22  7:54                   ` Peter Zijlstra
2014-04-22 21:36                     ` Linus Torvalds [this message]
2014-04-22 21:46                       ` Dave Hansen
2014-04-22 22:08                         ` Linus Torvalds
2014-04-22 22:41                           ` Dave Hansen
2014-04-23  2:44                         ` Linus Torvalds
2014-04-23  3:08                       ` Hugh Dickins
2014-04-23  4:23                         ` Linus Torvalds
2014-04-23  6:14                           ` Benjamin Herrenschmidt
2014-04-23 18:41                         ` Jan Kara
2014-04-23 19:33                           ` Linus Torvalds
2014-04-24  6:51                             ` Peter Zijlstra
2014-04-24 18:40                               ` Hugh Dickins
2014-04-24 19:45                                 ` Linus Torvalds
2014-04-24 20:02                                   ` Hugh Dickins
2014-04-24 23:46                                     ` Linus Torvalds
2014-04-25  1:37                                       ` Benjamin Herrenschmidt
2014-04-25  2:41                                         ` Benjamin Herrenschmidt
2014-04-25  2:46                                           ` Linus Torvalds
2014-04-25  2:50                                             ` H. Peter Anvin
2014-04-25  3:03                                               ` Linus Torvalds
2014-04-25 12:01                                                 ` Hugh Dickins
2014-04-25 13:51                                                   ` Peter Zijlstra
2014-04-25 19:41                                                     ` Hugh Dickins
2014-04-26 18:07                                                       ` Peter Zijlstra
2014-04-27  7:20                                                         ` Peter Zijlstra
2014-04-27 12:20                                                           ` Hugh Dickins
2014-04-27 19:33                                                             ` Peter Zijlstra
2014-04-27 19:47                                                               ` Linus Torvalds
2014-04-27 20:09                                                             ` Hugh Dickins
2014-04-28  9:25                                                               ` Peter Zijlstra
2014-04-28 10:14                                                                 ` Peter Zijlstra
2014-04-27 16:21                                                           ` Linus Torvalds
2014-04-27 23:13                                                             ` Benjamin Herrenschmidt
2014-04-25 16:54                                                   ` Dave Hansen
2014-04-25 18:41                                                     ` Hugh Dickins
2014-04-25 22:00                                                       ` Dave Hansen
2014-04-26  3:11                                                         ` Hugh Dickins
2014-04-26  3:48                                                           ` Linus Torvalds
2014-04-25 17:56                                                   ` Linus Torvalds
2014-04-25 19:13                                                     ` Hugh Dickins
2014-04-25 16:30                                       ` Dave Hansen
2014-04-23 20:11                           ` Hugh Dickins
2014-04-24  8:49                             ` Jan Kara

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='CA+55aFzM+NpE-EzJdDeYX=cqWRzkGv9o-vybDR=oFtDLMRK-mA@mail.gmail.com' \
    --to=torvalds@linux-foundation.org \
    --cc=benh@kernel.crashing.org \
    --cc=dave.hansen@intel.com \
    --cc=hpa@zytor.com \
    --cc=hughd@google.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=linux@arm.linux.org.uk \
    --cc=peterz@infradead.org \
    --cc=tony.luck@intel.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox