Loading drivers/md/dm-mpath.c +17 −34 Original line number Diff line number Diff line Loading @@ -1464,12 +1464,12 @@ static int noretry_error(int error) return 0; } /* * end_io handling */ static int do_end_io(struct multipath *m, struct request *clone, int error, struct dm_mpath_io *mpio) static int multipath_end_io(struct dm_target *ti, struct request *clone, int error, union map_info *map_context) { struct dm_mpath_io *mpio = get_mpio(map_context); struct pgpath *pgpath = mpio->pgpath; /* * We don't queue any clone request inside the multipath target * during end I/O handling, since those clone requests don't have Loading @@ -1481,44 +1481,27 @@ static int do_end_io(struct multipath *m, struct request *clone, * request into dm core, which will remake a clone request and * clone bios for it and resubmit it later. */ int r = DM_ENDIO_REQUEUE; if (!error) return 0; /* I/O complete */ if (error && !noretry_error(error)) { struct multipath *m = ti->private; if (noretry_error(error)) return error; error = DM_ENDIO_REQUEUE; if (mpio->pgpath) fail_path(mpio->pgpath); if (pgpath) fail_path(pgpath); if (atomic_read(&m->nr_valid_paths) == 0 && !test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) r = dm_report_EIO(m); return r; error = dm_report_EIO(m); } static int multipath_end_io(struct dm_target *ti, struct request *clone, int error, union map_info *map_context) { struct multipath *m = ti->private; struct dm_mpath_io *mpio = get_mpio(map_context); struct pgpath *pgpath; struct path_selector *ps; int r; BUG_ON(!mpio); r = do_end_io(m, clone, error, mpio); pgpath = mpio->pgpath; if (pgpath) { ps = &pgpath->pg->ps; struct path_selector *ps = &pgpath->pg->ps; if (ps->type->end_io) ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes); } return r; return error; } static int do_end_io_bio(struct multipath *m, struct bio *clone, Loading Loading
drivers/md/dm-mpath.c +17 −34 Original line number Diff line number Diff line Loading @@ -1464,12 +1464,12 @@ static int noretry_error(int error) return 0; } /* * end_io handling */ static int do_end_io(struct multipath *m, struct request *clone, int error, struct dm_mpath_io *mpio) static int multipath_end_io(struct dm_target *ti, struct request *clone, int error, union map_info *map_context) { struct dm_mpath_io *mpio = get_mpio(map_context); struct pgpath *pgpath = mpio->pgpath; /* * We don't queue any clone request inside the multipath target * during end I/O handling, since those clone requests don't have Loading @@ -1481,44 +1481,27 @@ static int do_end_io(struct multipath *m, struct request *clone, * request into dm core, which will remake a clone request and * clone bios for it and resubmit it later. */ int r = DM_ENDIO_REQUEUE; if (!error) return 0; /* I/O complete */ if (error && !noretry_error(error)) { struct multipath *m = ti->private; if (noretry_error(error)) return error; error = DM_ENDIO_REQUEUE; if (mpio->pgpath) fail_path(mpio->pgpath); if (pgpath) fail_path(pgpath); if (atomic_read(&m->nr_valid_paths) == 0 && !test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) r = dm_report_EIO(m); return r; error = dm_report_EIO(m); } static int multipath_end_io(struct dm_target *ti, struct request *clone, int error, union map_info *map_context) { struct multipath *m = ti->private; struct dm_mpath_io *mpio = get_mpio(map_context); struct pgpath *pgpath; struct path_selector *ps; int r; BUG_ON(!mpio); r = do_end_io(m, clone, error, mpio); pgpath = mpio->pgpath; if (pgpath) { ps = &pgpath->pg->ps; struct path_selector *ps = &pgpath->pg->ps; if (ps->type->end_io) ps->type->end_io(ps, &pgpath->path, mpio->nr_bytes); } return r; return error; } static int do_end_io_bio(struct multipath *m, struct bio *clone, Loading