<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/fs/direct-io.c, branch v4.5</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>block: fix use-after-free in dio_bio_complete</title>
<updated>2016-01-31T05:02:10+00:00</updated>
<author>
<name>Mike Krinkin</name>
<email>krinkin.m.u@gmail.com</email>
</author>
<published>2016-01-30T16:09:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=7ddc971f86aa0a4cee9f6886c356a052461957ae'/>
<id>7ddc971f86aa0a4cee9f6886c356a052461957ae</id>
<content type='text'>
kasan reported the following error when i ran xfstest:

[  701.826854] ==================================================================
[  701.826864] BUG: KASAN: use-after-free in dio_bio_complete+0x41a/0x600 at addr ffff880080b95f94
[  701.826870] Read of size 4 by task loop2/3874
[  701.826879] page:ffffea000202e540 count:0 mapcount:0 mapping:          (null) index:0x0
[  701.826890] flags: 0x100000000000000()
[  701.826895] page dumped because: kasan: bad access detected
[  701.826904] CPU: 3 PID: 3874 Comm: loop2 Tainted: G    B   W    L  4.5.0-rc1-next-20160129 #83
[  701.826910] Hardware name: LENOVO 23205NG/23205NG, BIOS G2ET95WW (2.55 ) 07/09/2013
[  701.826917]  ffff88008fadf800 ffff88008fadf758 ffffffff81ca67bb 0000000041b58ab3
[  701.826941]  ffffffff830d1e74 ffffffff81ca6724 ffff88008fadf748 ffffffff8161c05c
[  701.826963]  0000000000000282 ffff88008fadf800 ffffed0010172bf2 ffffea000202e540
[  701.826987] Call Trace:
[  701.826997]  [&lt;ffffffff81ca67bb&gt;] dump_stack+0x97/0xdc
[  701.827005]  [&lt;ffffffff81ca6724&gt;] ? _atomic_dec_and_lock+0xc4/0xc4
[  701.827014]  [&lt;ffffffff8161c05c&gt;] ? __dump_page+0x32c/0x490
[  701.827023]  [&lt;ffffffff816b0d03&gt;] kasan_report_error+0x5f3/0x8b0
[  701.827033]  [&lt;ffffffff817c302a&gt;] ? dio_bio_complete+0x41a/0x600
[  701.827040]  [&lt;ffffffff816b1119&gt;] __asan_report_load4_noabort+0x59/0x80
[  701.827048]  [&lt;ffffffff817c302a&gt;] ? dio_bio_complete+0x41a/0x600
[  701.827053]  [&lt;ffffffff817c302a&gt;] dio_bio_complete+0x41a/0x600
[  701.827057]  [&lt;ffffffff81bd19c8&gt;] ? blk_queue_exit+0x108/0x270
[  701.827060]  [&lt;ffffffff817c32b0&gt;] dio_bio_end_aio+0xa0/0x4d0
[  701.827063]  [&lt;ffffffff817c3210&gt;] ? dio_bio_complete+0x600/0x600
[  701.827067]  [&lt;ffffffff81bd2806&gt;] ? blk_account_io_completion+0x316/0x5d0
[  701.827070]  [&lt;ffffffff81bafe89&gt;] bio_endio+0x79/0x200
[  701.827074]  [&lt;ffffffff81bd2c9f&gt;] blk_update_request+0x1df/0xc50
[  701.827078]  [&lt;ffffffff81c02c27&gt;] blk_mq_end_request+0x57/0x120
[  701.827081]  [&lt;ffffffff81c03670&gt;] __blk_mq_complete_request+0x310/0x590
[  701.827084]  [&lt;ffffffff812348d8&gt;] ? set_next_entity+0x2f8/0x2ed0
[  701.827088]  [&lt;ffffffff8124b34d&gt;] ? put_prev_entity+0x22d/0x2a70
[  701.827091]  [&lt;ffffffff81c0394b&gt;] blk_mq_complete_request+0x5b/0x80
[  701.827094]  [&lt;ffffffff821e2a33&gt;] loop_queue_work+0x273/0x19d0
[  701.827098]  [&lt;ffffffff811f6578&gt;] ? finish_task_switch+0x1c8/0x8e0
[  701.827101]  [&lt;ffffffff8129d058&gt;] ? trace_hardirqs_on_caller+0x18/0x6c0
[  701.827104]  [&lt;ffffffff821e27c0&gt;] ? lo_read_simple+0x890/0x890
[  701.827108]  [&lt;ffffffff8129dd60&gt;] ? debug_check_no_locks_freed+0x350/0x350
[  701.827111]  [&lt;ffffffff811f63b0&gt;] ? __hrtick_start+0x130/0x130
[  701.827115]  [&lt;ffffffff82a0c8f6&gt;] ? __schedule+0x936/0x20b0
[  701.827118]  [&lt;ffffffff811dd6bd&gt;] ? kthread_worker_fn+0x3ed/0x8d0
[  701.827121]  [&lt;ffffffff811dd4ed&gt;] ? kthread_worker_fn+0x21d/0x8d0
[  701.827125]  [&lt;ffffffff8129d058&gt;] ? trace_hardirqs_on_caller+0x18/0x6c0
[  701.827128]  [&lt;ffffffff811dd57f&gt;] kthread_worker_fn+0x2af/0x8d0
[  701.827132]  [&lt;ffffffff811dd2d0&gt;] ? __init_kthread_worker+0x170/0x170
[  701.827135]  [&lt;ffffffff82a1ea46&gt;] ? _raw_spin_unlock_irqrestore+0x36/0x60
[  701.827138]  [&lt;ffffffff811dd2d0&gt;] ? __init_kthread_worker+0x170/0x170
[  701.827141]  [&lt;ffffffff811dd2d0&gt;] ? __init_kthread_worker+0x170/0x170
[  701.827144]  [&lt;ffffffff811dd00b&gt;] kthread+0x24b/0x3a0
[  701.827148]  [&lt;ffffffff811dcdc0&gt;] ? kthread_create_on_node+0x4c0/0x4c0
[  701.827151]  [&lt;ffffffff8129d70d&gt;] ? trace_hardirqs_on+0xd/0x10
[  701.827155]  [&lt;ffffffff8116d41d&gt;] ? do_group_exit+0xdd/0x350
[  701.827158]  [&lt;ffffffff811dcdc0&gt;] ? kthread_create_on_node+0x4c0/0x4c0
[  701.827161]  [&lt;ffffffff82a1f52f&gt;] ret_from_fork+0x3f/0x70
[  701.827165]  [&lt;ffffffff811dcdc0&gt;] ? kthread_create_on_node+0x4c0/0x4c0
[  701.827167] Memory state around the buggy address:
[  701.827170]  ffff880080b95e80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[  701.827172]  ffff880080b95f00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[  701.827175] &gt;ffff880080b95f80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[  701.827177]                          ^
[  701.827179]  ffff880080b96000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[  701.827182]  ffff880080b96080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[  701.827183] ==================================================================

