X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fptlrpc%2Fnodemap_member.c;h=e049799f2e1325aab70c8cc75be046441a0c4ea0;hb=4fd7d5585d33240a658f57bf7399da4415a7eb6c;hp=ce97c47ee95cdb70585118b543f25c012934c6bd;hpb=34ba26ea9884df0758f8ec8dd1047b4cf474af09;p=fs%2Flustre-release.git diff --git a/lustre/ptlrpc/nodemap_member.c b/lustre/ptlrpc/nodemap_member.c index ce97c47..e049799 100644 --- a/lustre/ptlrpc/nodemap_member.c +++ b/lustre/ptlrpc/nodemap_member.c @@ -181,7 +181,7 @@ void nm_member_reclassify_nodemap(struct lu_nodemap *nodemap) /* if no conn assigned to this exp, reconnect will reclassify */ spin_lock(&exp->exp_lock); if (exp->exp_connection) { - nid = exp->exp_connection->c_peer.nid; + nid = lnet_nid_to_nid4(&exp->exp_connection->c_peer.nid); } else { spin_unlock(&exp->exp_lock); continue; @@ -190,6 +190,8 @@ void nm_member_reclassify_nodemap(struct lu_nodemap *nodemap) /* nodemap_classify_nid requires nmc_range_tree_lock */ new_nodemap = nodemap_classify_nid(nid); + if (IS_ERR(new_nodemap)) + continue; if (new_nodemap != nodemap) { /* could deadlock if new_nodemap also reclassifying, @@ -211,7 +213,9 @@ void nm_member_reclassify_nodemap(struct lu_nodemap *nodemap) list_add(&exp->exp_target_data.ted_nodemap_member, &new_nodemap->nm_member_list); mutex_unlock(&new_nodemap->nm_member_list_lock); - nm_member_exp_revoke(exp); + + if (nodemap_active) + nm_member_exp_revoke(exp); } else { nodemap_putref(new_nodemap); } @@ -222,15 +226,24 @@ void nm_member_reclassify_nodemap(struct lu_nodemap *nodemap) } /** - * Revoke the locks for member exports. Changing the idmap is - * akin to deleting the security context. If the locks are not - * canceled, the client could cache permissions that are no - * longer correct with the map. + * Revoke the locks for member exports if nodemap system is active. + * + * Changing the idmap is akin to deleting the security context. If the locks + * are not canceled, the client could cache permissions that are no longer + * correct with the map. * * \param nodemap nodemap that has been altered */ void nm_member_revoke_locks(struct lu_nodemap *nodemap) { + if (!nodemap_active) + return; + + nm_member_revoke_locks_always(nodemap); +} + +void nm_member_revoke_locks_always(struct lu_nodemap *nodemap) +{ struct obd_export *exp; struct obd_export *tmp;