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)
committerShaohua Li <shli@fb.com>
Mon, 14 Mar 2016 18:32:26 +0000 (11:32 -0700)
commitfafcde3ac1a418688a734365203a12483b83907a
treee3b7fa42dd60f877f1cafec8f305fbdc1a75b0c3
parentfb3229d5cd4c8e65178afe55f6727ff645cdb81a
md: multipath: don't hardcopy bio in .make_request path

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>
drivers/md/multipath.c