libceph: (re)initialize bio_iter on start of message receive
authorSage Weil <sage@inktank.com>
Mon, 30 Jul 2012 23:20:25 +0000 (16:20 -0700)
committerSage Weil <sage@inktank.com>
Tue, 31 Jul 2012 01:15:31 +0000 (18:15 -0700)
commita4107026976f06c9a6ce8cc84a763564ee39d901
treef8f83ffd302b50f9296fb36cc046409feafd597c
parent6194ea895e447fdf4adfd23f67873a32bf4f15ae
libceph: (re)initialize bio_iter on start of message receive

Previously, we were opportunistically initializing the bio_iter if it
appeared to be uninitialized in the middle of the read path.  The problem
is that a sequence like:

 - start reading message
 - initialize bio_iter
 - read half a message
 - messenger fault, reconnect
 - restart reading message
 - ** bio_iter now non-NULL, not reinitialized **
 - read past end of bio, crash

Instead, initialize the bio_iter unconditionally when we allocate/claim
the message for read.

Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Alex Elder <elder@inktank.com>
Reviewed-by: Yehuda Sadeh <yehuda@inktank.com>
net/ceph/messenger.c