From 1224084c6300d5b15ccb703dfe18209a0f1f12ab Mon Sep 17 00:00:00 2001 From: Andriy Skulysh Date: Wed, 27 Feb 2019 19:37:24 +0200 Subject: [PATCH] LU-12095 ptlrpc: ocd_connect_flags are wrong during reconnect Import connect flags are reset to original ones during reconnect, so a request can be created with unsupported features. Use separate obd_connect_data to send connect request. Change-Id: I4cfc48bf7ef66c4f3832613e179030b0eb1d6fdf Cray-bug-id: LUS-6397 Signed-off-by: Andriy Skulysh Reviewed-by: Alexander Boyko Reviewed-by: Andrew Perepechko Reviewed-on: https://review.whamcloud.com/34480 Reviewed-by: Andreas Dilger Reviewed-by: Alexandr Boyko Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/ptlrpc/import.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c index 174c12b..b8b9951 100644 --- a/lustre/ptlrpc/import.c +++ b/lustre/ptlrpc/import.c @@ -654,11 +654,12 @@ int ptlrpc_connect_import(struct obd_import *imp) int set_transno = 0; __u64 committed_before_reconnect = 0; struct ptlrpc_request *request; + struct obd_connect_data ocd; char *bufs[] = { NULL, obd2cli_tgt(imp->imp_obd), obd->obd_uuid.uuid, (char *)&imp->imp_dlm_handle, - (char *)&imp->imp_connect_data, + (char *)&ocd, NULL }; struct ptlrpc_connect_async_args *aa; int rc; @@ -705,15 +706,16 @@ int ptlrpc_connect_import(struct obd_import *imp) /* Reset connect flags to the originally requested flags, in case * the server is updated on-the-fly we will get the new features. */ - imp->imp_connect_data.ocd_connect_flags = imp->imp_connect_flags_orig; - imp->imp_connect_data.ocd_connect_flags2 = imp->imp_connect_flags2_orig; + ocd = imp->imp_connect_data; + ocd.ocd_connect_flags = imp->imp_connect_flags_orig; + ocd.ocd_connect_flags2 = imp->imp_connect_flags2_orig; /* Reset ocd_version each time so the server knows the exact versions */ - imp->imp_connect_data.ocd_version = LUSTRE_VERSION_CODE; + ocd.ocd_version = LUSTRE_VERSION_CODE; imp->imp_msghdr_flags &= ~MSGHDR_AT_SUPPORT; imp->imp_msghdr_flags &= ~MSGHDR_CKSUM_INCOMPAT18; rc = obd_reconnect(NULL, imp->imp_obd->obd_self_export, obd, - &obd->obd_uuid, &imp->imp_connect_data, NULL); + &obd->obd_uuid, &ocd, NULL); if (rc) GOTO(out, rc); -- 1.8.3.1