
From: Jens Axboe <axboe@suse.de>

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;
 

_