The problem is that bio_check_pages_dirty calls bio_put, so we must
not access bio fields after bio_check_pages_dirty.

Fixes: 9b81c842355ac96097ba ("block: don't access bio-&gt;bi_error after bio_put()").
Signed-off-by: Mike Krinkin &lt;krinkin.m.u@gmail.com&gt;
Cc: stable@vger.kernel.org
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
kasan reported the following error when i ran xfstest:

[  701.826854] ==================================================================
[  701.826864] BUG: KASAN: use-after-free in dio_bio_complete+0x41a/0x600 at addr ffff880080b95f94
[  701.826870] Read of size 4 by task loop2/3874
[  701.826879] page:ffffea000202e540 count:0 mapcount:0 mapping:          (null) index:0x0
[  701.826890] flags: 0x100000000000000()
[  701.826895] page dumped because: kasan: bad access detected
[  701.826904] CPU: 3 PID: 3874 Comm: loop2 Tainted: G    B   W    L  4.5.0-rc1-next-20160129 #83
[  701.826910] Hardware name: LENOVO 23205NG/23205NG, BIOS G2ET95WW (2.55 ) 07/09/2013
[  701.826917]  ffff88008fadf800 ffff88008fadf758 ffffffff81ca67bb 0000000041b58ab3
[  701.826941]  ffffffff830d1e74 ffffffff81ca6724 ffff88008fadf748 ffffffff8161c05c
[  701.826963]  0000000000000282 ffff88008fadf800 ffffed0010172bf2 ffffea000202e540
[  701.826987] Call Trace:
[  701.826997]  [&lt;ffffffff81ca67bb&gt;] dump_stack+0x97/0xdc
[  701.827005]  [&lt;ffffffff81ca6724&gt;] ? _atomic_dec_and_lock+0xc4/0xc4
[  701.827014]  [&lt;ffffffff8161c05c&gt;] ? __dump_page+0x32c/0x490
[  701.827023]  [&lt;ffffffff816b0d03&gt;] kasan_report_error+0x5f3/0x8b0
[  701.827033]  [&lt;ffffffff817c302a&gt;] ? dio_bio_complete+0x41a/0x600
[  701.827040]  [&lt;ffffffff816b1119&gt;] __asan_report_load4_noabort+0x59/0x80
[  701.827048]  [&lt;ffffffff817c302a&gt;] ? dio_bio_complete+0x41a/0x600
[  701.827053]  [&lt;ffffffff817c302a&gt;] dio_bio_complete+0x41a/0x600
[  701.827057]  [&lt;ffffffff81bd19c8&gt;] ? blk_queue_exit+0x108/0x270
[  701.827060]  [&lt;ffffffff817c32b0&gt;] dio_bio_end_aio+0xa0/0x4d0
[  701.827063]  [&lt;ffffffff817c3210&gt;] ? dio_bio_complete+0x600/0x600
[  701.827067]  [&lt;ffffffff81bd2806&gt;] ? blk_account_io_completion+0x316/0x5d0
[  701.827070]  [&lt;ffffffff81bafe89&gt;] bio_endio+0x79/0x200
[  701.827074]  [&lt;ffffffff81bd2c9f&gt;] blk_update_request+0x1df/0xc50
[  701.827078]  [&lt;ffffffff81c02c27&gt;] blk_mq_end_request+0x57/0x120
[  701.827081]  [&lt;ffffffff81c03670&gt;] __blk_mq_complete_request+0x310/0x590
[  701.827084]  [&lt;ffffffff812348d8&gt;] ? set_next_entity+0x2f8/0x2ed0
[  701.827088]  [&lt;ffffffff8124b34d&gt;] ? put_prev_entity+0x22d/0x2a70
[  701.827091]  [&lt;ffffffff81c0394b&gt;] blk_mq_complete_request+0x5b/0x80
[  701.827094]  [&lt;ffffffff821e2a33&gt;] loop_queue_work+0x273/0x19d0
[  701.827098]  [&lt;ffffffff811f6578&gt;] ? finish_task_switch+0x1c8/0x8e0
[  701.827101]  [&lt;ffffffff8129d058&gt;] ? trace_hardirqs_on_caller+0x18/0x6c0
[  701.827104]  [&lt;ffffffff821e27c0&gt;] ? lo_read_simple+0x890/0x890
[  701.827108]  [&lt;ffffffff8129dd60&gt;] ? debug_check_no_locks_freed+0x350/0x350
[  701.827111]  [&lt;ffffffff811f63b0&gt;] ? __hrtick_start+0x130/0x130
[  701.827115]  [&lt;ffffffff82a0c8f6&gt;] ? __schedule+0x936/0x20b0
[  701.827118]  [&lt;ffffffff811dd6bd&gt;] ? kthread_worker_fn+0x3ed/0x8d0
[  701.827121]  [&lt;ffffffff811dd4ed&gt;] ? kthread_worker_fn+0x21d/0x8d0
[  701.827125]  [&lt;ffffffff8129d058&gt;] ? trace_hardirqs_on_caller+0x18/0x6c0
[  701.827128]  [&lt;ffffffff811dd57f&gt;] kthread_worker_fn+0x2af/0x8d0
[  701.827132]  [&lt;ffffffff811dd2d0&gt;] ? __init_kthread_worker+0x170/0x170
[  701.827135]  [&lt;ffffffff82a1ea46&gt;] ? _raw_spin_unlock_irqrestore+0x36/0x60
[  701.827138]  [&lt;ffffffff811dd2d0&gt;] ? __init_kthread_worker+0x170/0x170
[  701.827141]  [&lt;ffffffff811dd2d0&gt;] ? __init_kthread_worker+0x170/0x170
[  701.827144]  [&lt;ffffffff811dd00b&gt;] kthread+0x24b/0x3a0
[  701.827148]  [&lt;ffffffff811dcdc0&gt;] ? kthread_create_on_node+0x4c0/0x4c0
[  701.827151]  [&lt;ffffffff8129d70d&gt;] ? trace_hardirqs_on+0xd/0x10
[  701.827155]  [&lt;ffffffff8116d41d&gt;] ? do_group_exit+0xdd/0x350
[  701.827158]  [&lt;ffffffff811dcdc0&gt;] ? kthread_create_on_node+0x4c0/0x4c0
[  701.827161]  [&lt;ffffffff82a1f52f&gt;] ret_from_fork+0x3f/0x70
[  701.827165]  [&lt;ffffffff811dcdc0&gt;] ? kthread_create_on_node+0x4c0/0x4c0
[  701.827167] Memory state around the buggy address:
[  701.827170]  ffff880080b95e80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[  701.827172]  ffff880080b95f00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[  701.827175] &gt;ffff880080b95f80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[  701.827177]                          ^
[  701.827179]  ffff880080b96000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[  701.827182]  ffff880080b96080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[  701.827183] ==================================================================

