提交 b79f10ee 编写于 作者: C Christoph Hellwig 提交者: Mike Snitzer

dm mpath: merge do_end_io into multipath_end_io

This simplifies the I/O completion path a bit.
Signed-off-by: NChristoph Hellwig <hch@lst.de>
Signed-off-by: NMike Snitzer <snitzer@redhat.com>
上级 7e25a760
......@@ -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
......@@ -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;
if (mpio->pgpath)
fail_path(mpio->pgpath);
error = DM_ENDIO_REQUEUE;
if (atomic_read(&m->nr_valid_paths) == 0 &&
!test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags))
r = dm_report_EIO(m);
return r;
}
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;
if (pgpath)
fail_path(pgpath);
BUG_ON(!mpio);
if (atomic_read(&m->nr_valid_paths) == 0 &&
!test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags))
error = dm_report_EIO(m);
}
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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册