X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Futils%2Flstclient.c;h=e6c9659d2045ce9f2bb1f8ac9ea33345c4e1072a;hb=2eac0e35ae662ba0839b0867820608ab4800fa44;hp=900164fbefc4de75ec279e4799936e5003e023d7;hpb=4c3c97ffdc68525d3096d0638ce28dbd7e91ab5f;p=fs%2Flustre-release.git diff --git a/lnet/utils/lstclient.c b/lnet/utils/lstclient.c index 900164f..e6c9659 100644 --- a/lnet/utils/lstclient.c +++ b/lnet/utils/lstclient.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -51,13 +49,12 @@ static int lstjn_stopping = 0; static int lstjn_intialized = 0; -unsigned int libcfs_subsystem_debug = ~0 - (S_LNET | S_LND); -unsigned int libcfs_debug = 0; static struct option lstjn_options[] = { {"sesid", required_argument, 0, 's' }, {"group", required_argument, 0, 'g' }, + {"features", required_argument, 0, 'f' }, {"server_mode", no_argument, 0, 'm' }, {0, 0, 0, 0 } }; @@ -76,7 +73,7 @@ lstjn_rpc_done(srpc_client_rpc_t *rpc) } int -lstjn_join_session(char *ses, char *grp) +lstjn_join_session(char *ses, char *grp, unsigned feats) { lnet_process_id_t sesid; srpc_client_rpc_t *rpc; @@ -93,8 +90,8 @@ lstjn_join_session(char *ses, char *grp) return -1; } - rpc = sfw_create_rpc(sesid, SRPC_SERVICE_JOIN, 0, - 0, lstjn_rpc_done, NULL); + rpc = sfw_create_rpc(sesid, SRPC_SERVICE_JOIN, feats, + 0, 0, lstjn_rpc_done, NULL); if (rpc == NULL) { fprintf(stderr, "Out of memory\n"); return -1; @@ -131,6 +128,17 @@ lstjn_join_session(char *ses, char *grp) return -1; } + if (rpc->crpc_replymsg.msg_ses_feats != feats) { + /* this can only happen when connecting to old console + * which will ignore features */ + fprintf(stderr, "Can't join session %s group %s because " + "feature bits can't match: %x/%x, please set " + "feature bits by -f FEATURES and retry\n", + ses, grp, feats, rpc->crpc_replymsg.msg_ses_feats); + srpc_client_rpc_decref(rpc); + return -1; + } + sreq = &rpc->crpc_reqstmsg.msg_body.mksn_reqst; sreq->mksn_sid = rep->join_sid; sreq->mksn_force = 0; @@ -158,19 +166,21 @@ lstjn_join_session(char *ses, char *grp) int main(int argc, char **argv) { - char *ses = NULL; - char *grp = NULL; - int server_mode_flag = 0; - int optidx; - int c; - int rc; - - const char *usage_string = - "Usage: lstclient --sesid ID --group GROUP [--server_mode]\n"; - - while (1) { - c = getopt_long(argc, argv, "s:g:m", - lstjn_options, &optidx); + char *ses = NULL; + char *grp = NULL; + unsigned feats = LST_FEATS_MASK; + int server_mode_flag = 0; + int optidx; + int c; + int rc; + + const char *usage_string = + "Usage: lstclient --sesid ID --group GROUP " + "--features FEATURES [--server_mode]\n"; + + while (1) { + c = getopt_long(argc, argv, "s:g:f:m", + lstjn_options, &optidx); if (c == -1) break; @@ -182,6 +192,10 @@ main(int argc, char **argv) case 'g': grp = optarg; break; + case 'f': + feats = strtol(optarg, NULL, 16); + break; + case 'm': server_mode_flag = 1; break; @@ -196,26 +210,33 @@ main(int argc, char **argv) return -1; } - rc = libcfs_debug_init(5 * 1024 * 1024); - if (rc != 0) { - CERROR("libcfs_debug_init() failed: %d\n", rc); - return -1; - } - - rc = cfs_wi_startup(); - if (rc != 0) { - CERROR("cfs_wi_startup() failed: %d\n", rc); - libcfs_debug_cleanup(); - return -1; - } - - rc = LNetInit(); - if (rc != 0) { - CERROR("LNetInit() failed: %d\n", rc); - cfs_wi_shutdown(); - libcfs_debug_cleanup(); - return -1; - } + if ((feats & ~LST_FEATS_MASK) != 0) { + fprintf(stderr, + "lstclient can't understand these feature bits: %x\n", + (feats & ~LST_FEATS_MASK)); + return -1; + } + + rc = libcfs_debug_init(5 * 1024 * 1024); + if (rc != 0) { + fprintf(stderr, "libcfs_debug_init() failed: %d\n", rc); + return -1; + } + + rc = cfs_wi_startup(); + if (rc != 0) { + fprintf(stderr, "cfs_wi_startup() failed: %d\n", rc); + libcfs_debug_cleanup(); + return -1; + } + + rc = LNetInit(); + if (rc != 0) { + fprintf(stderr, "LNetInit() failed: %d\n", rc); + cfs_wi_shutdown(); + libcfs_debug_cleanup(); + return -1; + } if (server_mode_flag) lnet_server_mode(); @@ -229,7 +250,7 @@ main(int argc, char **argv) return -1; } - rc = lstjn_join_session(ses, grp); + rc = lstjn_join_session(ses, grp, feats); if (rc != 0) goto out;