diff --git a/lustre/include/obd.h b/lustre/include/obd.h index 71f38ad345b87d694054361ab8e93cee8538d6ec..6c911941698c4600645878e850b3b9d63ba8a886 100644 --- a/lustre/include/obd.h +++ b/lustre/include/obd.h @@ -929,7 +929,8 @@ enum obd_cleanup_stage { #define KEY_LAST_ID "last_id" #define KEY_LOCK_TO_STRIPE "lock_to_stripe" #define KEY_CHECKSUM "checksum" -#define KEY_READONLY "readonly" +#define KEY_READONLY "read-only" +#define KEY_READONLY_166COMPAT "readonly" #define KEY_UNLINKED "unlinked" #define KEY_EVICT_BY_NID "evict_by_nid" #define KEY_REGISTER_TARGET "register_target" diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c index ccaeec26209c9dc34f4ac29f583edf32d071e83c..c7f4433e9155f2e2829f951cf154e7c5c866315b 100644 --- a/lustre/llite/llite_lib.c +++ b/lustre/llite/llite_lib.c @@ -2065,6 +2065,17 @@ int ll_remount_fs(struct super_block *sb, int *flags, char *data) err = obd_set_info_async(sbi->ll_mdc_exp, sizeof(KEY_READONLY), KEY_READONLY, sizeof(read_only), &read_only, NULL); + + /* MDS might have expected a different ro key value, b=17493 */ + if (err == -EINVAL) { + CDEBUG(D_CONFIG, "Retrying remount with 1.6.6 ro key\n"); + err = obd_set_info_async(sbi->ll_mdc_exp, + sizeof(KEY_READONLY_166COMPAT), + KEY_READONLY_166COMPAT, + sizeof(read_only), + &read_only, NULL); + } + if (err) { CERROR("Failed to change the read-only flag during " "remount: %d\n", err); diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c index c786ff798006c6cf9c4265219af077e09756ee98..4613655efdb4c9e625e8096129eb16530b5ba8c4 100644 --- a/lustre/mdc/mdc_request.c +++ b/lustre/mdc/mdc_request.c @@ -935,7 +935,8 @@ int mdc_set_info_async(struct obd_export *exp, obd_count keylen, exp->exp_obd->obd_name, imp->imp_initial_recov_bk); RETURN(0); } - if (KEY_IS(KEY_READONLY)) { + /* Accept the broken "read-only" key for 1.6.6 servers. b=17493 */ + if (KEY_IS(KEY_READONLY) || KEY_IS(KEY_READONLY_166COMPAT)) { struct ptlrpc_request *req; __u32 size[3] = { sizeof(struct ptlrpc_body), keylen, vallen }; char *bufs[3] = { NULL, key, val }; diff --git a/lustre/mds/handler.c b/lustre/mds/handler.c index 975a7f5d191620cec350c025832a6fcefe9c5a92..a668c5f5ace5963744af8eb891493fe86a138fcc 100644 --- a/lustre/mds/handler.c +++ b/lustre/mds/handler.c @@ -1436,7 +1436,8 @@ static int mds_set_info_rpc(struct obd_export *exp, struct ptlrpc_request *req) lustre_msg_set_status(req->rq_repmsg, 0); - if (KEY_IS(KEY_READONLY)) { + /* Accept the broken "read-only" key from 1.6.6 clients. b=17493 */ + if (KEY_IS(KEY_READONLY) || KEY_IS(KEY_READONLY_166COMPAT)) { if (val == NULL || vallen < sizeof(__u32)) { DEBUG_REQ(D_HA, req, "no set_info val"); RETURN(-EFAULT);