summaryrefslogtreecommitdiffstats
path: root/drivers/md/dm-rq.h
diff options
context:
space:
mode:
authorMing Lei <ming.lei@redhat.com>2017-08-24 20:19:52 +0800
committerMike Snitzer <snitzer@redhat.com>2017-08-28 10:23:28 -0400
commitdc6364b5170dc446fca076d6523aaebc339d6511 (patch)
tree344b391746798b7fe7659de27a04f8a40edb6a4f /drivers/md/dm-rq.h
parentd5c27f3ffbc2ee2d2f74ebfa1b2d789f67e9b3f1 (diff)
downloadlinux-dc6364b5170dc446fca076d6523aaebc339d6511.tar.bz2
dm rq: do not update rq partially in each ending bio
We don't need to update the original dm request partially when ending each cloned bio: just update original dm request once when the whole cloned request is finished. This still allows full support for partial completion because a new 'completed' counter accounts for incremental progress as the clone bios complete. Partial request update can be a bit expensive, so we should try to avoid it, especially because it is run in softirq context. Avoiding all the partial request updates fixes both hard lockup and soft lockups that were easily reproduced while running Laurence's test[1] on IB/SRP. BTW, after d4acf3650c7c ("block: Make blk_mq_delay_kick_requeue_list() rerun the queue at a quiet time"), we need to make the test more aggressive for reproducing the lockup: 1) run hammer_write.sh 32 or 64 concurrently. 2) write 8M each time [1] https://marc.info/?l=linux-block&m=150220185510245&w=2 Signed-off-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'drivers/md/dm-rq.h')
-rw-r--r--drivers/md/dm-rq.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/md/dm-rq.h b/drivers/md/dm-rq.h
index 9813922e4fe5..f43c45460aac 100644
--- a/drivers/md/dm-rq.h
+++ b/drivers/md/dm-rq.h
@@ -29,6 +29,7 @@ struct dm_rq_target_io {
struct dm_stats_aux stats_aux;
unsigned long duration_jiffies;
unsigned n_sectors;
+ unsigned completed;
};
/*