From: Jens Axboe It doesn't always look safe to let ->waiting remain set when returning from functions that set it to point to stack area, since various locations check for != NULL to see if it's valid. So clear it on return from ide_do_drive_cmd() and blk_execute_rq(). --- 25-akpm/drivers/block/ll_rw_blk.c | 1 + 25-akpm/drivers/ide/ide-io.c | 1 + 2 files changed, 2 insertions(+) diff -puN drivers/block/ll_rw_blk.c~blk-completion-clear-stack-pointer-on-return drivers/block/ll_rw_blk.c --- 25/drivers/block/ll_rw_blk.c~blk-completion-clear-stack-pointer-on-return Fri May 21 16:15:21 2004 +++ 25-akpm/drivers/block/ll_rw_blk.c Fri May 21 16:15:43 2004 @@ -1883,6 +1883,7 @@ int blk_execute_rq(request_queue_t *q, s elv_add_request(q, rq, ELEVATOR_INSERT_BACK, 1); generic_unplug_device(q); wait_for_completion(&wait); + rq->waiting = NULL; if (rq->errors) err = -EIO; diff -puN drivers/ide/ide-io.c~blk-completion-clear-stack-pointer-on-return drivers/ide/ide-io.c --- 25/drivers/ide/ide-io.c~blk-completion-clear-stack-pointer-on-return Fri May 21 16:15:21 2004 +++ 25-akpm/drivers/ide/ide-io.c Fri May 21 16:15:21 2004 @@ -1388,6 +1388,7 @@ int ide_do_drive_cmd (ide_drive_t *drive err = 0; if (must_wait) { wait_for_completion(&wait); + rq->waiting = NULL; if (rq->errors) err = -EIO; _