The problem is that bio_check_pages_dirty calls bio_put, so we must
not access bio fields after bio_check_pages_dirty.

Fixes: 9b81c842355ac96097ba ("block: don't access bio-&gt;bi_error after bio_put()").
Signed-off-by: Mike Krinkin &lt;krinkin.m.u@gmail.com&gt;
Cc: stable@vger.kernel.org
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>wrappers for -&gt;i_mutex access</title>
<updated>2016-01-22T23:04:28+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2016-01-22T20:40:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=5955102c9984fa081b2d570cfac75c97eecf8f3b'/>
<id>5955102c9984fa081b2d570cfac75c97eecf8f3b</id>
<content type='text'>
parallel to mutex_{lock,unlock,trylock,is_locked,lock_nested},
inode_foo(inode) being mutex_foo(&amp;inode-&gt;i_mutex).

Please, use those for access to -&gt;i_mutex; over the coming cycle
-&gt;i_mutex will become rwsem, with -&gt;lookup() done with it held
only shared.

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>
parallel to mutex_{lock,unlock,trylock,is_locked,lock_nested},
inode_foo(inode) being mutex_foo(&amp;inode-&gt;i_mutex).

Please, use those for access to -&gt;i_mutex; over the coming cycle
-&gt;i_mutex will become rwsem, with -&gt;lookup() done with it held
only shared.

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>fix the regression from "direct-io: Fix negative return from dio read beyond eof"</title>
<updated>2015-12-08T20:02:42+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2015-12-08T17:22:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=2d4594acbf6d8f75a27f3578476b6a27d8b13ebb'/>
<id>2d4594acbf6d8f75a27f3578476b6a27d8b13ebb</id>
<content type='text'>
Sure, it's better to bail out of past-the-eof read and return 0 than return
a bogus negative value on such.  Only we'd better make sure we are bailing out
with 0 and not -ENOMEM...

