X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fliblustre%2Fllite_lib.c;h=bac1928ade7c151beba2bcb63a251fd9bf3288b6;hp=e70ff8f877e51c7cace38eec49a914f536a3baea;hb=b4efa1b2cbfd45f85439e1bb0a4c4eb719540dcd;hpb=6869932b552ac705f411de3362f01bd50c1f6f7d diff --git a/lustre/liblustre/llite_lib.c b/lustre/liblustre/llite_lib.c index e70ff8f..bac1928 100644 --- a/lustre/liblustre/llite_lib.c +++ b/lustre/liblustre/llite_lib.c @@ -67,6 +67,8 @@ #include "lutil.h" #include "llite_lib.h" +int slp_global_init(void); + static int lllib_init(void) { if (liblustre_init_current("liblustre") || @@ -77,7 +79,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); @@ -91,7 +94,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; @@ -175,21 +177,19 @@ int liblustre_process_log(struct config_llog_instance *cfg, GOTO(out_cleanup, rc = -ENOMEM); ocd->ocd_connect_flags = OBD_CONNECT_VERSION | OBD_CONNECT_FID | - OBD_CONNECT_AT; + 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, NULL); + 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); @@ -326,6 +326,8 @@ int _sysio_lustre_init(void) extern int _sysio_native_init(); +static int mnt_retry = 0; + char *lustre_path = NULL; void __liblustre_setup_(void) @@ -333,13 +335,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) { @@ -368,7 +377,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); @@ -391,7 +409,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