<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/mm/vmscan.c, branch linux-3.8.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.8.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.8.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2013-01-03T23:57:13Z</updated>
<entry>
<title>MM: vmscan: remove __devinit attribute.</title>
<updated>2013-01-03T23:57:13Z</updated>
<author>
<name>Greg Kroah-Hartman</name>
</author>
<published>2012-12-21T23:01:06Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=fcb35a9bac6710851bbca1b7908ca85e83aecb4a'/>
<id>urn:sha1:fcb35a9bac6710851bbca1b7908ca85e83aecb4a</id>
<content type='text'>
CONFIG_HOTPLUG is going away as an option.  As a result, the __dev*
markings need to be removed.

This change removes the use of __devinit from the file.

Based on patches originally written by Bill Pemberton, but redone by me
in order to handle some of the coding style issues better, by hand.

Cc: Bill Pemberton &lt;wfp5p@virginia.edu&gt;
Cc: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Cc: Hugh Dickins &lt;hughd@google.com&gt;
Cc: Mel Gorman &lt;mgorman@suse.de&gt;
Cc: Rik van Riel &lt;riel@redhat.com&gt;
Cc: Konstantin Khlebnikov &lt;khlebnikov@openvz.org&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>mm: fix null pointer dereference in wait_iff_congested()</title>
<updated>2012-12-28T16:42:39Z</updated>
<author>
<name>Zlatko Calusic</name>
</author>
<published>2012-12-28T02:16:38Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=ecccd1248d6e6986130ffcc3b0d003cb46a485c0'/>
<id>urn:sha1:ecccd1248d6e6986130ffcc3b0d003cb46a485c0</id>
<content type='text'>
An unintended consequence of commit 4ae0a48b5efc ("mm: modify
pgdat_balanced() so that it also handles order-0") is that
wait_iff_congested() can now be called with NULL 'struct zone *'
producing kernel oops like this:

  BUG: unable to handle kernel NULL pointer dereference
  IP: [&lt;ffffffff811542d9&gt;] wait_iff_congested+0x59/0x140

This trivial patch fixes it.

Reported-by: Zhouping Liu &lt;zliu@redhat.com&gt;
Reported-and-tested-by: Sedat Dilek &lt;sedat.dilek@gmail.com&gt;
Cc: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Cc: Mel Gorman &lt;mgorman@suse.de&gt;
Cc: Hugh Dickins &lt;hughd@google.com&gt;
Signed-off-by: Zlatko Calusic &lt;zlatko.calusic@iskon.hr&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>mm: modify pgdat_balanced() so that it also handles order-0</title>
<updated>2012-12-23T17:46:36Z</updated>
<author>
<name>Zlatko Calusic</name>
</author>
<published>2012-12-23T14:12:54Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=4ae0a48b5efc44a95f5e7bb578f9de71fd35bfd0'/>
<id>urn:sha1:4ae0a48b5efc44a95f5e7bb578f9de71fd35bfd0</id>
<content type='text'>
Teach pgdat_balanced() about order-0 allocations so that we can simplify
code in a few places in vmstat.c.

Suggested-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Zlatko Calusic &lt;zlatko.calusic@iskon.hr&gt;
Cc: Mel Gorman &lt;mgorman@suse.de&gt;
Cc: Hugh Dickins &lt;hughd@google.com&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>mm: do not sleep in balance_pgdat if there's no i/o congestion</title>
<updated>2012-12-20T15:06:56Z</updated>
<author>
<name>Zlatko Calusic</name>
</author>
<published>2012-12-19T23:25:13Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=cda73a10eb3f493871ed39f468db50a65ebeddce'/>
<id>urn:sha1:cda73a10eb3f493871ed39f468db50a65ebeddce</id>
<content type='text'>
On a 4GB RAM machine, where Normal zone is much smaller than DMA32 zone,
the Normal zone gets fragmented in time.  This requires relatively more
pressure in balance_pgdat to get the zone above the required watermark.
Unfortunately, the congestion_wait() call in there slows it down for a
completely wrong reason, expecting that there's a lot of
writeback/swapout, even when there's none (much more common).  After a
few days, when fragmentation progresses, this flawed logic translates to
a very high CPU iowait times, even though there's no I/O congestion at
all.  If THP is enabled, the problem occurs sooner, but I was able to
see it even on !THP kernels, just by giving it a bit more time to occur.

The proper way to deal with this is to not wait, unless there's
congestion.  Thanks to Mel Gorman, we already have the function that
perfectly fits the job.  The patch was tested on a machine which nicely
revealed the problem after only 1 day of uptime, and it's been working
great.

Signed-off-by: Zlatko Calusic &lt;zlatko.calusic@iskon.hr&gt;
Acked-by: Mel Gorman &lt;mgorman@suse.de&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>mm/vmscan.c: avoid possible deadlock caused by too_many_isolated()</title>
<updated>2012-12-18T23:02:15Z</updated>
<author>
<name>Fengguang Wu</name>
</author>
<published>2012-12-18T22:23:31Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=3cf23841b4b76eb94d3f8d0fb3627690e4431413'/>
<id>urn:sha1:3cf23841b4b76eb94d3f8d0fb3627690e4431413</id>
<content type='text'>
Neil found that if too_many_isolated() returns true while performing
direct reclaim we can end up waiting for other threads to complete their
direct reclaim.  If those threads are allowed to enter the FS or IO to
free memory, but this thread is not, then it is possible that those
threads will be waiting on this thread and so we get a circular deadlock.

some task enters direct reclaim with GFP_KERNEL
  =&gt; too_many_isolated() false
    =&gt; vmscan and run into dirty pages
      =&gt; pageout()
        =&gt; take some FS lock
          =&gt; fs/block code does GFP_NOIO allocation
            =&gt; enter direct reclaim again
              =&gt; too_many_isolated() true
                =&gt; waiting for others to progress, however the other
                   tasks may be circular waiting for the FS lock..

The fix is to let !__GFP_IO and !__GFP_FS direct reclaims enjoy higher
priority than normal ones, by lowering the throttle threshold for the
latter.

Allowing ~1/8 isolated pages in normal is large enough.  For example, for
a 1GB LRU list, that's ~128MB isolated pages, or 1k blocked tasks (each
isolates 32 4KB pages), or 64 blocked tasks per logical CPU (assuming 16
logical CPUs per NUMA node).  So it's not likely some CPU goes idle
waiting (when it could make progress) because of this limit: there are
much more sleeping reclaim tasks than the number of CPU, so the task may
well be blocked by some low level queue/lock anyway.

