<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-stable.git/include/linux/blk_types.h, branch v4.0.4</title>
<subtitle>Linux kernel stable tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/'/>
<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>
<entry>
<title>blk-mq: Allow requests to never expire</title>
<updated>2015-01-08T15:59:01+00:00</updated>
<author>
<name>Keith Busch</name>
<email>keith.busch@intel.com</email>
</author>
<published>2015-01-08T01:55:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=5b3f25fc343690cafd3e27431a69a7bdaf9df001'/>
<id>5b3f25fc343690cafd3e27431a69a7bdaf9df001</id>
<content type='text'>
Some types of requests may be started that are not gauranteed to ever
complete. This adds a request flag that a driver can use so mark the
request as such.

Signed-off-by: Keith Busch &lt;keith.busch@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>
Some types of requests may be started that are not gauranteed to ever
complete. This adds a request flag that a driver can use so mark the
request as such.

Signed-off-by: Keith Busch &lt;keith.busch@intel.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>block: Remove REQ_KERNEL</title>
<updated>2014-10-14T15:00:44+00:00</updated>
<author>
<name>Martin K. Petersen</name>
<email>martin.petersen@oracle.com</email>
</author>
<published>2014-10-14T15:00:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=e19a8a0ad2d255316830ead05b59c5a704434cbb'/>
<id>e19a8a0ad2d255316830ead05b59c5a704434cbb</id>
<content type='text'>
REQ_KERNEL is no longer used. Remove it and drop the redundant uio
argument to nfs_file_direct_{read,write}.

Signed-off-by: Martin K. Petersen &lt;martin.petersen@oracle.com&gt;
Cc: Christoph Hellwig &lt;hch@infradead.org&gt;
Reported-by: Dan Carpenter &lt;dan.carpenter@oracle.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>
REQ_KERNEL is no longer used. Remove it and drop the redundant uio
argument to nfs_file_direct_{read,write}.

Signed-off-by: Martin K. Petersen &lt;martin.petersen@oracle.com&gt;
Cc: Christoph Hellwig &lt;hch@infradead.org&gt;
Reported-by: Dan Carpenter &lt;dan.carpenter@oracle.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>block: Relocate bio integrity flags</title>
<updated>2014-09-27T15:14:54+00:00</updated>
<author>
<name>Martin K. Petersen</name>
<email>martin.petersen@oracle.com</email>
</author>
<published>2014-09-26T23:20:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=b1f01388574c9329922f760fc2a7335c2d14b08b'/>
<id>b1f01388574c9329922f760fc2a7335c2d14b08b</id>
<content type='text'>
Move flags affecting the integrity code out of the bio bi_flags and into
the block integrity payload.

Signed-off-by: Martin K. Petersen &lt;martin.petersen@oracle.com&gt;
Reviewed-by: Sagi Grimberg &lt;sagig@mellanox.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>
Move flags affecting the integrity code out of the bio bi_flags and into
the block integrity payload.

Signed-off-by: Martin K. Petersen &lt;martin.petersen@oracle.com&gt;
Reviewed-by: Sagi Grimberg &lt;sagig@mellanox.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>block: Replace bi_integrity with bi_special</title>
<updated>2014-09-27T15:14:46+00:00</updated>
<author>
<name>Martin K. Petersen</name>
<email>martin.petersen@oracle.com</email>
</author>
<published>2014-09-26T23:19:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=180b2f95dd331010a9930a65c8a18d6d81b94dc1'/>
<id>180b2f95dd331010a9930a65c8a18d6d81b94dc1</id>
<content type='text'>
For commands like REQ_COPY we need a way to pass extra information along
with each bio. Like integrity metadata this information must be
available at the bottom of the stack so bi_private does not suffice.

Rename the existing bi_integrity field to bi_special and make it a union
so we can have different bio extensions for each class of command.

We previously used bi_integrity != NULL as a way to identify whether a
bio had integrity metadata or not. Introduce a REQ_INTEGRITY to be the
indicator now that bi_special can contain different things.

In addition, bio_integrity(bio) will now return a pointer to the
integrity payload (when applicable).

Signed-off-by: Martin K. Petersen &lt;martin.petersen@oracle.com&gt;
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
Reviewed-by: Sagi Grimberg &lt;sagig@mellanox.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>
For commands like REQ_COPY we need a way to pass extra information along
with each bio. Like integrity metadata this information must be
available at the bottom of the stack so bi_private does not suffice.

Rename the existing bi_integrity field to bi_special and make it a union
so we can have different bio extensions for each class of command.

We previously used bi_integrity != NULL as a way to identify whether a
bio had integrity metadata or not. Introduce a REQ_INTEGRITY to be the
indicator now that bi_special can contain different things.

In addition, bio_integrity(bio) will now return a pointer to the
integrity payload (when applicable).

Signed-off-by: Martin K. Petersen &lt;martin.petersen@oracle.com&gt;
Reviewed-by: Christoph Hellwig &lt;hch@lst.de&gt;
Reviewed-by: Sagi Grimberg &lt;sagig@mellanox.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>blk-mq: remove REQ_END</title>
<updated>2014-09-22T18:00:07+00:00</updated>
<author>
<name>Christoph Hellwig</name>
<email>hch@lst.de</email>
</author>
<published>2014-09-13T23:40:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=bf57229745f849e500ba69ff91e35bc8160a7373'/>
<id>bf57229745f849e500ba69ff91e35bc8160a7373</id>
<content type='text'>
Pass an explicit parameter for the last request in a batch to -&gt;queue_rq
instead of using a request flag.  Besides being a cleaner and non-stateful
interface this is also required for the next patch, which fixes the blk-mq
I/O submission code to not start a time too early.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Pass an explicit parameter for the last request in a batch to -&gt;queue_rq
instead of using a request flag.  Besides being a cleaner and non-stateful
interface this is also required for the next patch, which fixes the blk-mq
I/O submission code to not start a time too early.

Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs</title>
<updated>2014-06-12T17:30:18+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2014-06-12T17:30:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=16b9057804c02e2d351e9c8f606e909b43cbd9e7'/>
<id>16b9057804c02e2d351e9c8f606e909b43cbd9e7</id>
<content type='text'>
Pull vfs updates from Al Viro:
 "This the bunch that sat in -next + lock_parent() fix.  This is the
  minimal set; there's more pending stuff.

  In particular, I really hope to get acct.c fixes merged this cycle -
  we need that to deal sanely with delayed-mntput stuff.  In the next
  pile, hopefully - that series is fairly short and localized
  (kernel/acct.c, fs/super.c and fs/namespace.c).  In this pile: more
  iov_iter work.  Most of prereqs for -&gt;splice_write with sane locking
  order are there and Kent's dio rewrite would also fit nicely on top of
  this pile"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (70 commits)
  lock_parent: don't step on stale -&gt;d_parent of all-but-freed one
  kill generic_file_splice_write()
  ceph: switch to iter_file_splice_write()
  shmem: switch to iter_file_splice_write()
  nfs: switch to iter_splice_write_file()
  fs/splice.c: remove unneeded exports
  ocfs2: switch to iter_file_splice_write()
  -&gt;splice_write() via -&gt;write_iter()
  bio_vec-backed iov_iter
  optimize copy_page_{to,from}_iter()
  bury generic_file_aio_{read,write}
  lustre: get rid of messing with iovecs
  ceph: switch to -&gt;write_iter()
  ceph_sync_direct_write: stop poking into iov_iter guts
  ceph_sync_read: stop poking into iov_iter guts
  new helper: copy_page_from_iter()
  fuse: switch to -&gt;write_iter()
  btrfs: switch to -&gt;write_iter()
  ocfs2: switch to -&gt;write_iter()
  xfs: switch to -&gt;write_iter()
  ...
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Pull vfs updates from Al Viro:
 "This the bunch that sat in -next + lock_parent() fix.  This is the
  minimal set; there's more pending stuff.

  In particular, I really hope to get acct.c fixes merged this cycle -
  we need that to deal sanely with delayed-mntput stuff.  In the next
  pile, hopefully - that series is fairly short and localized
  (kernel/acct.c, fs/super.c and fs/namespace.c).  In this pile: more
  iov_iter work.  Most of prereqs for -&gt;splice_write with sane locking
  order are there and Kent's dio rewrite would also fit nicely on top of
  this pile"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (70 commits)
  lock_parent: don't step on stale -&gt;d_parent of all-but-freed one
  kill generic_file_splice_write()
  ceph: switch to iter_file_splice_write()
  shmem: switch to iter_file_splice_write()
  nfs: switch to iter_splice_write_file()
  fs/splice.c: remove unneeded exports
  ocfs2: switch to iter_file_splice_write()
  -&gt;splice_write() via -&gt;write_iter()
  bio_vec-backed iov_iter
  optimize copy_page_{to,from}_iter()
  bury generic_file_aio_{read,write}
  lustre: get rid of messing with iovecs
  ceph: switch to -&gt;write_iter()
  ceph_sync_direct_write: stop poking into iov_iter guts
  ceph_sync_read: stop poking into iov_iter guts
  new helper: copy_page_from_iter()
  fuse: switch to -&gt;write_iter()
  btrfs: switch to -&gt;write_iter()
  ocfs2: switch to -&gt;write_iter()
  xfs: switch to -&gt;write_iter()
  ...
