<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/include/linux/blk_types.h, branch v4.2.1</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<entry>
<title>Revert "block, dm: don't copy bios for request clones"</title>
<updated>2015-06-26T14:11:58+00:00</updated>
<author>
<name>Mike Snitzer</name>
<email>snitzer@redhat.com</email>
</author>
<published>2015-06-26T14:01:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=78d8e58a086b214dddf1fd463e20a7e1d82d7866'/>
<id>78d8e58a086b214dddf1fd463e20a7e1d82d7866</id>
<content type='text'>
This reverts commit 5f1b670d0bef508a5554d92525f5f6d00d640b38.

Justification for revert as reported in this dm-devel post:
https://www.redhat.com/archives/dm-devel/2015-June/msg00160.html

this change should not be pushed to mainline yet.

Firstly, Christoph has a newer version of the patch that fixes silent
data corruption problem:
  https://www.redhat.com/archives/dm-devel/2015-May/msg00229.html

And the new version still depends on LLDDs to always complete requests
to the end when error happens, while block API doesn't enforce such a
requirement. If the assumption is ever broken, the inconsistency between
request and bio (e.g. rq-&gt;__sector and rq-&gt;bio) will cause silent data
corruption:
  https://www.redhat.com/archives/dm-devel/2015-June/msg00022.html

Reported-by: Junichi Nomura &lt;j-nomura@ce.jp.nec.com&gt;
Signed-off-by: Mike Snitzer &lt;snitzer@redhat.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commit 5f1b670d0bef508a5554d92525f5f6d00d640b38.

Justification for revert as reported in this dm-devel post:
https://www.redhat.com/archives/dm-devel/2015-June/msg00160.html

this change should not be pushed to mainline yet.

Firstly, Christoph has a newer version of the patch that fixes silent
data corruption problem:
  https://www.redhat.com/archives/dm-devel/2015-May/msg00229.html

And the new version still depends on LLDDs to always complete requests
to the end when error happens, while block API doesn't enforce such a
requirement. If the assumption is ever broken, the inconsistency between
request and bio (e.g. rq-&gt;__sector and rq-&gt;bio) will cause silent data
corruption:
  https://www.redhat.com/archives/dm-devel/2015-June/msg00022.html

Reported-by: Junichi Nomura &lt;j-nomura@ce.jp.nec.com&gt;
Signed-off-by: Mike Snitzer &lt;snitzer@redhat.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge remote-tracking branch 'jens/for-4.2/core' into dm-4.2</title>
<updated>2015-05-29T18:17:16+00:00</updated>
<author>
<name>Mike Snitzer</name>
<email>snitzer@redhat.com</email>
</author>
<published>2015-05-29T18:17:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=183f7802e73e26206558864d1b67e64382257277'/>
<id>183f7802e73e26206558864d1b67e64382257277</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>block, dm: don't copy bios for request clones</title>
<updated>2015-05-22T14:58:57+00:00</updated>
<author>
<name>Christoph Hellwig</name>
<email>hch@lst.de</email>
</author>
<published>2015-05-22T13:14:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=5f1b670d0bef508a5554d92525f5f6d00d640b38'/>
<id>5f1b670d0bef508a5554d92525f5f6d00d640b38</id>
<content type='text'>
Currently dm-multipath has to clone the bios for every request sent
to the lower devices, which wastes cpu cycles and ties down memory.

This patch instead adds a new REQ_CLONE flag that instructs req_bio_endio
to not complete bios attached to a request, which we set on clone
requests similar to bios in a flush sequence.  With this change I/O
errors on a path failure only get propagated to dm-multipath, which
can then either resubmit the I/O or complete the bios on the original
request.

I've done some basic testing of this on a Linux target with ALUA support,
and it survives path failures during I/O nicely.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Mike Snitzer &lt;snitzer@redhat.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>
Currently dm-multipath has to clone the bios for every request sent
to the lower devices, which wastes cpu cycles and ties down memory.

This patch instead adds a new REQ_CLONE flag that instructs req_bio_endio
to not complete bios attached to a request, which we set on clone
requests similar to bios in a flush sequence.  With this change I/O
errors on a path failure only get propagated to dm-multipath, which
can then either resubmit the I/O or complete the bios on the original
request.

I've done some basic testing of this on a Linux target with ALUA support,
and it survives path failures during I/O nicely.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Mike Snitzer &lt;snitzer@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>block: collapse bio bit space</title>
<updated>2015-05-19T15:18:28+00:00</updated>
<author>
<name>Jens Axboe</name>
<email>axboe@fb.com</email>
</author>
<published>2015-05-19T15:18:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=b2dbe0a60f1bcf4db5c701f1577b3135c3159eb5'/>
<id>b2dbe0a60f1bcf4db5c701f1577b3135c3159eb5</id>
<content type='text'>
Various previous patches removed bits and left holes, collapse them
all. Leave the reset start bit where it is, we don't need to change
that.

Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Various previous patches removed bits and left holes, collapse them
all. Leave the reset start bit where it is, we don't need to change
that.

Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>block: remove unused BIO_RW_BLOCK and BIO_EOF flags</title>
<updated>2015-05-19T15:17:05+00:00</updated>
<author>
<name>Christoph Hellwig</name>
<email>hch@lst.de</email>
</author>
<published>2015-04-24T19:41:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=97ca223c3b37ed12a5b67a5dc6247e5a4799d337'/>
<id>97ca223c3b37ed12a5b67a5dc6247e5a4799d337</id>
<content type='text'>
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Acked-by: Tejun Heo &lt;tj@kernel.org&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Acked-by: Tejun Heo &lt;tj@kernel.org&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>block: remove BIO_EOPNOTSUPP</title>
<updated>2015-05-19T15:17:03+00:00</updated>
<author>
<name>Christoph Hellwig</name>
<email>hch@lst.de</email>
</author>
<published>2015-04-24T19:41:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=b25de9d6da49b1a8760a89672283128aa8c78345'/>
<id>b25de9d6da49b1a8760a89672283128aa8c78345</id>
<content type='text'>
Since the big barrier rewrite/removal in 2007 we never fail FLUSH or
FUA requests, which means we can remove the magic BIO_EOPNOTSUPP flag
to help propagating those to the buffer_head layer.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Reviewed-by: Jeff Moyer &lt;jmoyer@redhat.com&gt;
Acked-by: Tejun Heo &lt;tj@kernel.org&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Since the big barrier rewrite/removal in 2007 we never fail FLUSH or
FUA requests, which means we can remove the magic BIO_EOPNOTSUPP flag
to help propagating those to the buffer_head layer.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Reviewed-by: Jeff Moyer &lt;jmoyer@redhat.com&gt;
Acked-by: Tejun Heo &lt;tj@kernel.org&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>bio: skip atomic inc/dec of -&gt;bi_cnt for most use cases</title>
<updated>2015-05-05T19:32:49+00:00</updated>
<author>
<name>Jens Axboe</name>
<email>axboe@fb.com</email>
</author>
<published>2015-04-17T22:23:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=dac56212e8127dbc0bff7be35c508bc280213309'/>
<id>dac56212e8127dbc0bff7be35c508bc280213309</id>
<content type='text'>
Struct bio has a reference count that controls when it can be freed.
Most uses cases is allocating the bio, which then returns with a
single reference to it, doing IO, and then dropping that single
reference. We can remove this atomic_dec_and_test() in the completion
path, if nobody else is holding a reference to the bio.

If someone does call bio_get() on the bio, then we flag the bio as
now having valid count and that we must properly honor the reference
count when it's being put.

Tested-by: Robert Elliott &lt;elliott@hp.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>
Struct bio has a reference count that controls when it can be freed.
Most uses cases is allocating the bio, which then returns with a
single reference to it, doing IO, and then dropping that single
reference. We can remove this atomic_dec_and_test() in the completion
path, if nobody else is holding a reference to the bio.

If someone does call bio_get() on the bio, then we flag the bio as
now having valid count and that we must properly honor the reference
count when it's being put.

Tested-by: Robert Elliott &lt;elliott@hp.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>bio: skip atomic inc/dec of -&gt;bi_remaining for non-chains</title>
<updated>2015-05-05T19:32:47+00:00</updated>
<author>
<name>Jens Axboe</name>
<email>axboe@fb.com</email>
</author>
<published>2015-04-17T22:15:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=c4cf5261f8bffd9de132b50660a69148e7575bd6'/>
<id>c4cf5261f8bffd9de132b50660a69148e7575bd6</id>
<content type='text'>
Struct bio has an atomic ref count for chained bio's, and we use this
to know when to end IO on the bio. However, most bio's are not chained,
so we don't need to always introduce this atomic operation as part of
ending IO.

Add a helper to elevate the bi_remaining count, and flag the bio as
now actually needing the decrement at end_io time. Rename the field
to __bi_remaining to catch any current users of this doing the
incrementing manually.

For high IOPS workloads, this reduces the overhead of bio_endio()
substantially.

