<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/fs/fscache/stats.c, branch v5.2</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152</title>
<updated>2019-05-30T18:26:32+00:00</updated>
<author>
<name>Thomas Gleixner</name>
<email>tglx@linutronix.de</email>
</author>
<published>2019-05-27T06:55:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=2874c5fd284268364ece81a7bd936f3c8168e567'/>
<id>2874c5fd284268364ece81a7bd936f3c8168e567</id>
<content type='text'>
Based on 1 normalized pattern(s):

  this program is free software you can redistribute it and or modify
  it under the terms of the gnu general public license as published by
  the free software foundation either version 2 of the license or at
  your option any later version

extracted by the scancode license scanner the SPDX license identifier

  GPL-2.0-or-later

has been chosen to replace the boilerplate/reference in 3029 file(s).

Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Reviewed-by: Allison Randal &lt;allison@lohutok.net&gt;
Cc: linux-spdx@vger.kernel.org
Link: https://lkml.kernel.org/r/20190527070032.746973796@linutronix.de
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Based on 1 normalized pattern(s):

  this program is free software you can redistribute it and or modify
  it under the terms of the gnu general public license as published by
  the free software foundation either version 2 of the license or at
  your option any later version

extracted by the scancode license scanner the SPDX license identifier

  GPL-2.0-or-later

has been chosen to replace the boilerplate/reference in 3029 file(s).

Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Reviewed-by: Allison Randal &lt;allison@lohutok.net&gt;
Cc: linux-spdx@vger.kernel.org
Link: https://lkml.kernel.org/r/20190527070032.746973796@linutronix.de
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>proc: introduce proc_create_single{,_data}</title>
<updated>2018-05-16T05:23:35+00:00</updated>
<author>
<name>Christoph Hellwig</name>
<email>hch@lst.de</email>
</author>
<published>2018-05-15T13:57:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=3f3942aca6da351a12543aa776467791b63b3a78'/>
<id>3f3942aca6da351a12543aa776467791b63b3a78</id>
<content type='text'>
Variants of proc_create{,_data} that directly take a seq_file show
callback and drastically reduces the boilerplate code in the callers.

All trivial callers converted over.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Variants of proc_create{,_data} that directly take a seq_file show
callback and drastically reduces the boilerplate code in the callers.

All trivial callers converted over.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>fscache, cachefiles: Fix checker warnings</title>
<updated>2018-04-04T12:41:26+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2018-04-04T12:41:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=bfa3837ec3ccda3138ce9b798107aadcc6d2e78c'/>
<id>bfa3837ec3ccda3138ce9b798107aadcc6d2e78c</id>
<content type='text'>
Fix a couple of checker warnings in fscache and cachefiles:

 (1) fscache_n_op_requeue is never used, so get rid of it.

 (2) cachefiles_uncache_page() is passed in a lock that it releases, so
     this needs annotating.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fix a couple of checker warnings in fscache and cachefiles:

 (1) fscache_n_op_requeue is never used, so get rid of it.

 (2) cachefiles_uncache_page() is passed in a lock that it releases, so
     this needs annotating.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>drop redundant -&gt;owner initializations</title>
<updated>2016-05-29T23:08:00+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2016-05-28T02:40:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=84c60b1388249a0167d5fe8160f84e66a1221ba8'/>
<id>84c60b1388249a0167d5fe8160f84e66a1221ba8</id>
<content type='text'>
it's not needed for file_operations of inodes located on fs defined
in the hosting module and for file_operations that go into procfs.

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
it's not needed for file_operations of inodes located on fs defined
in the hosting module and for file_operations that go into procfs.

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>FS-Cache: Count the number of initialised operations</title>
<updated>2015-04-02T13:28:53+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2015-02-25T13:21:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=03cdd0e4b9a98ae995b81cd8f58e992ec3f44ae2'/>
<id>03cdd0e4b9a98ae995b81cd8f58e992ec3f44ae2</id>
<content type='text'>
Count and display through /proc/fs/fscache/stats the number of initialised
operations.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Reviewed-by: Steve Dickson &lt;steved@redhat.com&gt;
Acked-by: Jeff Layton &lt;jeff.layton@primarydata.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Count and display through /proc/fs/fscache/stats the number of initialised
operations.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Reviewed-by: Steve Dickson &lt;steved@redhat.com&gt;
Acked-by: Jeff Layton &lt;jeff.layton@primarydata.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>FS-Cache: Count culled objects and objects rejected due to lack of space</title>
<updated>2015-02-24T10:05:27+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2015-02-19T23:47:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=182d919b84902eece162c63ed3d476c8016b4197'/>
<id>182d919b84902eece162c63ed3d476c8016b4197</id>
<content type='text'>
Count the number of objects that get culled by the cache backend and the
number of objects that the cache backend declines to instantiate due to lack
of space in the cache.