Now !GFP_IOFS reclaims won't be waiting for GFP_IOFS reclaims to progress.
 They will be blocked only when there are too many concurrent !GFP_IOFS
reclaims, however that's very unlikely because the IO-less direct reclaims
is able to progress much more faster, and they won't deadlock each other.
The threshold is raised high enough for them, so that there can be
sufficient parallel progress of !GFP_IOFS reclaims.

[akpm@linux-foundation.org: tweak comment]
Signed-off-by: Wu Fengguang &lt;fengguang.wu@intel.com&gt;
Cc: Torsten Kaiser &lt;just.for.lkml@googlemail.com&gt;
Tested-by: NeilBrown &lt;neilb@suse.de&gt;
Reviewed-by: Minchan Kim &lt;minchan.kim@gmail.com&gt;
Acked-by: KOSAKI Motohiro &lt;kosaki.motohiro@jp.fujitsu.com&gt;
Acked-by: Rik van Riel &lt;riel@redhat.com&gt;
Cc: Mel Gorman &lt;mel@csn.ul.ie&gt;
Cc: Johannes Weiner &lt;hannes@cmpxchg.org&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>vmscan: comment too_many_isolated()</title>
<updated>2012-12-18T23:02:15Z</updated>
<author>
<name>Fengguang Wu</name>
</author>
<published>2012-12-18T22:23:28Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d37dd5dcb955dd8c2cdd4eaef1f15d1b7ecbc379'/>
<id>urn:sha1:d37dd5dcb955dd8c2cdd4eaef1f15d1b7ecbc379</id>
<content type='text'>
Comment "Why it's doing so" rather than "What it does" as proposed by
Andrew Morton.

