diff --git a/lustre/liblustre/llite_lib.c b/lustre/liblustre/llite_lib.c index c52cbdcdb873229691ffc98c31dc03ca1e1c257c..7de9411f20eadfde2ae9c97eb15e3ad3a96f5fd5 100644 --- a/lustre/liblustre/llite_lib.c +++ b/lustre/liblustre/llite_lib.c @@ -324,6 +324,8 @@ int _sysio_lustre_init(void) extern int _sysio_native_init(); +static int mnt_retry = 0; + char *lustre_path = NULL; void __liblustre_setup_(void) @@ -331,13 +333,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) { @@ -366,7 +375,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); diff --git a/lustre/tests/acceptance-small.sh b/lustre/tests/acceptance-small.sh index a715d4a601932559e2e75567892e20da1cdb19db..8e55f933462002df85b5d36977ccc9997fd7c02f 100755 --- a/lustre/tests/acceptance-small.sh +++ b/lustre/tests/acceptance-small.sh @@ -297,6 +297,7 @@ for NAME in $CONFIGS; do MDS_MOUNT_OPTS=${MDS_MOUNT_OPTS/#,/-o } \ $SETUP export LIBLUSTRE_MOUNT_POINT=$MOUNT2 + export LIBLUSTRE_MOUNT_RETRY=5 export LIBLUSTRE_MOUNT_TARGET=$MGSNID:/$FSNAME export LIBLUSTRE_TIMEOUT=`lctl get_param -n timeout` #export LIBLUSTRE_DEBUG_MASK=`lctl get_param -n debug`