]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.fixes/block-use-round_jiffies_up
Reenabled linux-xen, added patches for Xen Kernel Version 2.6.27.31,
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.fixes / block-use-round_jiffies_up
diff --git a/src/patches/suse-2.6.27.31/patches.fixes/block-use-round_jiffies_up b/src/patches/suse-2.6.27.31/patches.fixes/block-use-round_jiffies_up
new file mode 100644 (file)
index 0000000..6d3b0b1
--- /dev/null
@@ -0,0 +1,68 @@
+Subject: Block: use round_jiffies_up()
+From: Alan Stern <stern@rowland.harvard.edu>
+Date: Thu Nov 6 08:42:49 2008 +0100:
+Git: 7838c15b8dd18e78a523513749e5b54bda07b0cb
+References: bnc#464155
+
+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 <stern@rowland.harvard.edu>
+Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
+Signed-off-by: Hannes Reinecke <hare@suse.de>
+
+---
+ block/blk-timeout.c |   20 +++-----------------
+ 1 file changed, 3 insertions(+), 17 deletions(-)
+
+--- a/block/blk-timeout.c
++++ b/block/blk-timeout.c
+@@ -16,14 +16,7 @@ void blk_delete_timer(struct request *re
+ {
+       struct request_queue *q = req->q;
+-      /*
+-       * Nothing to detach
+-       */
+-      if (!q->rq_timed_out_fn || !req->deadline)
+-              return;
+-
+       list_del_init(&req->timeout_list);
+-
+       if (list_empty(&q->timeout_list))
+               del_timer(&q->timeout);
+ }
+@@ -83,7 +76,7 @@ void blk_rq_timed_out_timer(unsigned lon
+       }
+       if (next_set && !list_empty(&q->timeout_list))
+-              mod_timer(&q->timeout, round_jiffies(next));
++              mod_timer(&q->timeout, round_jiffies_up(next));
+       spin_unlock_irqrestore(q->queue_lock, flags);
+ }
+@@ -139,17 +132,10 @@ void blk_add_timer(struct request *req)
+       /*
+        * If the timer isn't already pending or this timeout is earlier
+-       * than an existing one, modify the timer. Round to next nearest
++       * than an existing one, modify the timer. Round up to next nearest
+        * second.
+        */
+-      expiry = round_jiffies(req->deadline);
+-
+-      /*
+-       * We use ->deadline == 0 to detect whether a timer was added or
+-       * not, so just increase to next jiffy for that specific case
+-       */
+-      if (unlikely(!req->deadline))
+-              req->deadline = 1;
++      expiry = round_jiffies_up(req->deadline);
+       if (!timer_pending(&q->timeout) ||
+           time_before(expiry, q->timeout.expires))