struct lustre_mount_info *lmi;
struct llog_ctxt *ctxt;
struct fs_db *fsdb = NULL;
+ struct fs_db *fsdb_srpc = NULL;
int rc;
ENTRY;
CERROR("%s: %s fsdb and log setup failed: rc = %d\n",
obd->obd_name, PARAMS_FILENAME, rc);
+ /* Setup _mgs fsdb, useful for srpc */
+ mgs__mgs_fsdb_setup(env, mgs, fsdb_srpc);
+
ptlrpc_init_client(LDLM_CB_REQUEST_PORTAL, LDLM_CB_REPLY_PORTAL,
"mgs_ldlm_client", &obd->obd_ldlm_client);
int mgs_init_fsdb_list(struct mgs_device *mgs);
int mgs_cleanup_fsdb_list(struct mgs_device *mgs);
+int mgs__mgs_fsdb_setup(const struct lu_env *env, struct mgs_device *mgs,
+ struct fs_db *fsdb);
int mgs_params_fsdb_setup(const struct lu_env *env, struct mgs_device *mgs,
struct fs_db *fsdb);
int mgs_params_fsdb_cleanup(const struct lu_env *env, struct mgs_device *mgs);
if (strcmp(fsname, MGSSELF_NAME) == 0) {
set_bit(FSDB_MGS_SELF, &fsdb->fsdb_flags);
+ fsdb->fsdb_mgs = mgs;
} else {
OBD_ALLOC(fsdb->fsdb_ost_index_map, INDEX_MAP_SIZE);
OBD_ALLOC(fsdb->fsdb_mdt_index_map, INDEX_MAP_SIZE);
}
rset = &tgtconf->mtsc_rset;
+ } else if (strcmp(svname, MGSSELF_NAME) == 0) {
+ /* put _mgs related srpc rule directly in mgs ruleset */
+ rset = &fsdb->fsdb_mgs->mgs_lut.lut_sptlrpc_rset;
} else {
rset = &fsdb->fsdb_srpc_gen;
}
EXIT;
}
+/* Setup _mgs fsdb and log
+ */
+int mgs__mgs_fsdb_setup(const struct lu_env *env, struct mgs_device *mgs,
+ struct fs_db *fsdb)
+{
+ int rc;
+ ENTRY;
+
+ rc = mgs_find_or_make_fsdb(env, mgs, MGSSELF_NAME, &fsdb);
+
+ RETURN(rc);
+}
+
/* Setup params fsdb and log
*/
int mgs_params_fsdb_setup(const struct lu_env *env, struct mgs_device *mgs,
spin_lock(&exp->exp_lock);
exp->exp_sp_peer = req->rq_sp_from;
exp->exp_flvr = flvr;
+
+ /* when on mgs, if no restriction is set, or if client
+ * is loopback, allow any flavor */
+ if ((strcmp(exp->exp_obd->obd_type->typ_name,
+ LUSTRE_MGS_NAME) == 0) &&
+ (exp->exp_flvr.sf_rpc == SPTLRPC_FLVR_NULL ||
+ LNET_NETTYP(LNET_NIDNET(exp->exp_connection->c_peer.nid))
+ == LOLND))
+ exp->exp_flvr.sf_rpc = SPTLRPC_FLVR_ANY;
+
if (exp->exp_flvr.sf_rpc != SPTLRPC_FLVR_ANY &&
exp->exp_flvr.sf_rpc != req->rq_flvr.sf_rpc) {
CERROR("%s: unauthorized rpc flavor %x from %s, "