X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fliblustre%2Fllite_lib.c;h=9003491823be5434fdb8dda7406da57b15ca44d6;hb=d77125deda647a9ba164448a0afd43b7e2014985;hp=3c7c3b09bf2300827362de3ac3850808237e8a9a;hpb=c9842fdc5244e38593f0b12468e87f23853dba9f;p=fs%2Flustre-release.git diff --git a/lustre/liblustre/llite_lib.c b/lustre/liblustre/llite_lib.c index 3c7c3b0..90034918 100644 --- a/lustre/liblustre/llite_lib.c +++ b/lustre/liblustre/llite_lib.c @@ -1,24 +1,41 @@ /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=8:tabstop=8: * - * Lustre Light common routines + * GPL HEADER START + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (c) 2002-2004 Cluster File Systems, Inc. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. * - * This file is part of Lustre, http://www.lustre.org. + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). * - * Lustre is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * - * Lustre is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. * - * You should have received a copy of the GNU General Public License - * along with Lustre; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * GPL HEADER END + */ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Use is subject to license terms. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. + * + * lustre/liblustre/llite_lib.c + * + * Lustre Light common routines */ #include @@ -40,16 +57,14 @@ #include #endif -/* both sys/queue.h (libsysio require it) and portals/lists.h have definition - * of 'LIST_HEAD'. undef it to suppress warnings - */ -#undef LIST_HEAD #include #include /* needed for parse_dump */ #include "lutil.h" #include "llite_lib.h" +int slp_global_init(void); + static int lllib_init(void) { if (liblustre_init_current("liblustre") || @@ -60,7 +75,8 @@ static int lllib_init(void) lmv_init() || mdc_init() || lov_init() || - osc_init()) + osc_init() || + slp_global_init()) return -1; return _sysio_fssw_register("lustre", &llu_fssw_ops); @@ -74,7 +90,6 @@ int liblustre_process_log(struct config_llog_instance *cfg, struct lustre_cfg *lcfg; char *peer = "MGS_UUID"; struct obd_device *obd; - struct lustre_handle mgc_conn = {0, }; struct obd_export *exp; char *name = "mgc_dev"; class_uuid_t uuid; @@ -157,21 +172,20 @@ int liblustre_process_log(struct config_llog_instance *cfg, if (ocd == NULL) GOTO(out_cleanup, rc = -ENOMEM); - ocd->ocd_connect_flags = OBD_CONNECT_VERSION | OBD_CONNECT_FID; + ocd->ocd_connect_flags = OBD_CONNECT_VERSION | OBD_CONNECT_FID | + OBD_CONNECT_AT | OBD_CONNECT_VBR; #ifdef LIBLUSTRE_POSIX_ACL ocd->ocd_connect_flags |= OBD_CONNECT_ACL; #endif ocd->ocd_version = LUSTRE_VERSION_CODE; - rc = obd_connect(NULL, &mgc_conn, obd, &mgc_uuid, ocd); + rc = obd_connect(NULL, &exp, obd, &mgc_uuid, ocd, NULL); if (rc) { CERROR("cannot connect to %s at %s: rc = %d\n", LUSTRE_MGS_OBDNAME, mgsnid, rc); GOTO(out_cleanup, rc); } - exp = class_conn2export(&mgc_conn); - ctxt = llog_get_context(exp->exp_obd, LLOG_CONFIG_REPL_CTXT); cfg->cfg_flags |= CFG_F_COMPAT146; rc = class_config_parse_llog(ctxt, profile, cfg); @@ -291,7 +305,7 @@ int _sysio_lustre_init(void) obd_timeout); } - /* debug peer on timeout? */ + /* debug peer on timeout? */ envstr = getenv("LIBLUSTRE_DEBUG_PEER_ON_TIMEOUT"); if (envstr != NULL) { obd_debug_peer_on_timeout = @@ -308,6 +322,8 @@ int _sysio_lustre_init(void) extern int _sysio_native_init(); +static int mnt_retry = 0; + char *lustre_path = NULL; void __liblustre_setup_(void) @@ -315,13 +331,20 @@ void __liblustre_setup_(void) char *target = NULL; char *lustre_driver = "lustre"; unsigned mntflgs = 0; - int err; + int err, count; lustre_path = getenv("LIBLUSTRE_MOUNT_POINT"); if (!lustre_path) { lustre_path = "/mnt/lustre"; } + target = getenv("LIBLUSTRE_MOUNT_RETRY"); + if (target) { + mnt_retry = atoi(target); + if (mnt_retry < 0) + mnt_retry = 0; + } + /* mount target */ target = getenv("LIBLUSTRE_MOUNT_TARGET"); if (!target) { @@ -350,7 +373,16 @@ void __liblustre_setup_(void) exit(1); #endif /* INIT_SYSIO */ - err = mount(target, lustre_path, lustre_driver, mntflgs, NULL); + count = mnt_retry; + do { + err = mount(target, lustre_path, lustre_driver, mntflgs, NULL); + if (err && mnt_retry && (-- count)) { + fprintf(stderr, "Lustre mount failed: %s. " + "Will retry %d more times\n", + strerror(errno), mnt_retry - count ); + sleep(2); + } + } while (err && count > 0); if (err) { fprintf(stderr, "Lustre mount failed: %s\n", strerror(errno)); exit(1); @@ -373,7 +405,7 @@ void __liblustre_cleanup_(void) * but it can't fix the situation that liblustre is mounted * at "/". */ - chdir("/"); + if (!chdir("/")) {} #if 0 umount(lustre_path); #endif