<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/fs/aio.c, branch v4.10</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>aio: fix lock dep warning</title>
<updated>2017-01-15T00:31:40+00:00</updated>
<author>
<name>Shaohua Li</name>
<email>shli@fb.com</email>
</author>
<published>2016-12-13T20:09:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=a12f1ae61c489076a9aeb90bddca7722bf330df3'/>
<id>a12f1ae61c489076a9aeb90bddca7722bf330df3</id>
<content type='text'>
lockdep reports a warnning. file_start_write/file_end_write only
acquire/release the lock for regular files. So checking the files in aio
side too.

[  453.532141] ------------[ cut here ]------------
[  453.533011] WARNING: CPU: 1 PID: 1298 at ../kernel/locking/lockdep.c:3514 lock_release+0x434/0x670
[  453.533011] DEBUG_LOCKS_WARN_ON(depth &lt;= 0)
[  453.533011] Modules linked in:
[  453.533011] CPU: 1 PID: 1298 Comm: fio Not tainted 4.9.0+ #964
[  453.533011] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.0-1.fc24 04/01/2014
[  453.533011]  ffff8803a24b7a70 ffffffff8196cffb ffff8803a24b7ae8 0000000000000000
[  453.533011]  ffff8803a24b7ab8 ffffffff81091ee1 ffff8803a5dba700 00000dba00000008
[  453.533011]  ffffed0074496f59 ffff8803a5dbaf54 ffff8803ae0f8488 fffffffffffffdef
[  453.533011] Call Trace:
[  453.533011]  [&lt;ffffffff8196cffb&gt;] dump_stack+0x67/0x9c
[  453.533011]  [&lt;ffffffff81091ee1&gt;] __warn+0x111/0x130
[  453.533011]  [&lt;ffffffff81091f97&gt;] warn_slowpath_fmt+0x97/0xb0
[  453.533011]  [&lt;ffffffff81091f00&gt;] ? __warn+0x130/0x130
[  453.533011]  [&lt;ffffffff8191b789&gt;] ? blk_finish_plug+0x29/0x60
[  453.533011]  [&lt;ffffffff811205d4&gt;] lock_release+0x434/0x670
[  453.533011]  [&lt;ffffffff8198af94&gt;] ? import_single_range+0xd4/0x110
[  453.533011]  [&lt;ffffffff81322195&gt;] ? rw_verify_area+0x65/0x140
[  453.533011]  [&lt;ffffffff813aa696&gt;] ? aio_write+0x1f6/0x280
[  453.533011]  [&lt;ffffffff813aa6c9&gt;] aio_write+0x229/0x280
[  453.533011]  [&lt;ffffffff813aa4a0&gt;] ? aio_complete+0x640/0x640
[  453.533011]  [&lt;ffffffff8111df20&gt;] ? debug_check_no_locks_freed+0x1a0/0x1a0
[  453.533011]  [&lt;ffffffff8114793a&gt;] ? debug_lockdep_rcu_enabled.part.2+0x1a/0x30
[  453.533011]  [&lt;ffffffff81147985&gt;] ? debug_lockdep_rcu_enabled+0x35/0x40
[  453.533011]  [&lt;ffffffff812a92be&gt;] ? __might_fault+0x7e/0xf0
[  453.533011]  [&lt;ffffffff813ac9bc&gt;] do_io_submit+0x94c/0xb10
[  453.533011]  [&lt;ffffffff813ac2ae&gt;] ? do_io_submit+0x23e/0xb10
[  453.533011]  [&lt;ffffffff813ac070&gt;] ? SyS_io_destroy+0x270/0x270
[  453.533011]  [&lt;ffffffff8111d7b3&gt;] ? mark_held_locks+0x23/0xc0
[  453.533011]  [&lt;ffffffff8100201a&gt;] ? trace_hardirqs_on_thunk+0x1a/0x1c
[  453.533011]  [&lt;ffffffff813acb90&gt;] SyS_io_submit+0x10/0x20
[  453.533011]  [&lt;ffffffff824f96aa&gt;] entry_SYSCALL_64_fastpath+0x18/0xad
[  453.533011]  [&lt;ffffffff81119190&gt;] ? trace_hardirqs_off_caller+0xc0/0x110
[  453.533011] ---[ end trace b2fbe664d1cc0082 ]---