Cc: stable@vger.kernel.org
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>
Sure, it's better to bail out of past-the-eof read and return 0 than return
a bogus negative value on such.  Only we'd better make sure we are bailing out
with 0 and not -ENOMEM...

Cc: stable@vger.kernel.org
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>direct-io: Fix negative return from dio read beyond eof</title>
<updated>2015-11-30T17:15:42+00:00</updated>
<author>
<name>Jan Kara</name>
<email>jack@suse.cz</email>
</author>
<published>2015-11-30T17:15:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=74cedf9b6c603f2278a05bc91b140b32b434d0b5'/>
<id>74cedf9b6c603f2278a05bc91b140b32b434d0b5</id>
<content type='text'>
Assume a filesystem with 4KB blocks. When a file has size 1000 bytes and
we issue direct IO read at offset 1024, blockdev_direct_IO() reads the
tail of the last block and the logic for handling short DIO reads in
dio_complete() results in a return value -24 (1000 - 1024) which
obviously confuses userspace.

Fix the problem by bailing out early once we sample i_size and can
reliably check that direct IO read starts beyond i_size.

Reported-by: Avi Kivity &lt;avi@scylladb.com&gt;
Fixes: 9fe55eea7e4b444bafc42fa0000cc2d1d2847275
CC: stable@vger.kernel.org
CC: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Assume a filesystem with 4KB blocks. When a file has size 1000 bytes and
we issue direct IO read at offset 1024, blockdev_direct_IO() reads the
tail of the last block and the logic for handling short DIO reads in
dio_complete() results in a return value -24 (1000 - 1024) which
obviously confuses userspace.

