* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2012, 2014 Intel Corporation.
+ * Copyright (c) 2012, 2015, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
if (exp == NULL || obd == NULL || cluuid == NULL)
RETURN(-EINVAL);
+ rc = nodemap_add_member(*(lnet_nid_t *)client_nid, exp);
+ if (rc != 0 && rc != -EEXIST)
+ RETURN(rc);
+
ofd = ofd_dev(obd->obd_lu_dev);
rc = ofd_parse_connect_data(env, exp, data, false);
if (rc == 0)
ofd_export_stats_init(ofd, exp, client_nid);
-
- nodemap_add_member(*(lnet_nid_t *)client_nid, exp);
+ else
+ nodemap_del_member(exp);
RETURN(rc);
}
struct ofd_device *ofd;
struct lustre_handle conn = { 0 };
int rc;
- lnet_nid_t *client_nid;
ENTRY;
if (_exp == NULL || obd == NULL || cluuid == NULL)
exp = class_conn2export(&conn);
LASSERT(exp != NULL);
+ if (localdata != NULL) {
+ rc = nodemap_add_member(*(lnet_nid_t *)localdata, exp);
+ if (rc != 0 && rc != -EEXIST)
+ GOTO(out, rc);
+ } else {
+ CDEBUG(D_HA, "%s: cannot find nodemap for client %s: "
+ "nid is null\n", obd->obd_name, cluuid->uuid);
+ }
+
rc = ofd_parse_connect_data(env, exp, data, true);
if (rc)
GOTO(out, rc);
- if (localdata != NULL) {
- client_nid = localdata;
- nodemap_add_member(*client_nid, exp);
- }
-
if (obd->obd_replayable) {
struct tg_export_data *ted = &exp->exp_target_data;
out:
if (rc != 0) {
- nodemap_del_member(exp);
class_disconnect(exp);
+ nodemap_del_member(exp);
*_exp = NULL;
} else {
*_exp = exp;
if (!(exp->exp_flags & OBD_OPT_FORCE))
ofd_grant_sanity_check(ofd_obd(ofd), __FUNCTION__);
- nodemap_del_member(exp);
rc = server_disconnect_export(exp);
ofd_grant_discard(exp);
lu_env_fini(&env);
}
out:
+ nodemap_del_member(exp);
class_export_put(exp);
RETURN(rc);
}
int ofd_postrecov(const struct lu_env *env, struct ofd_device *ofd)
{
struct lu_device *ldev = &ofd->ofd_dt_dev.dd_lu_dev;
- struct lfsck_start_param lsp;
int rc;
CDEBUG(D_HA, "%s: recovery is over\n", ofd_name(ofd));
- lsp.lsp_start = NULL;
- lsp.lsp_index_valid = 0;
- rc = lfsck_start(env, ofd->ofd_osd, &lsp);
- if (rc != 0 && rc != -EALREADY)
- CWARN("%s: auto trigger paused LFSCK failed: rc = %d\n",
- ofd_name(ofd), rc);
+ if (!ofd->ofd_skip_lfsck) {
+ struct lfsck_start_param lsp;
+
+ lsp.lsp_start = NULL;
+ lsp.lsp_index_valid = 0;
+ rc = lfsck_start(env, ofd->ofd_osd, &lsp);
+ if (rc != 0 && rc != -EALREADY)
+ CWARN("%s: auto trigger paused LFSCK failed: rc = %d\n",
+ ofd_name(ofd), rc);
+ }
return ldev->ld_ops->ldo_recovery_complete(env, ldev);
}
unstable = ofd->ofd_osfs_inflight - unstable;
ofd->ofd_osfs_unstable = 0;
if (unstable) {
- /* some writes completed while we were running statfs
+ /* some writes committed while we were running statfs
* w/o the ofd_osfs_lock. Those ones got added to
* the cached statfs data that we are about to crunch.
* Take them into account in the new statfs data */
u64 seq = ostid_seq(&oa->o_oi);
struct ofd_seq *oseq;
int rc = 0, diff = 1;
+ long granted;
u64 next_id;
int count;
}
mutex_lock(&oseq->os_create_lock);
- rc = ofd_grant_create(env, ofd_obd(ofd)->obd_self_export, &diff);
- if (rc < 0) {
+ granted = ofd_grant_create(env, ofd_obd(ofd)->obd_self_export, &diff);
+ if (granted < 0) {
+ rc = granted;
+ granted = 0;
CDEBUG(D_HA, "%s: failed to acquire grant space for "
"precreate (%d): rc = %d\n", ofd_name(ofd), diff, rc);
diff = 0;
rc = 0;
}
- ofd_grant_commit(env, ofd_obd(ofd)->obd_self_export, rc);
+ ofd_grant_commit(ofd_obd(ofd)->obd_self_export, granted, rc);
out:
mutex_unlock(&oseq->os_create_lock);
ofd_seq_put(env, oseq);
switch (cmd) {
case OBD_IOC_ABORT_RECOVERY:
CERROR("%s: aborting recovery\n", obd->obd_name);
- obd->obd_force_abort_recovery = 1;
+ obd->obd_abort_recovery = 1;
target_stop_recovery_thread(obd);
break;
case OBD_IOC_SYNC:
* special actions, it just invokes target_recovery_cleanup().
*
* \param[in] obd OBD device of OFD
- * \param[in] stage cleanup stage
*
* \retval 0
*/
-static int ofd_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage)
+static int ofd_precleanup(struct obd_device *obd)
{
- int rc = 0;
-
ENTRY;
-
- switch(stage) {
- case OBD_CLEANUP_EARLY:
- break;
- case OBD_CLEANUP_EXPORTS:
- target_cleanup_recovery(obd);
- break;
- }
- RETURN(rc);
+ target_cleanup_recovery(obd);
+ RETURN(0);
}
/**