</pre>
</div>
</content>
</entry>
<entry>
<title>blk-mq: improve support for shared tags maps</title>
<updated>2014-05-13T21:10:52+00:00</updated>
<author>
<name>Jens Axboe</name>
<email>axboe@fb.com</email>
</author>
<published>2014-05-13T21:10:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=0d2602ca30e410e84e8bdf05c84ed5688e0a5a44'/>
<id>0d2602ca30e410e84e8bdf05c84ed5688e0a5a44</id>
<content type='text'>
This adds support for active queue tracking, meaning that the
blk-mq tagging maintains a count of active users of a tag set.
This allows us to maintain a notion of fairness between users,
so that we can distribute the tag depth evenly without starving
some users while allowing others to try unfair deep queues.

If sharing of a tag set is detected, each hardware queue will
track the depth of its own queue. And if this exceeds the total
depth divided by the number of active queues, the user is actively
throttled down.

The active queue count is done lazily to avoid bouncing that data
between submitter and completer. Each hardware queue gets marked
active when it allocates its first tag, and gets marked inactive
when 1) the last tag is cleared, and 2) the queue timeout grace
period has passed.

Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This adds support for active queue tracking, meaning that the
blk-mq tagging maintains a count of active users of a tag set.
This allows us to maintain a notion of fairness between users,
so that we can distribute the tag depth evenly without starving
some users while allowing others to try unfair deep queues.

If sharing of a tag set is detected, each hardware queue will
track the depth of its own queue. And if this exceeds the total
depth divided by the number of active queues, the user is actively
throttled down.

The active queue count is done lazily to avoid bouncing that data
between submitter and completer. Each hardware queue gets marked
active when it allocates its first tag, and gets marked inactive
when 1) the last tag is cleared, and 2) the queue timeout grace
period has passed.

Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>bio_vec-backed iov_iter</title>
<updated>2014-05-06T21:39:45+00:00</updated>
<author>
<name>Al Viro</name>
<email>viro@zeniv.linux.org.uk</email>
</author>
<published>2014-04-05T03:12:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=62a8067a7f35dba2de501c9cb00e4cf36da90bc0'/>
<id>62a8067a7f35dba2de501c9cb00e4cf36da90bc0</id>
<content type='text'>
New variant of iov_iter - ITER_BVEC in iter-&gt;type, backed with
bio_vec array instead of iovec one.  Primitives taught to deal
with such beasts, __swap_write() switched to using that kind
of iov_iter.

Note that bio_vec is just a &lt;page, offset, length&gt; triple - there's
nothing block-specific about it.  I've left the definition where it
was, but took it from under ifdef CONFIG_BLOCK.

Next target: -&gt;splice_write()...

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>
New variant of iov_iter - ITER_BVEC in iter-&gt;type, backed with
bio_vec array instead of iovec one.  Primitives taught to deal
with such beasts, __swap_write() switched to using that kind
of iov_iter.

