X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fobdclass%2Flu_object.c;h=dd46c1b75ec0c77c13797554cef072fad67365af;hp=8c7d253d793d1becf005acbdf30748155158d185;hb=60a9fd37185edf57fc42bf6a5ad9b9c61fc10e14;hpb=9219ce0081c665ec42a83ee10fb44cf1ace5e932 diff --git a/lustre/obdclass/lu_object.c b/lustre/obdclass/lu_object.c index 8c7d253..dd46c1b 100644 --- a/lustre/obdclass/lu_object.c +++ b/lustre/obdclass/lu_object.c @@ -1936,6 +1936,52 @@ void dt_global_fini(void); int llo_global_init(void); void llo_global_fini(void); +/* context key constructor/destructor: lu_ucred_key_init, lu_ucred_key_fini */ +LU_KEY_INIT_FINI(lu_ucred, struct lu_ucred); + +static struct lu_context_key lu_ucred_key = { + .lct_tags = LCT_SESSION, + .lct_init = lu_ucred_key_init, + .lct_fini = lu_ucred_key_fini +}; + +/** + * Get ucred key if session exists and ucred key is allocated on it. + * Return NULL otherwise. + */ +struct lu_ucred *lu_ucred(const struct lu_env *env) +{ + if (!env->le_ses) + return NULL; + return lu_context_key_get(env->le_ses, &lu_ucred_key); +} +EXPORT_SYMBOL(lu_ucred); + +/** + * Get ucred key and check if it is properly initialized. + * Return NULL otherwise. + */ +struct lu_ucred *lu_ucred_check(const struct lu_env *env) +{ + struct lu_ucred *uc = lu_ucred(env); + if (uc && uc->uc_valid != UCRED_OLD && uc->uc_valid != UCRED_NEW) + return NULL; + return uc; +} +EXPORT_SYMBOL(lu_ucred_check); + +/** + * Get ucred key, which must exist and must be properly initialized. + * Assert otherwise. + */ +struct lu_ucred *lu_ucred_assert(const struct lu_env *env) +{ + struct lu_ucred *uc = lu_ucred_check(env); + LASSERT(uc != NULL); + return uc; +} +EXPORT_SYMBOL(lu_ucred_assert); + /** * Initialization of global lu_* data. */ @@ -1953,6 +1999,12 @@ int lu_global_init(void) result = lu_context_key_register(&lu_global_key); if (result != 0) return result; + + LU_CONTEXT_KEY_INIT(&lu_ucred_key); + result = lu_context_key_register(&lu_ucred_key); + if (result != 0) + return result; + /* * At this level, we don't know what tags are needed, so allocate them * conservatively. This should not be too bad, because this @@ -2009,6 +2061,7 @@ void lu_global_fini(void) } lu_context_key_degister(&lu_global_key); + lu_context_key_degister(&lu_ucred_key); /* * Tear shrinker environment down _after_ de-registering