Cc: Dmitry Monakhov &lt;dmonakhov@openvz.org&gt;
Cc: Jan Kara &lt;jack@suse.cz&gt;
Cc: Christoph Hellwig &lt;hch@lst.de&gt;
Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Shaohua Li &lt;shli@fb.com&gt;
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>
lockdep reports a warnning. file_start_write/file_end_write only
acquire/release the lock for regular files. So checking the files in aio
side too.

[  453.532141] ------------[ cut here ]------------
[  453.533011] WARNING: CPU: 1 PID: 1298 at ../kernel/locking/lockdep.c:3514 lock_release+0x434/0x670
[  453.533011] DEBUG_LOCKS_WARN_ON(depth &lt;= 0)
[  453.533011] Modules linked in:
[  453.533011] CPU: 1 PID: 1298 Comm: fio Not tainted 4.9.0+ #964
[  453.533011] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.9.0-1.fc24 04/01/2014
[  453.533011]  ffff8803a24b7a70 ffffffff8196cffb ffff8803a24b7ae8 0000000000000000
[  453.533011]  ffff8803a24b7ab8 ffffffff81091ee1 ffff8803a5dba700 00000dba00000008
[  453.533011]  ffffed0074496f59 ffff8803a5dbaf54 ffff8803ae0f8488 fffffffffffffdef
[  453.533011] Call Trace:
[  453.533011]  [&lt;ffffffff8196cffb&gt;] dump_stack+0x67/0x9c
[  453.533011]  [&lt;ffffffff81091ee1&gt;] __warn+0x111/0x130
[  453.533011]  [&lt;ffffffff81091f97&gt;] warn_slowpath_fmt+0x97/0xb0
[  453.533011]  [&lt;ffffffff81091f00&gt;] ? __warn+0x130/0x130
[  453.533011]  [&lt;ffffffff8191b789&gt;] ? blk_finish_plug+0x29/0x60
[  453.533011]  [&lt;ffffffff811205d4&gt;] lock_release+0x434/0x670
[  453.533011]  [&lt;ffffffff8198af94&gt;] ? import_single_range+0xd4/0x110
[  453.533011]  [&lt;ffffffff81322195&gt;] ? rw_verify_area+0x65/0x140
[  453.533011]  [&lt;ffffffff813aa696&gt;] ? aio_write+0x1f6/0x280
[  453.533011]  [&lt;ffffffff813aa6c9&gt;] aio_write+0x229/0x280
[  453.533011]  [&lt;ffffffff813aa4a0&gt;] ? aio_complete+0x640/0x640
[  453.533011]  [&lt;ffffffff8111df20&gt;] ? debug_check_no_locks_freed+0x1a0/0x1a0
[  453.533011]  [&lt;ffffffff8114793a&gt;] ? debug_lockdep_rcu_enabled.part.2+0x1a/0x30
[  453.533011]  [&lt;ffffffff81147985&gt;] ? debug_lockdep_rcu_enabled+0x35/0x40
[  453.533011]  [&lt;ffffffff812a92be&gt;] ? __might_fault+0x7e/0xf0
[  453.533011]  [&lt;ffffffff813ac9bc&gt;] do_io_submit+0x94c/0xb10
[  453.533011]  [&lt;ffffffff813ac2ae&gt;] ? do_io_submit+0x23e/0xb10
[  453.533011]  [&lt;ffffffff813ac070&gt;] ? SyS_io_destroy+0x270/0x270
[  453.533011]  [&lt;ffffffff8111d7b3&gt;] ? mark_held_locks+0x23/0xc0
[  453.533011]  [&lt;ffffffff8100201a&gt;] ? trace_hardirqs_on_thunk+0x1a/0x1c
[  453.533011]  [&lt;ffffffff813acb90&gt;] SyS_io_submit+0x10/0x20
[  453.533011]  [&lt;ffffffff824f96aa&gt;] entry_SYSCALL_64_fastpath+0x18/0xad
[  453.533011]  [&lt;ffffffff81119190&gt;] ? trace_hardirqs_off_caller+0xc0/0x110
[  453.533011] ---[ end trace b2fbe664d1cc0082 ]---

