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 ---