if (pgpath && pgpath->pg->ps.type->end_io)
                        pgpath->pg->ps.type->end_io(&pgpath->pg->ps,
                                                    &pgpath->path,
-                                                   mpio->nr_bytes);
+                                                   mpio->nr_bytes,
+                                                   clone->io_start_time_ns);
        }
 
        blk_put_request(clone);
                struct path_selector *ps = &pgpath->pg->ps;
 
                if (ps->type->end_io)
-                       ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes);
+                       ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes,
+                                        clone->io_start_time_ns);
        }
 
        return r;
                struct path_selector *ps = &pgpath->pg->ps;
 
                if (ps->type->end_io)
-                       ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes);
+                       ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes,
+                                        dm_start_time_ns_from_clone(clone));
        }
 
        return r;
 
        int (*start_io) (struct path_selector *ps, struct dm_path *path,
                         size_t nr_bytes);
        int (*end_io) (struct path_selector *ps, struct dm_path *path,
-                      size_t nr_bytes);
+                      size_t nr_bytes, u64 start_time);
 };
 
 /* Register a path selector */
 
 }
 
 static int ql_end_io(struct path_selector *ps, struct dm_path *path,
-                    size_t nr_bytes)
+                    size_t nr_bytes, u64 start_time)
 {
        struct path_info *pi = path->pscontext;
 
 
 }
 
 static int st_end_io(struct path_selector *ps, struct dm_path *path,
-                    size_t nr_bytes)
+                    size_t nr_bytes, u64 start_time)
 {
        struct path_info *pi = path->pscontext;
 
 
                return md_in_flight_bios(md);
 }
 
+u64 dm_start_time_ns_from_clone(struct bio *bio)
+{
+       struct dm_target_io *tio = container_of(bio, struct dm_target_io, clone);
+       struct dm_io *io = tio->io;
+
+       return jiffies_to_nsecs(io->start_time);
+}
+EXPORT_SYMBOL_GPL(dm_start_time_ns_from_clone);
+
 static void start_io_acct(struct dm_io *io)
 {
        struct mapped_device *md = io->md;
 
 struct bio *dm_bio_from_per_bio_data(void *data, size_t data_size);
 unsigned dm_bio_get_target_bio_nr(const struct bio *bio);
 
+u64 dm_start_time_ns_from_clone(struct bio *bio);
+
 int dm_register_target(struct target_type *t);
 void dm_unregister_target(struct target_type *t);