<feed xmlns='http://www.w3.org/2005/Atom'>
<title>user/sven/linux.git/block/blk-timeout.c, branch v3.0-rc5</title>
<subtitle>Linux Kernel
</subtitle>
<id>https://git.stealer.net/cgit.cgi/user/sven/linux.git/atom?h=v3.0-rc5</id>
<link rel='self' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/atom?h=v3.0-rc5'/>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/'/>
<updated>2010-04-21T15:42:08Z</updated>
<entry>
<title>block: ensure jiffies wrap is handled correctly in blk_rq_timed_out_timer</title>
<updated>2010-04-21T15:42:08Z</updated>
<author>
<name>Richard Kennedy</name>
<email>richard@rsk.demon.co.uk</email>
</author>
<published>2010-04-14T18:54:03Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=a534dbe96e9929c7245924d8252d89048c23d569'/>
<id>urn:sha1:a534dbe96e9929c7245924d8252d89048c23d569</id>
<content type='text'>
blk_rq_timed_out_timer() relied on blk_add_timer() never returning a
timer value of zero, but commit 7838c15b8dd18e78a523513749e5b54bda07b0cb
removed the code that bumped this value when it was zero.
Therefore when jiffies is near wrap we could get unlucky &amp; not set the
timeout value correctly.

This patch uses a flag to indicate that the timeout value was set and so
handles jiffies wrap correctly, and it keeps all the logic in one
function so should be easier to maintain in the future.

Signed-off-by: Richard Kennedy &lt;richard@rsk.demon.co.uk&gt;
Cc: stable@kernel.org
Signed-off-by: Jens Axboe &lt;jens.axboe@oracle.com&gt;
</content>
</entry>
<entry>
<title>block: clean up misc stuff after block layer timeout conversion</title>
<updated>2009-04-28T05:37:34Z</updated>
<author>
<name>Tejun Heo</name>
<email>tj@kernel.org</email>
</author>
<published>2009-04-23T02:05:18Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=2eef33e439ba9ae387cdc3f1abcef2f3f6c4e7a8'/>
<id>urn:sha1:2eef33e439ba9ae387cdc3f1abcef2f3f6c4e7a8</id>
<content type='text'>
* In blk_rq_timed_out_timer(), else { if } to else if

* In blk_add_timer(), simplify if/else block

[ Impact: cleanup ]

Signed-off-by: Tejun Heo &lt;tj@kernel.org&gt;
</content>
</entry>
<entry>
<title>block: fix intermittent dm timeout based oops</title>
<updated>2009-04-24T06:54:21Z</updated>
<author>
<name>Hannes Reinecke</name>
<email>hare@suse.de</email>
</author>
<published>2009-04-23T08:32:59Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=17d5c8ca7572124c9623045f24b0c21d4aa2b47f'/>
<id>urn:sha1:17d5c8ca7572124c9623045f24b0c21d4aa2b47f</id>
<content type='text'>
Very rarely under stress testing of dm, oopses are occuring as
something tampers with an old stack frame.  This has been traced back
to blk_abort_queue() leaving a timeout_list pointing to the stack.
The reason is that sometimes blk_abort_request() won't delete the
timer (if the request is marked as complete but before the timer has
been removed, a small race window).  Fix this by splicing back from
the ususally empty list to the q-&gt;timeout_list.

Signed-off-by: Hannes Reinecke &lt;hare@suse.de&gt;
Signed-off-by: Jens Axboe &lt;jens.axboe@oracle.com&gt;
</content>
</entry>
<entry>
<title>block: make blk_abort_queue() ignore non-request based devices</title>
<updated>2009-04-22T06:35:10Z</updated>
<author>
<name>Jens Axboe</name>
<email>jens.axboe@oracle.com</email>
</author>
<published>2009-04-17T06:36:50Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=b759113499d6c7cb75fab04f56772579308bc0f8'/>
<id>urn:sha1:b759113499d6c7cb75fab04f56772579308bc0f8</id>
<content type='text'>
There's nothing to do for those devices, since the timeout handling is
based on requests.

Signed-off-by: Jens Axboe &lt;jens.axboe@oracle.com&gt;
</content>
</entry>
<entry>
<title>block: fix deadlock in blk_abort_queue() for drivers that readd to timeout list</title>
<updated>2009-02-18T09:34:16Z</updated>
<author>
<name>Hannes Reinecke</name>
<email>hare@suse.de</email>
</author>
<published>2009-02-18T09:30:15Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=be987fdb55a4726e2fcbab7501f89276bdb57288'/>
<id>urn:sha1:be987fdb55a4726e2fcbab7501f89276bdb57288</id>
<content type='text'>
blk_abort_queue() iterates the timeout list and aborts each request on the
list, but if the driver error handling readds a request to the timeout list
during this processing, we could be looping forever. Fix this by splicing
current entries to a local list and run over that list instead.

Signed-off-by: Jens Axboe &lt;jens.axboe@oracle.com&gt;
</content>
</entry>
<entry>
<title>block: leave the request timeout timer running even on an empty list</title>
<updated>2008-12-29T07:28:42Z</updated>
<author>
<name>Jens Axboe</name>
<email>jens.axboe@oracle.com</email>
</author>
<published>2008-11-19T13:38:39Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=70ed28b92a786f44750ab64117b03d126dd14656'/>
<id>urn:sha1:70ed28b92a786f44750ab64117b03d126dd14656</id>
<content type='text'>
For sync IO, we'll often do them serialized. This means we'll be touching
the queue timer for every IO, as opposed to only occasionally like we
do for queued IO. Instead of deleting the timer when the last request
is removed, just let continue running. If a new request comes up soon
we then don't have to readd the timer again. If no new requests arrive,
the timer will expire without side effect later.

This improves high iops sync IO by ~1%.

Signed-off-by: Jens Axboe &lt;jens.axboe@oracle.com&gt;
</content>
</entry>
<entry>
<title>block: add comment in blk_rq_timed_out() about why next can not be 0</title>
<updated>2008-12-29T07:28:42Z</updated>
<author>
<name>Jens Axboe</name>
<email>jens.axboe@oracle.com</email>
</author>
<published>2008-10-30T07:53:02Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=65d3618ccfe686e8d7b3f01a838d0578182406df'/>
<id>urn:sha1:65d3618ccfe686e8d7b3f01a838d0578182406df</id>
<content type='text'>
Signed-off-by: Jens Axboe &lt;jens.axboe@oracle.com&gt;
</content>
</entry>
<entry>
<title>block: optimizations in blk_rq_timed_out_timer()</title>
<updated>2008-12-29T07:28:42Z</updated>
<author>
<name>malahal@us.ibm.com</name>
<email>malahal@us.ibm.com</email>
</author>
<published>2008-10-30T07:51:58Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=565e411d764eeda006738dfadbccca79d48381e1'/>
<id>urn:sha1:565e411d764eeda006738dfadbccca79d48381e1</id>
<content type='text'>
Now the rq-&gt;deadline can't be zero if the request is in the
timeout_list, so there is no need to have next_set. There is no need to
access a request's deadline field if blk_rq_timed_out is called on it.

Signed-off-by: Malahal Naineni &lt;malahal@us.ibm.com&gt;
Signed-off-by: Jens Axboe &lt;jens.axboe@oracle.com&gt;
</content>
</entry>
<entry>
<title>Block: use round_jiffies_up()</title>
<updated>2008-11-06T07:42:49Z</updated>
<author>
<name>Alan Stern</name>
<email>stern@rowland.harvard.edu</email>
</author>
<published>2008-11-06T07:42:49Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=7838c15b8dd18e78a523513749e5b54bda07b0cb'/>
<id>urn:sha1:7838c15b8dd18e78a523513749e5b54bda07b0cb</id>
<content type='text'>
This patch (as1159b) changes the timeout routines in the block core to
use round_jiffies_up().  There's no point in rounding the timer
deadline down, since if it expires too early we will have to restart
it.

The patch also removes some unnecessary tests when a request is
removed from the queue's timer list.

Signed-off-by: Alan Stern &lt;stern@rowland.harvard.edu&gt;
Signed-off-by: Jens Axboe &lt;jens.axboe@oracle.com&gt;
</content>
</entry>
<entry>
<title>block: use rq complete marking in blk_abort_request()</title>
<updated>2008-10-09T06:56:17Z</updated>
<author>
<name>Jens Axboe</name>
<email>jens.axboe@oracle.com</email>
</author>
<published>2008-09-16T16:54:11Z</published>
<link rel='alternate' type='text/html' href='https://git.stealer.net/cgit.cgi/user/sven/linux.git/commit/?id=7ba1fbaa4a478f72fbaf5a56af9c82a77966b4c7'/>
<id>urn:sha1:7ba1fbaa4a478f72fbaf5a56af9c82a77966b4c7</id>
<content type='text'>
We cannot abort a request if we raced with the timeout handler already,
or with the IO completion. So make blk_abort_request() mark the request
as complete, and only continue if we succeeded.

Found and suggested by Mike Anderson &lt;andmike@linux.vnet.ibm.com&gt;

Signed-off-by: Jens Axboe &lt;jens.axboe@oracle.com&gt;
</content>
</entry>
</feed>