Signed-off-by: Wu Fengguang &lt;fengguang.wu@intel.com&gt;
Reviewed-by: KOSAKI Motohiro &lt;kosaki.motohiro@jp.fujitsu.com&gt;
Reviewed-by: Minchan Kim &lt;minchan.kim@gmail.com&gt;
Reviewed-by: Rik van Riel &lt;riel@redhat.com&gt;
Cc: Mel Gorman &lt;mel@csn.ul.ie&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>vmscan: use N_MEMORY instead N_HIGH_MEMORY</title>
<updated>2012-12-13T01:38:33Z</updated>
<author>
<name>Lai Jiangshan</name>
</author>
<published>2012-12-12T21:51:43Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=48fb2e240c4275c6ba4f53c9397f5fd6f350c3a7'/>
<id>urn:sha1:48fb2e240c4275c6ba4f53c9397f5fd6f350c3a7</id>
<content type='text'>
N_HIGH_MEMORY stands for the nodes that has normal or high memory.
N_MEMORY stands for the nodes that has any memory.

The code here need to handle with the nodes which have memory, we should
use N_MEMORY instead.

Signed-off-by: Lai Jiangshan &lt;laijs@cn.fujitsu.com&gt;
Acked-by: Hillf Danton &lt;dhillf@gmail.com&gt;
Signed-off-by: Wen Congyang &lt;wency@cn.fujitsu.com&gt;
Cc: Christoph Lameter &lt;cl@linux.com&gt;
Cc: Hillf Danton &lt;dhillf@gmail.com&gt;
Cc: Lin Feng &lt;linfeng@cn.fujitsu.com&gt;
Cc: David Rientjes &lt;rientjes@google.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>mm/vmscan.c: try_to_freeze() returns boolean</title>
<updated>2012-12-12T01:22:27Z</updated>
<author>
<name>Jeff Liu</name>
</author>
<published>2012-12-12T00:02:48Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=6f6313d4870f9642cb3ea8ec892cf6da81331b9c'/>
<id>urn:sha1:6f6313d4870f9642cb3ea8ec892cf6da81331b9c</id>
<content type='text'>
kswapd()-&gt;try_to_freeze() is defined to return a boolean, so it's better
to use a bool to hold its return value.

Signed-off-by: Jie Liu &lt;jeff.liu@oracle.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>mm,vmscan: only evict file pages when we have plenty</title>
<updated>2012-12-12T01:22:23Z</updated>
<author>
<name>Rik van Riel</name>
</author>
<published>2012-12-12T00:01:10Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=e9868505987a03a26a3979f27b82911ccc003752'/>
<id>urn:sha1:e9868505987a03a26a3979f27b82911ccc003752</id>
<content type='text'>
If we have more inactive file pages than active file pages, we skip
scanning the active file pages altogether, with the idea that we do not
want to evict the working set when there is plenty of streaming IO in the
cache.

However, the code forgot to also skip scanning anonymous pages in that
situation.  That leads to the curious situation of keeping the active file
pages protected from being paged out when there are lots of inactive file
pages, while still scanning and evicting anonymous pages.

This patch fixes that situation, by only evicting file pages when we have
plenty of them and most are inactive.

[akpm@linux-foundation.org: adjust comment layout]
Signed-off-by: Rik van Riel &lt;riel@redhat.com&gt;
Cc: Mel Gorman &lt;mel@csn.ul.ie&gt;
Cc: Johannes Weiner &lt;hannes@cmpxchg.org&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
<entry>
<title>mm: use IS_ENABLED(CONFIG_COMPACTION) instead of COMPACTION_BUILD</title>
<updated>2012-12-12T01:22:22Z</updated>
<author>
<name>Kirill A. Shutemov</name>
</author>
<published>2012-12-12T00:00:31Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d84da3f9e4f18809821562bd960e00a10673b341'/>
<id>urn:sha1:d84da3f9e4f18809821562bd960e00a10673b341</id>
<content type='text'>
We don't need custom COMPACTION_BUILD anymore, since we have handy
IS_ENABLED().

Signed-off-by: Kirill A. Shutemov &lt;kirill.shutemov@linux.intel.com&gt;
Acked-by: Minchan Kim &lt;minchan@kernel.org&gt;
Acked-by: David Rientjes &lt;rientjes@google.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</content>
</entry>
</feed>
