md: multipath: don't hardcopy bio in .make_request path
authorMing Lei <ming.lei@canonical.com>
Sat, 12 Mar 2016 01:29:40 +0000 (09:29 +0800)
committerSasha Levin <sasha.levin@oracle.com>
Mon, 18 Apr 2016 12:50:58 +0000 (08:50 -0400)
commit79deb9b280a508c77f6cc233e083544712bc2458
treeed380feceefafd0e40cea94453038ff4874f7554
parent1a5aee1aaa9110ee4ba03f665f75b8b9ab21fd2c
md: multipath: don't hardcopy bio in .make_request path

[ Upstream commit fafcde3ac1a418688a734365203a12483b83907a ]

Inside multipath_make_request(), multipath maps the incoming
bio into low level device's bio, but it is totally wrong to
copy the bio into mapped bio via '*mapped_bio = *bio'. For
example, .__bi_remaining is kept in the copy, especially if
the incoming bio is chained to via bio splitting, so .bi_end_io
can't be called for the mapped bio at all in the completing path
in this kind of situation.

This patch fixes the issue by using clone style.

Cc: stable@vger.kernel.org (v3.14+)
Reported-and-tested-by: Andrea Righi <righi.andrea@gmail.com>
Signed-off-by: Ming Lei <ming.lei@canonical.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
drivers/md/multipath.c