dm-mpath.c (2361ae595352dec015d14292f1b539242d8446d6) | dm-mpath.c (087615bf3acdafd0ba7c7c9ed5286e7b7c80fe1b) |
---|---|
1/* 2 * Copyright (C) 2003 Sistina Software Limited. 3 * Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved. 4 * 5 * This file is released under the GPL. 6 */ 7 8#include <linux/device-mapper.h> --- 553 unchanged lines hidden (view full) --- 562 * method; must undo multipath_clone_and_map() 563 */ 564 struct dm_mpath_io *mpio = get_mpio(map_context); 565 struct pgpath *pgpath = mpio->pgpath; 566 567 if (pgpath && pgpath->pg->ps.type->end_io) 568 pgpath->pg->ps.type->end_io(&pgpath->pg->ps, 569 &pgpath->path, | 1/* 2 * Copyright (C) 2003 Sistina Software Limited. 3 * Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved. 4 * 5 * This file is released under the GPL. 6 */ 7 8#include <linux/device-mapper.h> --- 553 unchanged lines hidden (view full) --- 562 * method; must undo multipath_clone_and_map() 563 */ 564 struct dm_mpath_io *mpio = get_mpio(map_context); 565 struct pgpath *pgpath = mpio->pgpath; 566 567 if (pgpath && pgpath->pg->ps.type->end_io) 568 pgpath->pg->ps.type->end_io(&pgpath->pg->ps, 569 &pgpath->path, |
570 mpio->nr_bytes); | 570 mpio->nr_bytes, 571 clone->io_start_time_ns); |
571 } 572 573 blk_put_request(clone); 574} 575 576/* 577 * Map cloned bios (bio-based multipath) 578 */ --- 1033 unchanged lines hidden (view full) --- 1612 r = DM_ENDIO_DONE; 1613 } 1614 } 1615 1616 if (pgpath) { 1617 struct path_selector *ps = &pgpath->pg->ps; 1618 1619 if (ps->type->end_io) | 572 } 573 574 blk_put_request(clone); 575} 576 577/* 578 * Map cloned bios (bio-based multipath) 579 */ --- 1033 unchanged lines hidden (view full) --- 1613 r = DM_ENDIO_DONE; 1614 } 1615 } 1616 1617 if (pgpath) { 1618 struct path_selector *ps = &pgpath->pg->ps; 1619 1620 if (ps->type->end_io) |
1620 ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes); | 1621 ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes, 1622 clone->io_start_time_ns); |
1621 } 1622 1623 return r; 1624} 1625 1626static int multipath_end_io_bio(struct dm_target *ti, struct bio *clone, 1627 blk_status_t *error) 1628{ --- 27 unchanged lines hidden (view full) --- 1656 queue_work(kmultipathd, &m->process_queued_bios); 1657 1658 r = DM_ENDIO_INCOMPLETE; 1659done: 1660 if (pgpath) { 1661 struct path_selector *ps = &pgpath->pg->ps; 1662 1663 if (ps->type->end_io) | 1623 } 1624 1625 return r; 1626} 1627 1628static int multipath_end_io_bio(struct dm_target *ti, struct bio *clone, 1629 blk_status_t *error) 1630{ --- 27 unchanged lines hidden (view full) --- 1658 queue_work(kmultipathd, &m->process_queued_bios); 1659 1660 r = DM_ENDIO_INCOMPLETE; 1661done: 1662 if (pgpath) { 1663 struct path_selector *ps = &pgpath->pg->ps; 1664 1665 if (ps->type->end_io) |
1664 ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes); | 1666 ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes, 1667 dm_start_time_ns_from_clone(clone)); |
1665 } 1666 1667 return r; 1668} 1669 1670/* 1671 * Suspend can't complete until all the I/O is processed so if 1672 * the last path fails we must error any remaining I/O. --- 466 unchanged lines hidden --- | 1668 } 1669 1670 return r; 1671} 1672 1673/* 1674 * Suspend can't complete until all the I/O is processed so if 1675 * the last path fails we must error any remaining I/O. --- 466 unchanged lines hidden --- |