X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fliblustre%2Fllite_lib.c;h=8a100049fff4ed3d0e898b1d32cf8ed2b6c0f50e;hp=0d673681d32df4b61460c325b04becf6a10f1054;hb=e3a7c58aebafce40323db54bf6056029e5af4a70;hpb=2ca497595ef4a13dca335534c627b0501ee4e25e diff --git a/lustre/liblustre/llite_lib.c b/lustre/liblustre/llite_lib.c index 0d67368..8a10004 100644 --- a/lustre/liblustre/llite_lib.c +++ b/lustre/liblustre/llite_lib.c @@ -1,24 +1,39 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: +/* + * GPL HEADER START * - * Lustre Light common routines + * 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 (c) 2003, 2010, Oracle and/or its affiliates. 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 @@ -29,27 +44,14 @@ #include #include -#include -#ifdef HAVE_XTIO_H -#include -#endif -#include -#include -#include -#ifdef HAVE_FILE_H -#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 +62,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 +77,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 +159,25 @@ int liblustre_process_log(struct config_llog_instance *cfg, if (ocd == NULL) GOTO(out_cleanup, rc = -ENOMEM); - ocd->ocd_connect_flags = OBD_CONNECT_VERSION; + ocd->ocd_connect_flags = OBD_CONNECT_VERSION | OBD_CONNECT_FID | + OBD_CONNECT_AT | OBD_CONNECT_VBR | + OBD_CONNECT_FULL20; +#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 = exp->exp_obd->obd_llog_ctxt[LLOG_CONFIG_REPL_CTXT]; + 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); + llog_ctxt_put(ctxt); if (rc) { CERROR("class_config_parse_llog failed: rc = %d\n", rc); } @@ -287,7 +293,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 = @@ -304,6 +310,8 @@ int _sysio_lustre_init(void) extern int _sysio_native_init(); +static int mnt_retry = 0; + char *lustre_path = NULL; void __liblustre_setup_(void) @@ -311,13 +319,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) { @@ -346,7 +361,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); @@ -369,7 +393,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