
From: brking@us.ibm.com

init_tag_map should not initialize the busy_list, refcnt, or busy fields in
the tag map since blk_queue_resize_tags can call it while requests are
active.  Patch moves this initialization into blk_queue_init_tags.

Signed-off-by: Jens Axboe <axboe@suse.de>
Signed-off-by: Brian King <brking@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/block/ll_rw_blk.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff -puN drivers/block/ll_rw_blk.c~blk_resize_tags-fix drivers/block/ll_rw_blk.c
--- 25/drivers/block/ll_rw_blk.c~blk_resize_tags-fix	Mon Aug  9 14:41:30 2004
+++ 25-akpm/drivers/block/ll_rw_blk.c	Mon Aug  9 14:41:30 2004
@@ -598,9 +598,6 @@ init_tag_map(request_queue_t *q, struct 
 	for (i = depth; i < bits * BLK_TAGS_PER_LONG; i++)
 		__set_bit(i, tags->tag_map);
 
-	INIT_LIST_HEAD(&tags->busy_list);
-	tags->busy = 0;
-	atomic_set(&tags->refcnt, 1);
 	return 0;
 fail:
 	kfree(tags->tag_index);
@@ -626,6 +623,10 @@ int blk_queue_init_tags(request_queue_t 
 
 		if (init_tag_map(q, tags, depth))
 			goto fail;
+
+		INIT_LIST_HEAD(&tags->busy_list);
+		tags->busy = 0;
+		atomic_set(&tags->refcnt, 1);
 	} else if (q->queue_tags) {
 		if ((rc = blk_queue_resize_tags(q, depth)))
 			return rc;
_
