mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-29 09:16:33 +00:00
libceph: init the cursor when preparing sparse read in msgr2
The cursor is no longer initialized in the OSD client, causing the
sparse read state machine to fall into an infinite loop. The cursor
should be initialized in IN_S_PREPARE_SPARSE_DATA state.
[ idryomov: use msg instead of con->in_msg, changelog ]
Link: https://tracker.ceph.com/issues/64607
Fixes: 8e46a2d068
("libceph: just wait for more data to be available on the socket")
Signed-off-by: Xiubo Li <xiubli@redhat.com>
Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
Tested-by: Luis Henriques <lhenriques@suse.de>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
90d35da658
commit
321e3c3de5
@ -2034,6 +2034,9 @@ static int prepare_sparse_read_data(struct ceph_connection *con)
|
|||||||
if (!con_secure(con))
|
if (!con_secure(con))
|
||||||
con->in_data_crc = -1;
|
con->in_data_crc = -1;
|
||||||
|
|
||||||
|
ceph_msg_data_cursor_init(&con->v2.in_cursor, msg,
|
||||||
|
msg->sparse_read_total);
|
||||||
|
|
||||||
reset_in_kvecs(con);
|
reset_in_kvecs(con);
|
||||||
con->v2.in_state = IN_S_PREPARE_SPARSE_DATA_CONT;
|
con->v2.in_state = IN_S_PREPARE_SPARSE_DATA_CONT;
|
||||||
con->v2.data_len_remain = data_len(msg);
|
con->v2.data_len_remain = data_len(msg);
|
||||||
|
Loading…
Reference in New Issue
Block a user