Fix the problem by bailing out early once we sample i_size and can
reliably check that direct IO read starts beyond i_size.

Reported-by: Avi Kivity &lt;avi@scylladb.com&gt;
Fixes: 9fe55eea7e4b444bafc42fa0000cc2d1d2847275
CC: stable@vger.kernel.org
CC: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Signed-off-by: Jan Kara &lt;jack@suse.cz&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'for-4.4/io-poll' of git://git.kernel.dk/linux-block</title>
<updated>2015-11-11T01:23:49+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2015-11-11T01:23:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=3419b45039c6b799c974a8019361c045e7ca232c'/>
<id>3419b45039c6b799c974a8019361c045e7ca232c</id>
<content type='text'>
Pull block IO poll support from Jens Axboe:
 "Various groups have been doing experimentation around IO polling for
  (really) fast devices.  The code has been reviewed and has been
  sitting on the side for a few releases, but this is now good enough
  for coordinated benchmarking and further experimentation.

  Currently O_DIRECT sync read/write are supported.  A framework is in
  the works that allows scalable stats tracking so we can auto-tune
  this.  And we'll add libaio support as well soon.  Fow now, it's an
  opt-in feature for test purposes"

* 'for-4.4/io-poll' of git://git.kernel.dk/linux-block:
  direct-io: be sure to assign dio-&gt;bio_bdev for both paths
  directio: add block polling support
  NVMe: add blk polling support
  block: add block polling support
  blk-mq: return tag/queue combo in the make_request_fn handlers
  block: change -&gt;make_request_fn() and users to return a queue cookie
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Pull block IO poll support from Jens Axboe:
 "Various groups have been doing experimentation around IO polling for
  (really) fast devices.  The code has been reviewed and has been
  sitting on the side for a few releases, but this is now good enough
  for coordinated benchmarking and further experimentation.

  Currently O_DIRECT sync read/write are supported.  A framework is in
  the works that allows scalable stats tracking so we can auto-tune
  this.  And we'll add libaio support as well soon.  Fow now, it's an
  opt-in feature for test purposes"

