dm-mpath: Track invalid map_context
The map_context pointer should always be set. However, we
have reports that upon requeing it is not set correctly. So add a BUG_ON() statement and clear the pointer to track the issue properly. Cc: Alasdair Kergon <akg@redhat.com> Cc: Mike Snitzer <snitzer@redhat.com> Signed-off-by: Hannes Reinecke <hare@suse.de> Tested-by: Heiko Carstens <heiko.carstens@de.ibm.com> Acked-by: Dave Wysochanski <dwysocha@redhat.com> --- drivers/md/dm-mpath.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index 801d92d..94a91d6 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c @@ -920,8 +920,10 @@ static int multipath_map(struct dm_target *ti, struct request *clone, map_context->ptr = mpio; clone->cmd_flags |= REQ_FAILFAST_TRANSPORT; r = map_io(m, clone, mpio, 0); - if (r < 0 || r == DM_MAPIO_REQUEUE) + if (r < 0 || r == DM_MAPIO_REQUEUE) { mempool_free(mpio, m->mpio_pool); + map_context->ptr = NULL; + } return r; } @@ -1228,6 +1230,8 @@ static int do_end_io(struct multipath *m, struct request *clone, int r = DM_ENDIO_REQUEUE; unsigned long flags; + BUG_ON(!mpio); + if (!error && !clone->errors) return 0; /* I/O complete */ -- 1.6.0.2 -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel |
dm-mpath: Track invalid map_context
On Mon, Mar 19, 2012 at 04:15:28PM +0100, Hannes Reinecke wrote:
> - if (r < 0 || r == DM_MAPIO_REQUEUE) > + if (r < 0 || r == DM_MAPIO_REQUEUE) { > mempool_free(mpio, m->mpio_pool); > + map_context->ptr = NULL; > + } What about the other places that do mempool_free() ? Should they clear it too? Is it better to swap the statement order - clear it *before* freeing i Alasdair -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel |
| All times are GMT. The time now is 07:49 AM. |
VBulletin, Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.