These numbers are made available through /proc/fs/fscache/stats

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Reviewed-by: Steve Dickson &lt;steved@redhat.com&gt;
Acked-by: Jeff Layton &lt;jeff.layton@primarydata.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Count the number of objects that get culled by the cache backend and the
number of objects that the cache backend declines to instantiate due to lack
of space in the cache.

These numbers are made available through /proc/fs/fscache/stats

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Reviewed-by: Steve Dickson &lt;steved@redhat.com&gt;
Acked-by: Jeff Layton &lt;jeff.layton@primarydata.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>fs/fscache/stats.c: fix memory leak</title>
<updated>2013-04-29T22:54:27+00:00</updated>
<author>
<name>Anurup m</name>
<email>anurup.m@huawei.com</email>
</author>
<published>2013-04-29T22:05:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=ec686c9239b4d472052a271c505d04dae84214cc'/>
<id>ec686c9239b4d472052a271c505d04dae84214cc</id>
<content type='text'>
There is a kernel memory leak observed when the proc file
/proc/fs/fscache/stats is read.

The reason is that in fscache_stats_open, single_open is called and the
respective release function is not called during release.  Hence fix
with correct release function - single_release().

Addresses https://bugzilla.kernel.org/show_bug.cgi?id=57101

Signed-off-by: Anurup m &lt;anurup.m@huawei.com&gt;
Cc: shyju pv &lt;shyju.pv@huawei.com&gt;
Cc: Sanil kumar &lt;sanil.kumar@huawei.com&gt;
Cc: Nataraj m &lt;nataraj.m@huawei.com&gt;
Cc: Li Zefan &lt;lizefan@huawei.com&gt;
Cc: David Howells &lt;dhowells@redhat.com&gt;
Cc: &lt;stable@vger.kernel.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>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There is a kernel memory leak observed when the proc file
/proc/fs/fscache/stats is read.

The reason is that in fscache_stats_open, single_open is called and the
respective release function is not called during release.  Hence fix
with correct release function - single_release().

Addresses https://bugzilla.kernel.org/show_bug.cgi?id=57101

Signed-off-by: Anurup m &lt;anurup.m@huawei.com&gt;
Cc: shyju pv &lt;shyju.pv@huawei.com&gt;
Cc: Sanil kumar &lt;sanil.kumar@huawei.com&gt;
Cc: Nataraj m &lt;nataraj.m@huawei.com&gt;
Cc: Li Zefan &lt;lizefan@huawei.com&gt;
Cc: David Howells &lt;dhowells@redhat.com&gt;
Cc: &lt;stable@vger.kernel.org&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>NFS: nfs_migrate_page() does not wait for FS-Cache to finish with a page</title>
<updated>2012-12-20T22:12:03+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2012-12-05T13:34:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=8c209ce721444a61b61d9e772746c721e4d8d1e8'/>
<id>8c209ce721444a61b61d9e772746c721e4d8d1e8</id>
<content type='text'>
nfs_migrate_page() does not wait for FS-Cache to finish with a page, probably
leading to the following bad-page-state:

 BUG: Bad page state in process python-bin  pfn:17d39b
 page:ffffea00053649e8 flags:004000000000100c count:0 mapcount:0 mapping:(null)
index:38686 (Tainted: G    B      ---------------- )
 Pid: 31053, comm: python-bin Tainted: G    B      ----------------