Cc: Dmitry Monakhov &lt;dmonakhov@openvz.org&gt;
Cc: Jan Kara &lt;jack@suse.cz&gt;
Cc: Christoph Hellwig &lt;hch@lst.de&gt;
Cc: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Shaohua Li &lt;shli@fb.com&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ktime: Get rid of the union</title>
<updated>2016-12-25T16:21:22+00:00</updated>
<author>
<name>Thomas Gleixner</name>
<email>tglx@linutronix.de</email>
</author>
<published>2016-12-25T10:38:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=2456e855354415bfaeb7badaa14e11b3e02c8466'/>
<id>2456e855354415bfaeb7badaa14e11b3e02c8466</id>
<content type='text'>
ktime is a union because the initial implementation stored the time in
scalar nanoseconds on 64 bit machine and in a endianess optimized timespec
variant for 32bit machines. The Y2038 cleanup removed the timespec variant
and switched everything to scalar nanoseconds. The union remained, but
become completely pointless.

Get rid of the union and just keep ktime_t as simple typedef of type s64.

The conversion was done with coccinelle and some manual mopping up.

Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: Peter Zijlstra &lt;peterz@infradead.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
ktime is a union because the initial implementation stored the time in
scalar nanoseconds on 64 bit machine and in a endianess optimized timespec
variant for 32bit machines. The Y2038 cleanup removed the timespec variant
and switched everything to scalar nanoseconds. The union remained, but
become completely pointless.

Get rid of the union and just keep ktime_t as simple typedef of type s64.

The conversion was done with coccinelle and some manual mopping up.

Signed-off-by: Thomas Gleixner &lt;tglx@linutronix.de&gt;
Cc: Peter Zijlstra &lt;peterz@infradead.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Replace &lt;asm/uaccess.h&gt; with &lt;linux/uaccess.h&gt; globally</title>
<updated>2016-12-24T19:46:01+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2016-12-24T19:46:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=7c0f6ba682b9c7632072ffbedf8d328c8f3c42ba'/>
<id>7c0f6ba682b9c7632072ffbedf8d328c8f3c42ba</id>
<content type='text'>
This was entirely automated, using the script by Al:

  PATT='^[[:blank:]]*#[[:blank:]]*include[[:blank:]]*&lt;asm/uaccess.h&gt;'
  sed -i -e "s!$PATT!#include &lt;linux/uaccess.h&gt;!" \
        $(git grep -l "$PATT"|grep -v ^include/linux/uaccess.h)

to do the replacement at the end of the merge window.

Requested-by: Al Viro &lt;viro@zeniv.linux.org.uk&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>
This was entirely automated, using the script by Al:

  PATT='^[[:blank:]]*#[[:blank:]]*include[[:blank:]]*&lt;asm/uaccess.h&gt;'
  sed -i -e "s!$PATT!#include &lt;linux/uaccess.h&gt;!" \
        $(git grep -l "$PATT"|grep -v ^include/linux/uaccess.h)

to do the replacement at the end of the merge window.

Requested-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
Signed-off-by: Linus Torvalds &lt;torvalds@linux-foundation.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>move aio compat to fs/aio.c</title>
<updated>2016-12-23T03:58:37+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2016-12-20T12:04:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=c00d2c7e89880036f288a764599b2b8b87c0a364'/>
<id>c00d2c7e89880036f288a764599b2b8b87c0a364</id>
<content type='text'>
... and fix the minor buglet in compat io_submit() - native one
kills ioctx as cleanup when put_user() fails.  Get rid of
bogus compat_... in !CONFIG_AIO case, while we are at it - they
should simply fail with ENOSYS, same as for native counterparts.

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>
... and fix the minor buglet in compat io_submit() - native one
kills ioctx as cleanup when put_user() fails.  Get rid of
bogus compat_... in !CONFIG_AIO case, while we are at it - they
should simply fail with ENOSYS, same as for native counterparts.

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>don't open-code file_inode()</title>
<updated>2016-12-04T23:29:28+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2016-12-04T23:24:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=450630975da9e7dffe540753e169dc4da5fe7c29'/>
<id>450630975da9e7dffe540753e169dc4da5fe7c29</id>
<content type='text'>
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>
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>aio: fix freeze protection of aio writes</title>
<updated>2016-10-30T17:09:42+00:00</updated>
<author>
<name>Jan Kara</name>
<email>jack@suse.cz</email>
</author>
<published>2016-10-30T16:42:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=70fe2f48152e60664809e2fed76bbb50c9fa2aa3'/>
<id>70fe2f48152e60664809e2fed76bbb50c9fa2aa3</id>
<content type='text'>
Currently we dropped freeze protection of aio writes just after IO was
submitted. Thus aio write could be in flight while the filesystem was
frozen and that could result in unexpected situation like aio completion
wanting to convert extent type on frozen filesystem. Testcase from
Dmitry triggering this is like:

