GOTO(out, rc);
if (lustre_msg_get_op_flags(req->rq_reqmsg) & MSG_CONNECT_LIBCLIENT) {
- if (!data || (data->ocd_version < LUSTRE_VERSION_CODE -
- LUSTRE_VERSION_ALLOWED_OFFSET)) {
+ if (!data) {
+ DEBUG_REQ(D_INFO, req, "Refusing old (unversioned) "
+ "libclient connection attempt\n");
+ GOTO(out, rc = -EPROTO);
+ } else if (data->ocd_version < LUSTRE_VERSION_CODE -
+ LUSTRE_VERSION_ALLOWED_OFFSET) {
DEBUG_REQ(D_INFO, req, "Refusing old (%d.%d.%d.%d) "
"libclient connection attempt\n",
OBD_OCD_VERSION_MAJOR(data->ocd_version),
OBD_OCD_VERSION_MINOR(data->ocd_version),
OBD_OCD_VERSION_PATCH(data->ocd_version),
OBD_OCD_VERSION_FIX(data->ocd_version));
- data = lustre_msg_buf(req->rq_repmsg, 0, sizeof(*data));
- data->ocd_connect_flags = OBD_CONNECT_VERSION;
- data->ocd_version = LUSTRE_VERSION_CODE;
+ data = lustre_msg_buf(req->rq_repmsg, 0,
+ offsetof(typeof(*data),
+ ocd_version) +
+ sizeof(data->ocd_version));
+ if (data) {
+ data->ocd_connect_flags = OBD_CONNECT_VERSION;
+ data->ocd_version = LUSTRE_VERSION_CODE;
+ }
GOTO(out, rc = -EPROTO);
}
}