Note that bio_vec is just a &lt;page, offset, length&gt; triple - there's
nothing block-specific about it.  I've left the definition where it
was, but took it from under ifdef CONFIG_BLOCK.

Next target: -&gt;splice_write()...

Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>block: fix regression with block enabled tagging</title>
<updated>2014-04-10T03:54:06+00:00</updated>
<author>
<name>Jens Axboe</name>
<email>axboe@fb.com</email>
</author>
<published>2014-04-10T02:27:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux-stable.git/commit/?id=360f92c2443073143467a0088daffec96a17910b'/>
<id>360f92c2443073143467a0088daffec96a17910b</id>
<content type='text'>
Martin reported that his test system would not boot with
current git, it oopsed with this:

BUG: unable to handle kernel paging request at ffff88046c6c9e80
IP: [&lt;ffffffff812971e0&gt;] blk_queue_start_tag+0x90/0x150
PGD 1ddf067 PUD 1de2067 PMD 47fc7d067 PTE 800000046c6c9060
Oops: 0002 [#1] SMP DEBUG_PAGEALLOC
Modules linked in: sd_mod lpfc(+) scsi_transport_fc scsi_tgt oracleasm
rpcsec_gss_krb5 ipv6 igb dca i2c_algo_bit i2c_core hwmon
CPU: 3 PID: 87 Comm: kworker/u17:1 Not tainted 3.14.0+ #246
Hardware name: Supermicro X9DRX+-F/X9DRX+-F, BIOS 3.00 07/09/2013
Workqueue: events_unbound async_run_entry_fn
task: ffff8802743c2150 ti: ffff880273d02000 task.ti: ffff880273d02000
RIP: 0010:[&lt;ffffffff812971e0&gt;]  [&lt;ffffffff812971e0&gt;]
blk_queue_start_tag+0x90/0x150
RSP: 0018:ffff880273d03a58  EFLAGS: 00010092
RAX: ffff88046c6c9e78 RBX: ffff880077208e78 RCX: 00000000fffc8da6
RDX: 00000000fffc186d RSI: 0000000000000009 RDI: 00000000fffc8d9d
RBP: ffff880273d03a88 R08: 0000000000000001 R09: ffff8800021c2410
R10: 0000000000000005 R11: 0000000000015b30 R12: ffff88046c5bb8a0
R13: ffff88046c5c0890 R14: 000000000000001e R15: 000000000000001e
FS:  0000000000000000(0000) GS:ffff880277b00000(0000)
knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: ffff88046c6c9e80 CR3: 00000000018f6000 CR4: 00000000000407e0
Stack:
 ffff880273d03a98 ffff880474b18800 0000000000000000 ffff880474157000
 ffff88046c5c0890 ffff880077208e78 ffff880273d03ae8 ffffffff813b9e62
 ffff880200000010 ffff880474b18968 ffff880474b18848 ffff88046c5c0cd8
Call Trace:
 [&lt;ffffffff813b9e62&gt;] scsi_request_fn+0xf2/0x510
 [&lt;ffffffff81293167&gt;] __blk_run_queue+0x37/0x50
 [&lt;ffffffff8129ac43&gt;] blk_execute_rq_nowait+0xb3/0x130
 [&lt;ffffffff8129ad24&gt;] blk_execute_rq+0x64/0xf0
 [&lt;ffffffff8108d2b0&gt;] ? bit_waitqueue+0xd0/0xd0
 [&lt;ffffffff813bba35&gt;] scsi_execute+0xe5/0x180
 [&lt;ffffffff813bbe4a&gt;] scsi_execute_req_flags+0x9a/0x110
 [&lt;ffffffffa01b1304&gt;] sd_spinup_disk+0x94/0x460 [sd_mod]
 [&lt;ffffffff81160000&gt;] ? __unmap_hugepage_range+0x200/0x2f0
 [&lt;ffffffffa01b2b9a&gt;] sd_revalidate_disk+0xaa/0x3f0 [sd_mod]
 [&lt;ffffffffa01b2fb8&gt;] sd_probe_async+0xd8/0x200 [sd_mod]
 [&lt;ffffffff8107703f&gt;] async_run_entry_fn+0x3f/0x140
 [&lt;ffffffff8106a1c5&gt;] process_one_work+0x175/0x410
 [&lt;ffffffff8106b373&gt;] worker_thread+0x123/0x400
 [&lt;ffffffff8106b250&gt;] ? manage_workers+0x160/0x160
 [&lt;ffffffff8107104e&gt;] kthread+0xce/0xf0
 [&lt;ffffffff81070f80&gt;] ? kthread_freezable_should_stop+0x70/0x70
 [&lt;ffffffff815f0bac&gt;] ret_from_fork+0x7c/0xb0
 [&lt;ffffffff81070f80&gt;] ? kthread_freezable_should_stop+0x70/0x70
Code: 48 0f ab 11 72 db 48 81 4b 40 00 00 10 00 89 83 08 01 00 00 48 89
df 49 8b 04 24 48 89 1c d0 e8 f7 a8 ff ff 49 8b 85 28 05 00 00 &lt;48&gt; 89
58 08 48 89 03 49 8d 85 28 05 00 00 48 89 43 08 49 89 9d
RIP  [&lt;ffffffff812971e0&gt;] blk_queue_start_tag+0x90/0x150
 RSP &lt;ffff880273d03a58&gt;
CR2: ffff88046c6c9e80

Martin bisected and found this to be the problem patch;

	commit 6d113398dcf4dfcd9787a4ead738b186f7b7ff0f
	Author: Jan Kara &lt;jack@suse.cz&gt;
	Date:   Mon Feb 24 16:39:54 2014 +0100

	    block: Stop abusing rq-&gt;csd.list in blk-softirq

and the problem was immediately apparent. The patch states that
it is safe to reuse queuelist at completion time, since it is
no longer used. However, that is not true if a device is using
block enabled tagging. If that is the case, then the queuelist
is reused to keep track of busy tags. If a device also ended
up using softirq completions, we'd reuse -&gt;queuelist for the
IPI handling while block tagging was still using it. Boom.

Fix this by adding a new ipi_list list head, and share the
memory used with the request hash table. The hash table is
never used after the request is moved to the dispatch list,
which happens long before any potential completion of the
request. Add a new request bit for this, so we don't have
cases that check rq-&gt;hash while it could potentially have
been reused for the IPI completion.

Reported-by: Martin K. Petersen &lt;martin.petersen@oracle.com&gt;
Tested-by: Benjamin Herrenschmidt &lt;benh@kernel.crashing.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>
Martin reported that his test system would not boot with
current git, it oopsed with this:

BUG: unable to handle kernel paging request at ffff88046c6c9e80
IP: [&lt;ffffffff812971e0&gt;] blk_queue_start_tag+0x90/0x150
PGD 1ddf067 PUD 1de2067 PMD 47fc7d067 PTE 800000046c6c9060
Oops: 0002 [#1] SMP DEBUG_PAGEALLOC
Modules linked in: sd_mod lpfc(+) scsi_transport_fc scsi_tgt oracleasm
rpcsec_gss_krb5 ipv6 igb dca i2c_algo_bit i2c_core hwmon
CPU: 3 PID: 87 Comm: kworker/u17:1 Not tainted 3.14.0+ #246
Hardware name: Supermicro X9DRX+-F/X9DRX+-F, BIOS 3.00 07/09/2013
Workqueue: events_unbound async_run_entry_fn
task: ffff8802743c2150 ti: ffff880273d02000 task.ti: ffff880273d02000
RIP: 0010:[&lt;ffffffff812971e0&gt;]  [&lt;ffffffff812971e0&gt;]
blk_queue_start_tag+0x90/0x150
RSP: 0018:ffff880273d03a58  EFLAGS: 00010092
RAX: ffff88046c6c9e78 RBX: ffff880077208e78 RCX: 00000000fffc8da6
RDX: 00000000fffc186d RSI: 0000000000000009 RDI: 00000000fffc8d9d
RBP: ffff880273d03a88 R08: 0000000000000001 R09: ffff8800021c2410
R10: 0000000000000005 R11: 0000000000015b30 R12: ffff88046c5bb8a0
R13: ffff88046c5c0890 R14: 000000000000001e R15: 000000000000001e
FS:  0000000000000000(0000) GS:ffff880277b00000(0000)
knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: ffff88046c6c9e80 CR3: 00000000018f6000 CR4: 00000000000407e0
Stack:
 ffff880273d03a98 ffff880474b18800 0000000000000000 ffff880474157000
 ffff88046c5c0890 ffff880077208e78 ffff880273d03ae8 ffffffff813b9e62
 ffff880200000010 ffff880474b18968 ffff880474b18848 ffff88046c5c0cd8
Call Trace:
 [&lt;ffffffff813b9e62&gt;] scsi_request_fn+0xf2/0x510
 [&lt;ffffffff81293167&gt;] __blk_run_queue+0x37/0x50
 [&lt;ffffffff8129ac43&gt;] blk_execute_rq_nowait+0xb3/0x130
 [&lt;ffffffff8129ad24&gt;] blk_execute_rq+0x64/0xf0
 [&lt;ffffffff8108d2b0&gt;] ? bit_waitqueue+0xd0/0xd0
 [&lt;ffffffff813bba35&gt;] scsi_execute+0xe5/0x180
 [&lt;ffffffff813bbe4a&gt;] scsi_execute_req_flags+0x9a/0x110
 [&lt;ffffffffa01b1304&gt;] sd_spinup_disk+0x94/0x460 [sd_mod]
 [&lt;ffffffff81160000&gt;] ? __unmap_hugepage_range+0x200/0x2f0
 [&lt;ffffffffa01b2b9a&gt;] sd_revalidate_disk+0xaa/0x3f0 [sd_mod]
 [&lt;ffffffffa01b2fb8&gt;] sd_probe_async+0xd8/0x200 [sd_mod]
 [&lt;ffffffff8107703f&gt;] async_run_entry_fn+0x3f/0x140
 [&lt;ffffffff8106a1c5&gt;] process_one_work+0x175/0x410
 [&lt;ffffffff8106b373&gt;] worker_thread+0x123/0x400
 [&lt;ffffffff8106b250&gt;] ? manage_workers+0x160/0x160
 [&lt;ffffffff8107104e&gt;] kthread+0xce/0xf0
 [&lt;ffffffff81070f80&gt;] ? kthread_freezable_should_stop+0x70/0x70
 [&lt;ffffffff815f0bac&gt;] ret_from_fork+0x7c/0xb0
 [&lt;ffffffff81070f80&gt;] ? kthread_freezable_should_stop+0x70/0x70
Code: 48 0f ab 11 72 db 48 81 4b 40 00 00 10 00 89 83 08 01 00 00 48 89
df 49 8b 04 24 48 89 1c d0 e8 f7 a8 ff ff 49 8b 85 28 05 00 00 &lt;48&gt; 89
58 08 48 89 03 49 8d 85 28 05 00 00 48 89 43 08 49 89 9d
RIP  [&lt;ffffffff812971e0&gt;] blk_queue_start_tag+0x90/0x150
 RSP &lt;ffff880273d03a58&gt;
CR2: ffff88046c6c9e80

Martin bisected and found this to be the problem patch;

	commit 6d113398dcf4dfcd9787a4ead738b186f7b7ff0f
	Author: Jan Kara &lt;jack@suse.cz&gt;
	Date:   Mon Feb 24 16:39:54 2014 +0100

	    block: Stop abusing rq-&gt;csd.list in blk-softirq

and the problem was immediately apparent. The patch states that
it is safe to reuse queuelist at completion time, since it is
no longer used. However, that is not true if a device is using
block enabled tagging. If that is the case, then the queuelist
is reused to keep track of busy tags. If a device also ended
up using softirq completions, we'd reuse -&gt;queuelist for the
IPI handling while block tagging was still using it. Boom.

Fix this by adding a new ipi_list list head, and share the
memory used with the request hash table. The hash table is
never used after the request is moved to the dispatch list,
which happens long before any potential completion of the
request. Add a new request bit for this, so we don't have
cases that check rq-&gt;hash while it could potentially have
been reused for the IPI completion.

Reported-by: Martin K. Petersen &lt;martin.petersen@oracle.com&gt;
Tested-by: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