for ((i=0;i&lt;60;i++));do fsfreeze -f /mnt ;sleep 1;fsfreeze -u /mnt;done &amp;
fio --bs=4k --ioengine=libaio --iodepth=128 --size=1g --direct=1 \
    --runtime=60 --filename=/mnt/file --name=rand-write --rw=randwrite

Fix the problem by dropping freeze protection only once IO is completed
in aio_complete().

Reported-by: Dmitry Monakhov &lt;dmonakhov@openvz.org&gt;
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
[hch: forward ported on top of various VFS and aio changes]
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
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>
Currently we dropped freeze protection of aio writes just after IO was
submitted. Thus aio write could be in flight while the filesystem was
frozen and that could result in unexpected situation like aio completion
wanting to convert extent type on frozen filesystem. Testcase from
Dmitry triggering this is like:

for ((i=0;i&lt;60;i++));do fsfreeze -f /mnt ;sleep 1;fsfreeze -u /mnt;done &amp;
fio --bs=4k --ioengine=libaio --iodepth=128 --size=1g --direct=1 \
    --runtime=60 --filename=/mnt/file --name=rand-write --rw=randwrite

Fix the problem by dropping freeze protection only once IO is completed
in aio_complete().

Reported-by: Dmitry Monakhov &lt;dmonakhov@openvz.org&gt;
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
[hch: forward ported on top of various VFS and aio changes]
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>fs: remove aio_run_iocb</title>
<updated>2016-10-30T17:09:42+00:00</updated>
<author>
<name>Christoph Hellwig</name>
<email>hch@lst.de</email>
</author>
<published>2016-10-30T16:42:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=89319d31d2d097da8e27fb0e0ae9d532f4f16827'/>
<id>89319d31d2d097da8e27fb0e0ae9d532f4f16827</id>
<content type='text'>
Pass the ABI iocb structure to aio_setup_rw and let it handle the
non-vectored I/O case as well.  With that and a new helper for the AIO
return value handling we can now define new aio_read and aio_write
helpers that implement reads and writes in a self-contained way without
duplicating too much code.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
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>
Pass the ABI iocb structure to aio_setup_rw and let it handle the
non-vectored I/O case as well.  With that and a new helper for the AIO
return value handling we can now define new aio_read and aio_write
helpers that implement reads and writes in a self-contained way without
duplicating too much code.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>fs: remove the never implemented aio_fsync file operation</title>
<updated>2016-10-30T17:09:42+00:00</updated>
<author>
<name>Christoph Hellwig</name>
<email>hch@lst.de</email>
</author>
<published>2016-10-30T16:42:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=723c038475b78edc9327eb952f95f9881cc9d79d'/>
<id>723c038475b78edc9327eb952f95f9881cc9d79d</id>
<content type='text'>
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
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>
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>aio: hold an extra file reference over AIO read/write operations</title>
<updated>2016-10-30T17:09:42+00:00</updated>
<author>
<name>Christoph Hellwig</name>
<email>hch@lst.de</email>
</author>
<published>2016-10-30T16:42:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=0b944d3a4bba6b25f43aed530f4fa85c04d162a6'/>
<id>0b944d3a4bba6b25f43aed530f4fa85c04d162a6</id>
<content type='text'>
Otherwise we might dereference an already freed file and/or inode
when aio_complete is called before we return from the read_iter or
write_iter method.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
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>
Otherwise we might dereference an already freed file and/or inode
when aio_complete is called before we return from the read_iter or
write_iter method.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>fs/aio.c: eliminate redundant loads in put_aio_ring_file</title>
<updated>2016-09-28T01:45:46+00:00</updated>
<author>
<name>Rasmus Villemoes</name>
<email>linux@rasmusvillemoes.dk</email>
</author>
<published>2016-09-14T22:25:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=de04e76935ad5985d318fbce298a17e9dd2092b7'/>
<id>de04e76935ad5985d318fbce298a17e9dd2092b7</id>
<content type='text'>
Using a local variable we can prevent gcc from reloading
aio_ring_file-&gt;f_inode-&gt;i_mapping twice, eliminating 2x2 dependent
loads.

Signed-off-by: Rasmus Villemoes &lt;linux@rasmusvillemoes.dk&gt;
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>
Using a local variable we can prevent gcc from reloading
aio_ring_file-&gt;f_inode-&gt;i_mapping twice, eliminating 2x2 dependent
loads.

Signed-off-by: Rasmus Villemoes &lt;linux@rasmusvillemoes.dk&gt;
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
</feed>