Tested-by: Robert Elliott &lt;elliott@hp.com&gt;
Acked-by: Kent Overstreet &lt;kent.overstreet@gmail.com&gt;
Reviewed-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>
Struct bio has an atomic ref count for chained bio's, and we use this
to know when to end IO on the bio. However, most bio's are not chained,
so we don't need to always introduce this atomic operation as part of
ending IO.

Add a helper to elevate the bi_remaining count, and flag the bio as
now actually needing the decrement at end_io time. Rename the field
to __bi_remaining to catch any current users of this doing the
incrementing manually.

For high IOPS workloads, this reduces the overhead of bio_endio()
substantially.

Tested-by: Robert Elliott &lt;elliott@hp.com&gt;
Acked-by: Kent Overstreet &lt;kent.overstreet@gmail.com&gt;
Reviewed-by: Jan Kara &lt;jack@suse.cz&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>blk-mq: fix FUA request hang</title>
<updated>2015-05-04T19:09:55+00:00</updated>
<author>
<name>Shaohua Li</name>
<email>shli@fb.com</email>
</author>
<published>2015-05-01T16:59:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=b2387ddcced8de3e6471a2fb16a409577063016f'/>
<id>b2387ddcced8de3e6471a2fb16a409577063016f</id>
<content type='text'>
When a FUA request enters its DATA stage of flush pipeline, the
request is added to mq requeue list, the request will then be added to
ctx-&gt;rq_list. blk_mq_attempt_merge() might merge the request with a bio.
Later when the request is finished the flush pipeline, the
request-&gt;__data_len is 0. Then I only saw the bio gets endio called, the
original request never finish.

Adding REQ_FLUSH_SEQ into REQ_NOMERGE_FLAGS looks an easy fix.

stable: 3.15+

Signed-off-by: Shaohua Li &lt;shli@fb.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 a FUA request enters its DATA stage of flush pipeline, the
request is added to mq requeue list, the request will then be added to
ctx-&gt;rq_list. blk_mq_attempt_merge() might merge the request with a bio.
Later when the request is finished the flush pipeline, the
request-&gt;__data_len is 0. Then I only saw the bio gets endio called, the
original request never finish.

Adding REQ_FLUSH_SEQ into REQ_NOMERGE_FLAGS looks an easy fix.

stable: 3.15+

Signed-off-by: Shaohua Li &lt;shli@fb.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Defer processing of REQ_PREEMPT requests for blocked devices</title>
<updated>2015-04-08T16:41:41+00:00</updated>
<author>
<name>Bart Van Assche</name>
<email>bart.vanassche@sandisk.com</email>
</author>
<published>2015-03-04T09:31:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=bba0bdd7ad4713d82338bcd9b72d57e9335a664b'/>
<id>bba0bdd7ad4713d82338bcd9b72d57e9335a664b</id>
<content type='text'>
SCSI transport drivers and SCSI LLDs block a SCSI device if the
transport layer is not operational. This means that in this state
no requests should be processed, even if the REQ_PREEMPT flag has
been set. This patch avoids that a rescan shortly after a cable
pull sporadically triggers the following kernel oops:

BUG: unable to handle kernel paging request at ffffc9001a6bc084
IP: [&lt;ffffffffa04e08f2&gt;] mlx4_ib_post_send+0xd2/0xb30 [mlx4_ib]
Process rescan-scsi-bus (pid: 9241, threadinfo ffff88053484a000, task ffff880534aae100)
Call Trace:
 [&lt;ffffffffa0718135&gt;] srp_post_send+0x65/0x70 [ib_srp]
 [&lt;ffffffffa071b9df&gt;] srp_queuecommand+0x1cf/0x3e0 [ib_srp]
 [&lt;ffffffffa0001ff1&gt;] scsi_dispatch_cmd+0x101/0x280 [scsi_mod]
 [&lt;ffffffffa0009ad1&gt;] scsi_request_fn+0x411/0x4d0 [scsi_mod]
 [&lt;ffffffff81223b37&gt;] __blk_run_queue+0x27/0x30
 [&lt;ffffffff8122a8d2&gt;] blk_execute_rq_nowait+0x82/0x110
 [&lt;ffffffff8122a9c2&gt;] blk_execute_rq+0x62/0xf0
 [&lt;ffffffffa000b0e8&gt;] scsi_execute+0xe8/0x190 [scsi_mod]
 [&lt;ffffffffa000b2f3&gt;] scsi_execute_req+0xa3/0x130 [scsi_mod]
 [&lt;ffffffffa000c1aa&gt;] scsi_probe_lun+0x17a/0x450 [scsi_mod]
 [&lt;ffffffffa000ce86&gt;] scsi_probe_and_add_lun+0x156/0x480 [scsi_mod]
 [&lt;ffffffffa000dc2f&gt;] __scsi_scan_target+0xdf/0x1f0 [scsi_mod]
 [&lt;ffffffffa000dfa3&gt;] scsi_scan_host_selected+0x183/0x1c0 [scsi_mod]
 [&lt;ffffffffa000edfb&gt;] scsi_scan+0xdb/0xe0 [scsi_mod]
 [&lt;ffffffffa000ee13&gt;] store_scan+0x13/0x20 [scsi_mod]
 [&lt;ffffffff811c8d9b&gt;] sysfs_write_file+0xcb/0x160
 [&lt;ffffffff811589de&gt;] vfs_write+0xce/0x140
 [&lt;ffffffff81158b53&gt;] sys_write+0x53/0xa0
 [&lt;ffffffff81464592&gt;] system_call_fastpath+0x16/0x1b
 [&lt;00007f611c9d9300&gt;] 0x7f611c9d92ff

