From: Bruno Faccini Date: Wed, 24 Apr 2013 17:07:05 +0000 (+0200) Subject: LU-2797 osc: GPF in osc_send_oap_rpc X-Git-Tag: 2.1.6-RC1~7 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=31e2d2301d182d872de26bc299cc8c1bed144944;p=fs%2Flustre-release.git LU-2797 osc: GPF in osc_send_oap_rpc Due to cl_loi_list_lock release in osc_send_oap_rpc(), this leaves a window where lov_oinfo may be freed/poisoned between both write/read steps/calls of osc_send_oap_rpc() in osc_check_rpcs(), thus it needs to be refreshed. Signed-off-by: Bruno Faccini Change-Id: Id3056c1fca91bade65b6d2b556b6b47a3d3d089e Reviewed-on: http://review.whamcloud.com/6089 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Jinshan Xiong Reviewed-by: Johann Lombardi --- diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c index 8e572a7..3544db0 100644 --- a/lustre/osc/osc_request.c +++ b/lustre/osc/osc_request.c @@ -2847,6 +2847,14 @@ void osc_check_rpcs(const struct lu_env *env, struct client_obd *cli) else if (rc == 0) race_counter++; } + + /* Refresh loi just in case it has been freed during + * cl_loi_list_lock release in osc_send_oap_rpc(). + */ + loi = osc_next_loi(cli); + if (loi == NULL) + break; + if (lop_makes_rpc(cli, &loi->loi_read_lop, OBD_BRW_READ)) { rc = osc_send_oap_rpc(env, cli, loi, OBD_BRW_READ, &loi->loi_read_lop);