2.6.32-71.24.1.el6.x86_64 #1
 Call Trace:
 [&lt;ffffffff8111bfe7&gt;] bad_page+0x107/0x160
 [&lt;ffffffff8111ee69&gt;] free_hot_cold_page+0x1c9/0x220
 [&lt;ffffffff8111ef19&gt;] __pagevec_free+0x59/0xb0
 [&lt;ffffffff8104b988&gt;] ? flush_tlb_others_ipi+0x128/0x130
 [&lt;ffffffff8112230c&gt;] release_pages+0x21c/0x250
 [&lt;ffffffff8115b92a&gt;] ? remove_migration_pte+0x28a/0x2b0
 [&lt;ffffffff8115f3f8&gt;] ? mem_cgroup_get_reclaim_stat_from_page+0x18/0x70
 [&lt;ffffffff81122687&gt;] ____pagevec_lru_add+0x167/0x180
 [&lt;ffffffff811226f8&gt;] __lru_cache_add+0x58/0x70
 [&lt;ffffffff81122731&gt;] lru_cache_add_lru+0x21/0x40
 [&lt;ffffffff81123f49&gt;] putback_lru_page+0x69/0x100
 [&lt;ffffffff8115c0bd&gt;] migrate_pages+0x13d/0x5d0
 [&lt;ffffffff81122687&gt;] ? ____pagevec_lru_add+0x167/0x180
 [&lt;ffffffff81152ab0&gt;] ? compaction_alloc+0x0/0x370
 [&lt;ffffffff8115255c&gt;] compact_zone+0x4cc/0x600
 [&lt;ffffffff8111cfac&gt;] ? get_page_from_freelist+0x15c/0x820
 [&lt;ffffffff810672f4&gt;] ? check_preempt_wakeup+0x1c4/0x3c0
 [&lt;ffffffff8115290e&gt;] compact_zone_order+0x7e/0xb0
 [&lt;ffffffff81152a49&gt;] try_to_compact_pages+0x109/0x170
 [&lt;ffffffff8111e94d&gt;] __alloc_pages_nodemask+0x5ed/0x850
 [&lt;ffffffff814c9136&gt;] ? thread_return+0x4e/0x778
 [&lt;ffffffff81150d43&gt;] alloc_pages_vma+0x93/0x150
 [&lt;ffffffff81167ea5&gt;] do_huge_pmd_anonymous_page+0x135/0x340
 [&lt;ffffffff814cb6f6&gt;] ? rwsem_down_read_failed+0x26/0x30
 [&lt;ffffffff81136755&gt;] handle_mm_fault+0x245/0x2b0
 [&lt;ffffffff814ce383&gt;] do_page_fault+0x123/0x3a0
 [&lt;ffffffff814cbdf5&gt;] page_fault+0x25/0x30

nfs_migrate_page() calls nfs_fscache_release_page() which doesn't actually wait
- even if __GFP_WAIT is set.  The reason that doesn't wait is that
fscache_maybe_release_page() might deadlock the allocator as the work threads
writing to the cache may all end up sleeping on memory allocation.

However, I wonder if that is actually a problem.  There are a number of things
I can do to deal with this:

 (1) Make nfs_migrate_page() wait.

 (2) Make fscache_maybe_release_page() honour the __GFP_WAIT flag.

 (3) Set a timeout around the wait.

 (4) Make nfs_migrate_page() return an error if the page is still busy.

For the moment, I'll select (2) and (4).

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Acked-by: Jeff Layton &lt;jlayton@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
nfs_migrate_page() does not wait for FS-Cache to finish with a page, probably
leading to the following bad-page-state:

 BUG: Bad page state in process python-bin  pfn:17d39b
 page:ffffea00053649e8 flags:004000000000100c count:0 mapcount:0 mapping:(null)
index:38686 (Tainted: G    B      ---------------- )
 Pid: 31053, comm: python-bin Tainted: G    B      ----------------
2.6.32-71.24.1.el6.x86_64 #1
 Call Trace:
 [&lt;ffffffff8111bfe7&gt;] bad_page+0x107/0x160
 [&lt;ffffffff8111ee69&gt;] free_hot_cold_page+0x1c9/0x220
 [&lt;ffffffff8111ef19&gt;] __pagevec_free+0x59/0xb0
 [&lt;ffffffff8104b988&gt;] ? flush_tlb_others_ipi+0x128/0x130
 [&lt;ffffffff8112230c&gt;] release_pages+0x21c/0x250
 [&lt;ffffffff8115b92a&gt;] ? remove_migration_pte+0x28a/0x2b0
 [&lt;ffffffff8115f3f8&gt;] ? mem_cgroup_get_reclaim_stat_from_page+0x18/0x70
 [&lt;ffffffff81122687&gt;] ____pagevec_lru_add+0x167/0x180
 [&lt;ffffffff811226f8&gt;] __lru_cache_add+0x58/0x70
 [&lt;ffffffff81122731&gt;] lru_cache_add_lru+0x21/0x40
 [&lt;ffffffff81123f49&gt;] putback_lru_page+0x69/0x100
 [&lt;ffffffff8115c0bd&gt;] migrate_pages+0x13d/0x5d0
 [&lt;ffffffff81122687&gt;] ? ____pagevec_lru_add+0x167/0x180
 [&lt;ffffffff81152ab0&gt;] ? compaction_alloc+0x0/0x370
 [&lt;ffffffff8115255c&gt;] compact_zone+0x4cc/0x600
 [&lt;ffffffff8111cfac&gt;] ? get_page_from_freelist+0x15c/0x820
 [&lt;ffffffff810672f4&gt;] ? check_preempt_wakeup+0x1c4/0x3c0
 [&lt;ffffffff8115290e&gt;] compact_zone_order+0x7e/0xb0
 [&lt;ffffffff81152a49&gt;] try_to_compact_pages+0x109/0x170
 [&lt;ffffffff8111e94d&gt;] __alloc_pages_nodemask+0x5ed/0x850
 [&lt;ffffffff814c9136&gt;] ? thread_return+0x4e/0x778
 [&lt;ffffffff81150d43&gt;] alloc_pages_vma+0x93/0x150
 [&lt;ffffffff81167ea5&gt;] do_huge_pmd_anonymous_page+0x135/0x340
 [&lt;ffffffff814cb6f6&gt;] ? rwsem_down_read_failed+0x26/0x30
 [&lt;ffffffff81136755&gt;] handle_mm_fault+0x245/0x2b0
 [&lt;ffffffff814ce383&gt;] do_page_fault+0x123/0x3a0
 [&lt;ffffffff814cbdf5&gt;] page_fault+0x25/0x30