Reported-by: Max Gurtuvoy &lt;maxg@mellanox.com&gt;
Signed-off-by: Bart Van Assche &lt;bart.vanassche@sandisk.com&gt;
Reviewed-by: Mike Christie &lt;michaelc@cs.wisc.edu&gt;
Cc: &lt;stable@vger.kernel.org&gt;
Signed-off-by: James Bottomley &lt;JBottomley@Odin.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
SCSI transport drivers and SCSI LLDs block a SCSI device if the
transport layer is not operational. This means that in this state
no requests should be processed, even if the REQ_PREEMPT flag has
been set. This patch avoids that a rescan shortly after a cable
pull sporadically triggers the following kernel oops:

BUG: unable to handle kernel paging request at ffffc9001a6bc084
IP: [&lt;ffffffffa04e08f2&gt;] mlx4_ib_post_send+0xd2/0xb30 [mlx4_ib]
Process rescan-scsi-bus (pid: 9241, threadinfo ffff88053484a000, task ffff880534aae100)
Call Trace:
 [&lt;ffffffffa0718135&gt;] srp_post_send+0x65/0x70 [ib_srp]
 [&lt;ffffffffa071b9df&gt;] srp_queuecommand+0x1cf/0x3e0 [ib_srp]
 [&lt;ffffffffa0001ff1&gt;] scsi_dispatch_cmd+0x101/0x280 [scsi_mod]
 [&lt;ffffffffa0009ad1&gt;] scsi_request_fn+0x411/0x4d0 [scsi_mod]
 [&lt;ffffffff81223b37&gt;] __blk_run_queue+0x27/0x30
 [&lt;ffffffff8122a8d2&gt;] blk_execute_rq_nowait+0x82/0x110
 [&lt;ffffffff8122a9c2&gt;] blk_execute_rq+0x62/0xf0
 [&lt;ffffffffa000b0e8&gt;] scsi_execute+0xe8/0x190 [scsi_mod]
 [&lt;ffffffffa000b2f3&gt;] scsi_execute_req+0xa3/0x130 [scsi_mod]
 [&lt;ffffffffa000c1aa&gt;] scsi_probe_lun+0x17a/0x450 [scsi_mod]
 [&lt;ffffffffa000ce86&gt;] scsi_probe_and_add_lun+0x156/0x480 [scsi_mod]
 [&lt;ffffffffa000dc2f&gt;] __scsi_scan_target+0xdf/0x1f0 [scsi_mod]
 [&lt;ffffffffa000dfa3&gt;] scsi_scan_host_selected+0x183/0x1c0 [scsi_mod]
 [&lt;ffffffffa000edfb&gt;] scsi_scan+0xdb/0xe0 [scsi_mod]
 [&lt;ffffffffa000ee13&gt;] store_scan+0x13/0x20 [scsi_mod]
 [&lt;ffffffff811c8d9b&gt;] sysfs_write_file+0xcb/0x160
 [&lt;ffffffff811589de&gt;] vfs_write+0xce/0x140
 [&lt;ffffffff81158b53&gt;] sys_write+0x53/0xa0
 [&lt;ffffffff81464592&gt;] system_call_fastpath+0x16/0x1b
 [&lt;00007f611c9d9300&gt;] 0x7f611c9d92ff

Reported-by: Max Gurtuvoy &lt;maxg@mellanox.com&gt;
Signed-off-by: Bart Van Assche &lt;bart.vanassche@sandisk.com&gt;
Reviewed-by: Mike Christie &lt;michaelc@cs.wisc.edu&gt;
Cc: &lt;stable@vger.kernel.org&gt;
Signed-off-by: James Bottomley &lt;JBottomley@Odin.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