* 'for-4.4/io-poll' of git://git.kernel.dk/linux-block:
  direct-io: be sure to assign dio-&gt;bio_bdev for both paths
  directio: add block polling support
  NVMe: add blk polling support
  block: add block polling support
  blk-mq: return tag/queue combo in the make_request_fn handlers
  block: change -&gt;make_request_fn() and users to return a queue cookie
</pre>
</div>
</content>
</entry>
<entry>
<title>direct-io: be sure to assign dio-&gt;bio_bdev for both paths</title>
<updated>2015-11-10T17:14:38+00:00</updated>
<author>
<name>Jens Axboe</name>
<email>axboe@fb.com</email>
</author>
<published>2015-11-10T17:14:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=c1c534609fe8a859f9c8108a5591e6e8a97e34d1'/>
<id>c1c534609fe8a859f9c8108a5591e6e8a97e34d1</id>
<content type='text'>
btrfs sets -&gt;submit_io(), and we failed to set the block dev for
that path. That resulted in a potential NULL dereference when
we later wait for IO in dio_await_one().

Reported-by: kernel test robot &lt;ying.huang@linux.intel.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
btrfs sets -&gt;submit_io(), and we failed to set the block dev for
that path. That resulted in a potential NULL dereference when
we later wait for IO in dio_await_one().

Reported-by: kernel test robot &lt;ying.huang@linux.intel.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>directio: add block polling support</title>
<updated>2015-11-07T17:40:47+00:00</updated>
<author>
<name>Jens Axboe</name>
<email>axboe@fb.com</email>
</author>
<published>2015-10-27T05:09:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=15c4f638f3d41bae52105ca4c0c8760afbcbeaab'/>
<id>15c4f638f3d41bae52105ca4c0c8760afbcbeaab</id>
<content type='text'>
This adds support for sync O_DIRECT read/write poll support.

Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
[hch: split from a larger patch, minor updates]
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Acked-by: Keith Busch &lt;keith.busch@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This adds support for sync O_DIRECT read/write poll support.

Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
[hch: split from a larger patch, minor updates]
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Acked-by: Keith Busch &lt;keith.busch@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mm, page_alloc: rename __GFP_WAIT to __GFP_RECLAIM</title>
<updated>2015-11-07T01:50:42+00:00</updated>
<author>
<name>Mel Gorman</name>
<email>mgorman@techsingularity.net</email>
</author>
<published>2015-11-07T00:28:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=71baba4b92dc1fa1bc461742c6ab1942ec6034e9'/>
<id>71baba4b92dc1fa1bc461742c6ab1942ec6034e9</id>
<content type='text'>
__GFP_WAIT was used to signal that the caller was in atomic context and
could not sleep.  Now it is possible to distinguish between true atomic
context and callers that are not willing to sleep.  The latter should
clear __GFP_DIRECT_RECLAIM so kswapd will still wake.  As clearing
__GFP_WAIT behaves differently, there is a risk that people will clear the
wrong flags.  This patch renames __GFP_WAIT to __GFP_RECLAIM to clearly
indicate what it does -- setting it allows all reclaim activity, clearing
them prevents it.

