Commit 09c9d4c9b6a2b5909ae3c6265e4cd3820b636863
Committed by
Alasdair G Kergon
1 parent
c217649bf2
Exists in
master
and in
7 other branches
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); |