X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Futils%2Flstclient.c;h=8bcda677d12b4dd7c14f3fd8b8cdb3f90b65b40a;hb=8d8f071648d64f8a16591481064e13f590629caa;hp=1d72000da380beeb70b15bfa5b0351812c1fe9a0;hpb=f95393b0d0a59cf3dc2f29cffc35dcc4cc9d7728;p=fs%2Flustre-release.git diff --git a/lnet/utils/lstclient.c b/lnet/utils/lstclient.c index 1d72000..8bcda67 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. @@ -28,6 +26,8 @@ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -51,13 +51,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 +75,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 +92,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 +130,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 +168,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 +194,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,18 +212,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 = LNetInit(); - if (rc != 0) { - CERROR("LNetInit() failed: %d\n", rc); - 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(); @@ -216,12 +247,12 @@ main(int argc, char **argv) if (rc != 0) { fprintf(stderr, "Can't startup selftest\n"); LNetFini(); + cfs_wi_shutdown(); libcfs_debug_cleanup(); - return -1; } - rc = lstjn_join_session(ses, grp); + rc = lstjn_join_session(ses, grp, feats); if (rc != 0) goto out; @@ -244,6 +275,8 @@ out: LNetFini(); + cfs_wi_shutdown(); + libcfs_debug_cleanup(); return rc;