]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.drivers/block-abort-request-rq-complete-marking
Move xen patchset to new version's subdir.
[ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.drivers / block-abort-request-rq-complete-marking
diff --git a/src/patches/suse-2.6.27.31/patches.drivers/block-abort-request-rq-complete-marking b/src/patches/suse-2.6.27.31/patches.drivers/block-abort-request-rq-complete-marking
new file mode 100644 (file)
index 0000000..83b21cf
--- /dev/null
@@ -0,0 +1,30 @@
+From: Jens Axboe <jens.axboe@oracle.com>
+Date:   Tue Sep 16 09:54:11 2008 -0700
+Subject: use rq complete marking in blk_abort_request()
+Git: 7ba1fbaa4a478f72fbaf5a56af9c82a77966b4c7
+References: bnc#434105
+
+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 <andmike@linux.vnet.ibm.com>
+    
+Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
+Signed-off-by: Hannes Reinecke <hare@suse.de>
+
+---
+ block/blk-timeout.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/block/blk-timeout.c
++++ b/block/blk-timeout.c
+@@ -99,6 +99,8 @@ void blk_rq_timed_out_timer(unsigned lon
+  */
+ void blk_abort_request(struct request *req)
+ {
++      if (blk_mark_rq_complete(req))
++              return;
+       blk_delete_timer(req);
+       blk_rq_timed_out(req);
+ }