From 8f6665afff79f98e63561fe7629cb35764d132a0 Mon Sep 17 00:00:00 2001 From: Mark Lord Date: Fri, 24 Sep 2010 09:51:13 -0400 Subject: [PATCH] --- yaml --- r: 213055 b: refs/heads/master c: 4b1977698ceb4c4caa800d475127139da49966f9 h: refs/heads/master i: 213053: 90ffc571f5c2980a14f9533e1eee395529284629 213051: 471c905253184a7419615faa5e70d97b13ed4630 213047: b11b30985e611923fae4a5d492f8efc4fa78afa8 213039: ddd966a09cc968c25c6e9b4298f8503efe2c8be2 213023: 4dc5572978494c37a8a84ba7276f0e41ee26e66f 212991: 0c478d4f5473aabada2e4f738739d42a1a13a2eb v: v3 --- [refs] | 2 +- trunk/block/blk-exec.c | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 76212b399f53..7ea941981907 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 749ef9f8423054e326f3a246327ed2db4b6d395f +refs/heads/master: 4b1977698ceb4c4caa800d475127139da49966f9 diff --git a/trunk/block/blk-exec.c b/trunk/block/blk-exec.c index e1672f14840e..cf1456a02acd 100644 --- a/trunk/block/blk-exec.c +++ b/trunk/block/blk-exec.c @@ -80,6 +80,7 @@ int blk_execute_rq(struct request_queue *q, struct gendisk *bd_disk, DECLARE_COMPLETION_ONSTACK(wait); char sense[SCSI_SENSE_BUFFERSIZE]; int err = 0; + unsigned long hang_check; /* * we need an extra reference to the request, so we can look at @@ -95,7 +96,13 @@ int blk_execute_rq(struct request_queue *q, struct gendisk *bd_disk, rq->end_io_data = &wait; blk_execute_rq_nowait(q, bd_disk, rq, at_head, blk_end_sync_rq); - wait_for_completion(&wait); + + /* Prevent hang_check timer from firing at us during very long I/O */ + hang_check = sysctl_hung_task_timeout_secs; + if (hang_check) + while (!wait_for_completion_timeout(&wait, hang_check * (HZ/2))); + else + wait_for_completion(&wait); if (rq->errors) err = -EIO;