From cfa8213327c9ef95f1734f3300b761188d4899a4 Mon Sep 17 00:00:00 2001 From: anserper <anserper> Date: Mon, 3 Nov 2008 21:17:59 +0000 Subject: [PATCH] b=17493 i=Andreas Dilger i=Johann Lombardi handling of a broken readonly key --- lustre/include/obd.h | 3 ++- lustre/llite/llite_lib.c | 11 +++++++++++ lustre/mdc/mdc_request.c | 3 ++- lustre/mds/handler.c | 3 ++- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lustre/include/obd.h b/lustre/include/obd.h index 71f38ad345..6c91194169 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 ccaeec2620..c7f4433e91 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 c786ff7980..4613655efd 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 975a7f5d19..a668c5f5ac 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); -- GitLab