X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Futils%2Flstclient.c;h=8bcda677d12b4dd7c14f3fd8b8cdb3f90b65b40a;hb=2402980a0891e43668f4016e17f2ff872006e0fa;hp=84d2f777007065ba8ea1484bfb63530be3476482;hpb=70e80ade90af09300396706b8910e196a7928520;p=fs%2Flustre-release.git diff --git a/lnet/utils/lstclient.c b/lnet/utils/lstclient.c index 84d2f77..8bcda67 100644 --- a/lnet/utils/lstclient.c +++ b/lnet/utils/lstclient.c @@ -1,7 +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. @@ -17,8 +14,8 @@ * in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see [sun.com URL with a - * copy of GPLv2]. + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or @@ -27,8 +24,10 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * 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/ @@ -52,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 } }; @@ -77,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; @@ -94,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; @@ -132,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; @@ -147,7 +156,7 @@ lstjn_join_session(char *ses, char *grp) return -1; } - fprintf(stdout, "Session %s, ID: %s, %Lu\n", + fprintf(stdout, "Session %s, ID: %s, "LPU64"\n", ses, libcfs_nid2str(rep->join_sid.ses_nid), rep->join_sid.ses_stamp); @@ -159,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; @@ -183,32 +194,51 @@ 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; default: - fprintf(stderr, usage_string); + fprintf(stderr, "%s", usage_string); return -1; } } if (optind != argc || grp == NULL || ses == NULL) { - fprintf(stderr, usage_string); - return -1; - } - - rc = libcfs_debug_init(5 * 1024 * 1024); - if (rc != 0) { - CERROR("libcfs_debug_init() failed: %d\n", rc); + fprintf(stderr, "%s", usage_string); 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(); @@ -217,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; @@ -245,6 +275,8 @@ out: LNetFini(); + cfs_wi_shutdown(); + libcfs_debug_cleanup(); return rc;