<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/fs/f2fs/node.c, branch v4.7</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<entry>
<title>f2fs: fix to update dirty page count correctly</title>
<updated>2016-05-20T21:55:41+00:00</updated>
<author>
<name>Chao Yu</name>
<email>yuchao0@huawei.com</email>
</author>
<published>2016-05-20T16:11:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=0f3311a8c266b9f4fae4e5cdfcd9a86970e2b9bd'/>
<id>0f3311a8c266b9f4fae4e5cdfcd9a86970e2b9bd</id>
<content type='text'>
Once we failed to merge inline data into inode page during flushing inline
inode, we will skip invoking inode_dec_dirty_pages, which makes dirty page
count incorrect, result in panic in -&gt;evict_inode, Fix it.

------------[ cut here ]------------
kernel BUG at /home/yuchao/git/devf2fs/inode.c:336!
invalid opcode: 0000 [#1] PREEMPT SMP
CPU: 3 PID: 10004 Comm: umount Tainted: G           O    4.6.0-rc5+ #17
Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
task: f0c33000 ti: c5212000 task.ti: c5212000
EIP: 0060:[&lt;f89aacb5&gt;] EFLAGS: 00010202 CPU: 3
EIP is at f2fs_evict_inode+0x85/0x490 [f2fs]
EAX: 00000001 EBX: c4529ea0 ECX: 00000001 EDX: 00000000
ESI: c0131000 EDI: f89dd0a0 EBP: c5213e9c ESP: c5213e78
 DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
CR0: 80050033 CR2: b75878c0 CR3: 1a36a700 CR4: 000406f0
Stack:
 c4529ea0 c4529ef4 c5213e8c c176d45c c4529ef4 00000000 c4529ea0 c4529fac
 f89dd0a0 c5213eb0 c1204a68 c5213ed8 c452a2b4 c6680930 c5213ec0 c1204b64
 c6680d44 c6680620 c5213eec c120588d ee84b000 ee84b5c0 c5214000 ee84b5e0
Call Trace:
 [&lt;c176d45c&gt;] ? _raw_spin_unlock+0x2c/0x50
 [&lt;c1204a68&gt;] evict+0xa8/0x170
 [&lt;c1204b64&gt;] dispose_list+0x34/0x50
 [&lt;c120588d&gt;] evict_inodes+0x10d/0x130
 [&lt;c11ea941&gt;] generic_shutdown_super+0x41/0xe0
 [&lt;c1185190&gt;] ? unregister_shrinker+0x40/0x50
 [&lt;c1185190&gt;] ? unregister_shrinker+0x40/0x50
 [&lt;c11eac52&gt;] kill_block_super+0x22/0x70
 [&lt;f89af23e&gt;] kill_f2fs_super+0x1e/0x20 [f2fs]
 [&lt;c11eae1d&gt;] deactivate_locked_super+0x3d/0x70
 [&lt;c11eb383&gt;] deactivate_super+0x43/0x60
 [&lt;c1208ec9&gt;] cleanup_mnt+0x39/0x80
 [&lt;c1208f50&gt;] __cleanup_mnt+0x10/0x20
 [&lt;c107d091&gt;] task_work_run+0x71/0x90
 [&lt;c105725a&gt;] exit_to_usermode_loop+0x72/0x9e
 [&lt;c1001c7c&gt;] do_fast_syscall_32+0x19c/0x1c0
 [&lt;c176dd48&gt;] sysenter_past_esp+0x45/0x74
EIP: [&lt;f89aacb5&gt;] f2fs_evict_inode+0x85/0x490 [f2fs] SS:ESP 0068:c5213e78
---[ end trace d30536330b7fdc58 ]---

Signed-off-by: Chao Yu &lt;yuchao0@huawei.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Once we failed to merge inline data into inode page during flushing inline
inode, we will skip invoking inode_dec_dirty_pages, which makes dirty page
count incorrect, result in panic in -&gt;evict_inode, Fix it.

------------[ cut here ]------------
kernel BUG at /home/yuchao/git/devf2fs/inode.c:336!
invalid opcode: 0000 [#1] PREEMPT SMP
CPU: 3 PID: 10004 Comm: umount Tainted: G           O    4.6.0-rc5+ #17
Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
task: f0c33000 ti: c5212000 task.ti: c5212000
EIP: 0060:[&lt;f89aacb5&gt;] EFLAGS: 00010202 CPU: 3
EIP is at f2fs_evict_inode+0x85/0x490 [f2fs]
EAX: 00000001 EBX: c4529ea0 ECX: 00000001 EDX: 00000000
ESI: c0131000 EDI: f89dd0a0 EBP: c5213e9c ESP: c5213e78
 DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
CR0: 80050033 CR2: b75878c0 CR3: 1a36a700 CR4: 000406f0
Stack:
 c4529ea0 c4529ef4 c5213e8c c176d45c c4529ef4 00000000 c4529ea0 c4529fac
 f89dd0a0 c5213eb0 c1204a68 c5213ed8 c452a2b4 c6680930 c5213ec0 c1204b64
 c6680d44 c6680620 c5213eec c120588d ee84b000 ee84b5c0 c5214000 ee84b5e0
Call Trace:
 [&lt;c176d45c&gt;] ? _raw_spin_unlock+0x2c/0x50
 [&lt;c1204a68&gt;] evict+0xa8/0x170
 [&lt;c1204b64&gt;] dispose_list+0x34/0x50
 [&lt;c120588d&gt;] evict_inodes+0x10d/0x130
 [&lt;c11ea941&gt;] generic_shutdown_super+0x41/0xe0
 [&lt;c1185190&gt;] ? unregister_shrinker+0x40/0x50
 [&lt;c1185190&gt;] ? unregister_shrinker+0x40/0x50
 [&lt;c11eac52&gt;] kill_block_super+0x22/0x70
 [&lt;f89af23e&gt;] kill_f2fs_super+0x1e/0x20 [f2fs]
 [&lt;c11eae1d&gt;] deactivate_locked_super+0x3d/0x70
 [&lt;c11eb383&gt;] deactivate_super+0x43/0x60
 [&lt;c1208ec9&gt;] cleanup_mnt+0x39/0x80
 [&lt;c1208f50&gt;] __cleanup_mnt+0x10/0x20
 [&lt;c107d091&gt;] task_work_run+0x71/0x90
 [&lt;c105725a&gt;] exit_to_usermode_loop+0x72/0x9e
 [&lt;c1001c7c&gt;] do_fast_syscall_32+0x19c/0x1c0
 [&lt;c176dd48&gt;] sysenter_past_esp+0x45/0x74
EIP: [&lt;f89aacb5&gt;] f2fs_evict_inode+0x85/0x490 [f2fs] SS:ESP 0068:c5213e78
---[ end trace d30536330b7fdc58 ]---

Signed-off-by: Chao Yu &lt;yuchao0@huawei.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>f2fs: read node blocks ahead when truncating blocks</title>
<updated>2016-05-07T17:44:56+00:00</updated>
<author>
<name>Jaegeuk Kim</name>
<email>jaegeuk@kernel.org</email>
</author>
<published>2016-05-06T23:19:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=79344efb93a26378a91193bed133cee42162cd81'/>
<id>79344efb93a26378a91193bed133cee42162cd81</id>
<content type='text'>
This patch enables reading node blocks in advance when truncating large
data blocks.

 &gt; time rm $MNT/testfile (500GB) after drop_cachees
Before : 9.422 s
After  : 4.821 s

Reported-by: Stephen Bates &lt;stephen.bates@microsemi.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch enables reading node blocks in advance when truncating large
data blocks.

 &gt; time rm $MNT/testfile (500GB) after drop_cachees
Before : 9.422 s
After  : 4.821 s

Reported-by: Stephen Bates &lt;stephen.bates@microsemi.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>f2fs: remove an obsolete variable</title>
<updated>2016-05-07T17:32:31+00:00</updated>
<author>
<name>Jaegeuk Kim</name>
<email>jaegeuk@kernel.org</email>
</author>
<published>2016-05-04T16:58:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=fb58ae22067e0595d974e3d856522c1ed6d2d7bf'/>
<id>fb58ae22067e0595d974e3d856522c1ed6d2d7bf</id>
<content type='text'>
This patch removes an obsolete variable used in add_free_nid.

Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch removes an obsolete variable used in add_free_nid.

Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>f2fs: inject ENOSPC failures</title>
<updated>2016-05-07T17:32:24+00:00</updated>
<author>
<name>Jaegeuk Kim</name>
<email>jaegeuk@kernel.org</email>
</author>
<published>2016-04-29T23:29:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=cb78942b821380913e6810375c9ce72858e64c4f'/>
<id>cb78942b821380913e6810375c9ce72858e64c4f</id>
<content type='text'>
This patch injects ENOSPC failures.

Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch injects ENOSPC failures.

Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>f2fs: use f2fs_grab_cache_page instead of grab_cache_page</title>
<updated>2016-05-07T17:32:21+00:00</updated>
<author>
<name>Jaegeuk Kim</name>
<email>jaegeuk@kernel.org</email>
</author>
<published>2016-04-29T23:11:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=300e129c15f0ed2f94482900a4cb65b28eb09d94'/>
<id>300e129c15f0ed2f94482900a4cb65b28eb09d94</id>
<content type='text'>
This patch converts grab_cache_page to f2fs_grab_cache_page.

Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch converts grab_cache_page to f2fs_grab_cache_page.

Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>f2fs: move node pages only in victim section during GC</title>
<updated>2016-04-27T21:10:42+00:00</updated>
<author>
<name>Chao Yu</name>
<email>yuchao0@huawei.com</email>
</author>
<published>2016-04-27T13:40:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=da011cc0da8cf4a60ddf4d2ae8b42902a3d71e5f'/>
<id>da011cc0da8cf4a60ddf4d2ae8b42902a3d71e5f</id>
<content type='text'>
For foreground GC, we cache node blocks in victim section and set them
dirty, then we call sync_node_pages to flush these node pages, but
meanwhile, those node pages which does not locate in victim section
will be flushed together, so more bandwidth and continuous free space
would be occupied.

So for this condition, it's better to leave those unrelated node page
in cache for further write hit, and let CP or VM to flush them afterward.

Signed-off-by: Chao Yu &lt;yuchao0@huawei.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
For foreground GC, we cache node blocks in victim section and set them
dirty, then we call sync_node_pages to flush these node pages, but
meanwhile, those node pages which does not locate in victim section
will be flushed together, so more bandwidth and continuous free space
would be occupied.

So for this condition, it's better to leave those unrelated node page
in cache for further write hit, and let CP or VM to flush them afterward.

Signed-off-by: Chao Yu &lt;yuchao0@huawei.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>f2fs: set fsync mark only for the last dnode</title>
<updated>2016-04-26T21:24:59+00:00</updated>
<author>
<name>Jaegeuk Kim</name>
<email>jaegeuk@kernel.org</email>
</author>
<published>2016-04-15T16:43:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=608514deba38c8611ad330d6a3c8e2b9a1f68e4b'/>
<id>608514deba38c8611ad330d6a3c8e2b9a1f68e4b</id>
<content type='text'>
In order to give atomic writes, we should consider power failure during
sync_node_pages in fsync.
So, this patch marks fsync flag only in the last dnode block.

Acked-by: Chao Yu &lt;yuchao0@huawei.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In order to give atomic writes, we should consider power failure during
sync_node_pages in fsync.
So, this patch marks fsync flag only in the last dnode block.

Acked-by: Chao Yu &lt;yuchao0@huawei.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>f2fs: report unwritten status in fsync_node_pages</title>
<updated>2016-04-26T21:24:54+00:00</updated>
<author>
<name>Jaegeuk Kim</name>
<email>jaegeuk@kernel.org</email>
</author>
<published>2016-04-15T16:25:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=c267ec1526da2d3b12c80a89ebd8eb9b6a01d636'/>
<id>c267ec1526da2d3b12c80a89ebd8eb9b6a01d636</id>
<content type='text'>
The fsync_node_pages should return pass or failure so that user could know
fsync is completed or not.

Acked-by: Chao Yu &lt;yuchao0@huawei.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The fsync_node_pages should return pass or failure so that user could know
fsync is completed or not.

Acked-by: Chao Yu &lt;yuchao0@huawei.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>f2fs: split sync_node_pages with fsync_node_pages</title>
<updated>2016-04-26T21:24:48+00:00</updated>
<author>
<name>Jaegeuk Kim</name>
<email>jaegeuk@kernel.org</email>
</author>
<published>2016-04-13T23:24:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=5268137564920843e581304d9bfb06fb9502cf24'/>
<id>5268137564920843e581304d9bfb06fb9502cf24</id>
<content type='text'>
This patch splits the existing sync_node_pages into (f)sync_node_pages.
The fsync_node_pages is used for f2fs_sync_file only.

Acked-by: Chao Yu &lt;yuchao0@huawei.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch splits the existing sync_node_pages into (f)sync_node_pages.
The fsync_node_pages is used for f2fs_sync_file only.

Acked-by: Chao Yu &lt;yuchao0@huawei.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>f2fs: avoid needless lock for node pages when fsyncing a file</title>
<updated>2016-04-26T21:24:30+00:00</updated>
<author>
<name>Jaegeuk Kim</name>
<email>jaegeuk@kernel.org</email>
</author>
<published>2016-04-13T23:14:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=eca76e783cf5970db36edfda7e66487d897ea222'/>
<id>eca76e783cf5970db36edfda7e66487d897ea222</id>
<content type='text'>
When fsync is called, sync_node_pages finds a proper direct node pages to flush.
But, it locks unrelated direct node pages together unnecessarily.

Acked-by: Chao Yu &lt;yuchao0@huawei.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When fsync is called, sync_node_pages finds a proper direct node pages to flush.
But, it locks unrelated direct node pages together unnecessarily.

Acked-by: Chao Yu &lt;yuchao0@huawei.com&gt;
Signed-off-by: Jaegeuk Kim &lt;jaegeuk@kernel.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
