Commit 09c9d4c9b6a2b5909ae3c6265e4cd3820b636863

Authored by Mike Snitzer
Committed by Alasdair G Kergon
1 parent c217649bf2

dm mpath: disable blk_abort_queue

Revert commit 224cb3e981f1b2f9f93dbd49eaef505d17d894c2
  dm: Call blk_abort_queue on failed paths

Multipath began to use blk_abort_queue() to allow for
lower latency path deactivation.  This was found to
cause list corruption:

   the cmd gets blk_abort_queued/timedout run on it and the scsi eh
   somehow is able to complete and run scsi_queue_insert while
   scsi_request_fn is still trying to process the request.

   https://www.redhat.com/archives/dm-devel/2010-November/msg00085.html

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Cc: Mike Anderson <andmike@linux.vnet.ibm.com>
Cc: Mike Christie <michaelc@cs.wisc.edu>
Cc: stable@kernel.org

Showing 1 changed file with 0 additions and 12 deletions Side-by-side Diff

drivers/md/dm-mpath.c
... ... @@ -33,7 +33,6 @@
33 33 unsigned fail_count; /* Cumulative failure count */
34 34  
35 35 struct dm_path path;
36   - struct work_struct deactivate_path;
37 36 struct work_struct activate_path;
38 37 };
39 38  
... ... @@ -116,7 +115,6 @@
116 115 static void process_queued_ios(struct work_struct *work);
117 116 static void trigger_event(struct work_struct *work);
118 117 static void activate_path(struct work_struct *work);
119   -static void deactivate_path(struct work_struct *work);
120 118  
121 119  
122 120 /*-----------------------------------------------
... ... @@ -129,7 +127,6 @@
129 127  
130 128 if (pgpath) {
131 129 pgpath->is_active = 1;
132   - INIT_WORK(&pgpath->deactivate_path, deactivate_path);
133 130 INIT_WORK(&pgpath->activate_path, activate_path);
134 131 }
135 132  
... ... @@ -141,14 +138,6 @@
141 138 kfree(pgpath);
142 139 }
143 140  
144   -static void deactivate_path(struct work_struct *work)
145   -{
146   - struct pgpath *pgpath =
147   - container_of(work, struct pgpath, deactivate_path);
148   -
149   - blk_abort_queue(pgpath->path.dev->bdev->bd_disk->queue);
150   -}
151   -
152 141 static struct priority_group *alloc_priority_group(void)
153 142 {
154 143 struct priority_group *pg;
... ... @@ -995,7 +984,6 @@
995 984 pgpath->path.dev->name, m->nr_valid_paths);
996 985  
997 986 schedule_work(&m->trigger_event);
998   - queue_work(kmultipathd, &pgpath->deactivate_path);
999 987  
1000 988 out:
1001 989 spin_unlock_irqrestore(&m->lock, flags);