Skip to content
Snippets Groups Projects
Commit 6129f1bd authored by Bobi Jam's avatar Bobi Jam
Browse files

Branch b1_6

b=13715
i=johann
i=nathan
i=adilger

protect accessing imp->generation w/ imp_lock.
parent 25ef3a57
No related branches found
No related tags found
No related merge requests found
......@@ -159,15 +159,12 @@ int ptlrpc_set_import_discon(struct obd_import *imp, __u32 conn_cnt)
return rc;
}
/*
* This acts as a barrier; all existing requests are rejected, and
* no new requests will be accepted until the import is valid again.
*/
void ptlrpc_deactivate_import(struct obd_import *imp)
/* Must be called with imp_lock held! */
static void ptlrpc_deactivate_and_unlock_import(struct obd_import *imp)
{
ENTRY;
LASSERT_SPIN_LOCKED(&imp->imp_lock);
spin_lock(&imp->imp_lock);
CDEBUG(D_HA, "setting import %s INVALID\n", obd2cli_tgt(imp->imp_obd));
imp->imp_invalid = 1;
imp->imp_generation++;
......@@ -177,6 +174,16 @@ void ptlrpc_deactivate_import(struct obd_import *imp)
obd_import_event(imp->imp_obd, imp, IMP_EVENT_INACTIVE);
}
/*
* This acts as a barrier; all existing requests are rejected, and
* no new requests will be accepted until the import is valid again.
*/
void ptlrpc_deactivate_import(struct obd_import *imp)
{
spin_lock(&imp->imp_lock);
ptlrpc_deactivate_and_unlock_import(imp);
}
/*
* This function will invalidate the import, if necessary, then block
* for all the RPC completions, and finally notify the obd to
......@@ -880,9 +887,12 @@ finish:
out:
if (rc != 0) {
IMPORT_SET_STATE(imp, LUSTRE_IMP_DISCON);
spin_lock(&imp->imp_lock);
if (aa->pcaa_initial_connect && !imp->imp_initial_recov &&
(request->rq_import_generation == imp->imp_generation))
ptlrpc_deactivate_import(imp);
ptlrpc_deactivate_and_unlock_import(imp);
else
spin_unlock(&imp->imp_lock);
if (imp->imp_recon_bk && imp->imp_last_recon) {
/* Give up trying to reconnect */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment