Răsfoiți Sursa

blk: move blk_delete_timer call in end_that_request_last

Move the calling  blk_delete_timer to later in end_that_request_last to
address an issue where blkdev_dequeue_request may have add a timer for the
request.

Signed-off-by: Mike Anderson <andmike@linux.vnet.ibm.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Mike Anderson 16 ani în urmă
părinte
comite
e78042e5b8
1 a modificat fișierele cu 2 adăugiri și 2 ștergeri
  1. 2 2
      block/blk-core.c

+ 2 - 2
block/blk-core.c

@@ -1770,8 +1770,6 @@ static void end_that_request_last(struct request *req, int error)
 {
 {
 	struct gendisk *disk = req->rq_disk;
 	struct gendisk *disk = req->rq_disk;
 
 
-	blk_delete_timer(req);
-
 	if (blk_rq_tagged(req))
 	if (blk_rq_tagged(req))
 		blk_queue_end_tag(req->q, req);
 		blk_queue_end_tag(req->q, req);
 
 
@@ -1781,6 +1779,8 @@ static void end_that_request_last(struct request *req, int error)
 	if (unlikely(laptop_mode) && blk_fs_request(req))
 	if (unlikely(laptop_mode) && blk_fs_request(req))
 		laptop_io_completion();
 		laptop_io_completion();
 
 
+	blk_delete_timer(req);
+
 	/*
 	/*
 	 * Account IO completion.  bar_rq isn't accounted as a normal
 	 * Account IO completion.  bar_rq isn't accounted as a normal
 	 * IO on queueing nor completion.  Accounting the containing
 	 * IO on queueing nor completion.  Accounting the containing