[akpm@linux-foundation.org: fix build]
[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: Mel Gorman &lt;mgorman@techsingularity.net&gt;
Acked-by: Michal Hocko &lt;mhocko@suse.com&gt;
Acked-by: Vlastimil Babka &lt;vbabka@suse.cz&gt;
Acked-by: Johannes Weiner &lt;hannes@cmpxchg.org&gt;
Cc: Christoph Lameter &lt;cl@linux.com&gt;
Acked-by: David Rientjes &lt;rientjes@google.com&gt;
Cc: Vitaly Wool &lt;vitalywool@gmail.com&gt;
Cc: Rik van Riel &lt;riel@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>
__GFP_WAIT was used to signal that the caller was in atomic context and
could not sleep.  Now it is possible to distinguish between true atomic
context and callers that are not willing to sleep.  The latter should
clear __GFP_DIRECT_RECLAIM so kswapd will still wake.  As clearing
__GFP_WAIT behaves differently, there is a risk that people will clear the
wrong flags.  This patch renames __GFP_WAIT to __GFP_RECLAIM to clearly
indicate what it does -- setting it allows all reclaim activity, clearing
them prevents it.

[akpm@linux-foundation.org: fix build]
[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: Mel Gorman &lt;mgorman@techsingularity.net&gt;
Acked-by: Michal Hocko &lt;mhocko@suse.com&gt;
Acked-by: Vlastimil Babka &lt;vbabka@suse.cz&gt;
Acked-by: Johannes Weiner &lt;hannes@cmpxchg.org&gt;
Cc: Christoph Lameter &lt;cl@linux.com&gt;
Acked-by: David Rientjes &lt;rientjes@google.com&gt;
Cc: Vitaly Wool &lt;vitalywool@gmail.com&gt;
Cc: Rik van Riel &lt;riel@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>
<entry>
<title>fs: direct-io: don't dirtying pages for ITER_BVEC/ITER_KVEC direct read</title>
<updated>2015-09-23T17:00:57+00:00</updated>
<author>
<name>Ming Lei</name>
<email>ming.lei@canonical.com</email>
</author>
<published>2015-08-17T02:31:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=53cbf3b157a0428d40989ab1c7df9228a1976fc2'/>
<id>53cbf3b157a0428d40989ab1c7df9228a1976fc2</id>
<content type='text'>
When direct read IO is submitted from kernel, it is often
unnecessary to dirty pages, for example of loop, dirtying pages
have been considered in the upper filesystem(over loop) side
already, and they don't need to be dirtied again.

So this patch doesn't dirtying pages for ITER_BVEC/ITER_KVEC
direct read, and loop should be the 1st case to use ITER_BVEC/ITER_KVEC
for direct read I/O.

The patch is based on previous Dave's patch.

Reviewed-by: Dave Kleikamp &lt;dave.kleikamp@oracle.com&gt;
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Ming Lei &lt;ming.lei@canonical.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When direct read IO is submitted from kernel, it is often
unnecessary to dirty pages, for example of loop, dirtying pages
have been considered in the upper filesystem(over loop) side
already, and they don't need to be dirtied again.

So this patch doesn't dirtying pages for ITER_BVEC/ITER_KVEC
direct read, and loop should be the 1st case to use ITER_BVEC/ITER_KVEC
for direct read I/O.

The patch is based on previous Dave's patch.

Reviewed-by: Dave Kleikamp &lt;dave.kleikamp@oracle.com&gt;
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Ming Lei &lt;ming.lei@canonical.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>block: remove bio_get_nr_vecs()</title>
<updated>2015-08-13T18:32:04+00:00</updated>
<author>
<name>Kent Overstreet</name>
<email>kent.overstreet@gmail.com</email>
</author>
<published>2015-05-19T12:31:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=b54ffb73cadcdcff9cc1ae0e11f502407e3e2e4c'/>
<id>b54ffb73cadcdcff9cc1ae0e11f502407e3e2e4c</id>
<content type='text'>
We can always fill up the bio now, no need to estimate the possible
size based on queue parameters.

Acked-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Signed-off-by: Kent Overstreet &lt;kent.overstreet@gmail.com&gt;
[hch: rebased and wrote a changelog]
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Ming Lin &lt;ming.l@ssi.samsung.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We can always fill up the bio now, no need to estimate the possible
size based on queue parameters.

Acked-by: Steven Whitehouse &lt;swhiteho@redhat.com&gt;
Signed-off-by: Kent Overstreet &lt;kent.overstreet@gmail.com&gt;
[hch: rebased and wrote a changelog]
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Ming Lin &lt;ming.l@ssi.samsung.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
