[dm-devel] [PATCH] dm-mpath: move the place of decrementing repeat_count
Kiyoshi Ueda
k-ueda at ct.jp.nec.com
Thu Jun 12 15:04:29 UTC 2008
Hi Alasdair,
'repeat_count' counting code is a little bit difficult to understand
why decrementing it before using m->current_pgpath.
'repeat_count' should be decremented only when an I/O is mapped to
m->current_pgpath.
This patch changes the place of decrementing 'repeat_count'
for easy understanding.
Basically, no functional change, but there is a minor behavior change
when '0' is specified for 'repeat_count':
before: No path switching happens
after : Path switching happens everytime
I think that no one should specify '0'.
This patch can be applied on top of 2.6.26-rc5.
Please review and apply.
Thanks,
Kiyoshi Ueda
Signed-off-by: Kiyoshi Ueda <k-ueda at ct.jp.nec.com>
Signed-off-by: Jun'ichi Nomura <j-nomura at ce.jp.nec.com>
---
drivers/md/dm-mpath.c | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
Index: 2.6.26-rc5/drivers/md/dm-mpath.c
===================================================================
--- 2.6.26-rc5.orig/drivers/md/dm-mpath.c
+++ 2.6.26-rc5/drivers/md/dm-mpath.c
@@ -314,8 +314,7 @@ static int map_io(struct multipath *m, s
spin_lock_irqsave(&m->lock, flags);
/* Do we need to select a new pgpath? */
- if (!m->current_pgpath ||
- (!m->queue_io && (m->repeat_count && --m->repeat_count == 0)))
+ if (!m->current_pgpath || (!m->queue_io && m->repeat_count == 0))
__choose_pgpath(m);
pgpath = m->current_pgpath;
@@ -333,9 +332,11 @@ static int map_io(struct multipath *m, s
queue_work(kmultipathd, &m->process_queued_ios);
pgpath = NULL;
r = DM_MAPIO_SUBMITTED;
- } else if (pgpath)
+ } else if (pgpath) {
bio->bi_bdev = pgpath->path.dev->bdev;
- else if (__must_push_back(m))
+ if (m->repeat_count)
+ --m->repeat_count;
+ } else if (__must_push_back(m))
r = DM_MAPIO_REQUEUE;
else
r = -EIO; /* Failed */
More information about the dm-devel
mailing list