nfs_migrate_page() calls nfs_fscache_release_page() which doesn't actually wait
- even if __GFP_WAIT is set.  The reason that doesn't wait is that
fscache_maybe_release_page() might deadlock the allocator as the work threads
writing to the cache may all end up sleeping on memory allocation.

However, I wonder if that is actually a problem.  There are a number of things
I can do to deal with this:

 (1) Make nfs_migrate_page() wait.

 (2) Make fscache_maybe_release_page() honour the __GFP_WAIT flag.

 (3) Set a timeout around the wait.

 (4) Make nfs_migrate_page() return an error if the page is still busy.

For the moment, I'll select (2) and (4).

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Acked-by: Jeff Layton &lt;jlayton@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>FS-Cache: Provide proper invalidation</title>
<updated>2012-12-20T22:04:07+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2012-12-20T21:52:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=ef778e7ae67cd426c30cad43378b908f5eb0bad5'/>
<id>ef778e7ae67cd426c30cad43378b908f5eb0bad5</id>
<content type='text'>
Provide a proper invalidation method rather than relying on the netfs retiring
the cookie it has and getting a new one.  The problem with this is that isn't
easy for the netfs to make sure that it has completed/cancelled all its
outstanding storage and retrieval operations on the cookie it is retiring.

Instead, have the cache provide an invalidation method that will cancel or wait
for all currently outstanding operations before invalidating the cache, and
will cause new operations to queue up behind that.  Whilst invalidation is in
progress, some requests will be rejected until the cache can stack a barrier on
the operation queue to cause new operations to be deferred behind it.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Provide a proper invalidation method rather than relying on the netfs retiring
the cookie it has and getting a new one.  The problem with this is that isn't
easy for the netfs to make sure that it has completed/cancelled all its
outstanding storage and retrieval operations on the cookie it is retiring.

Instead, have the cache provide an invalidation method that will cancel or wait
for all currently outstanding operations before invalidating the cache, and
will cause new operations to queue up behind that.  Whilst invalidation is in
progress, some requests will be rejected until the cache can stack a barrier on
the operation queue to cause new operations to be deferred behind it.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>fs-cache: order the debugfs stats correctly</title>
<updated>2010-04-07T15:38:05+00:00</updated>
<author>
<name>David Howells</name>
<email>dhowells@redhat.com</email>
</author>
<published>2010-04-06T21:35:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=cc4fc29e59c386919a7674e203be7822dc968dc0'/>
<id>cc4fc29e59c386919a7674e203be7822dc968dc0</id>
<content type='text'>
Order the debugfs statistics correctly.  The values displayed through a
seq_printf() statement should be in the same order as the names in the
format string.

In the 'Lookups' line, objects created ('crt=') and lookups timed out
('tmo=') have their values transposed.

Signed-off-by: David Howells &lt;dhowells@redhat.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>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Order the debugfs statistics correctly.  The values displayed through a
seq_printf() statement should be in the same order as the names in the
format string.

In the 'Lookups' line, objects created ('crt=') and lookups timed out
('tmo=') have their values transposed.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: Andrew Morton &lt;akpm@linux-foundation.org&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
