Commit a37bec74 authored by John Hammond's avatar John Hammond Committed by Greg Kroah-Hartman

staging/lustre/llite: Remove ccc_global_{init, fini}()

Merge their contents into vvp_global_{init,fini}() and
{init,exit}_lustre_lite().
Rename ccc_inode_fini_* to cl_inode_fini_*.
Signed-off-by: default avatarJohn L. Hammond <john.hammond@intel.com>
Signed-off-by: default avatarJinshan Xiong <jinshan.xiong@intel.com>
Reviewed-on: http://review.whamcloud.com/13714
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-5971Reviewed-by: default avatarBobi Jam <bobijam@hotmail.com>
Reviewed-by: default avatarJames Simmons <uja.ornl@gmail.com>
Signed-off-by: default avatarOleg Drokin <green@linuxhacker.ru>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9acc4500
...@@ -72,49 +72,18 @@ ...@@ -72,49 +72,18 @@
*/ */
/** /**
* An `emergency' environment used by ccc_inode_fini() when cl_env_get() * An `emergency' environment used by cl_inode_fini() when cl_env_get()
* fails. Access to this environment is serialized by ccc_inode_fini_guard * fails. Access to this environment is serialized by cl_inode_fini_guard
* mutex. * mutex.
*/ */
static struct lu_env *ccc_inode_fini_env; struct lu_env *cl_inode_fini_env;
int cl_inode_fini_refcheck;
/** /**
* A mutex serializing calls to slp_inode_fini() under extreme memory * A mutex serializing calls to slp_inode_fini() under extreme memory
* pressure, when environments cannot be allocated. * pressure, when environments cannot be allocated.
*/ */
static DEFINE_MUTEX(ccc_inode_fini_guard); static DEFINE_MUTEX(cl_inode_fini_guard);
static int dummy_refcheck;
int ccc_global_init(struct lu_device_type *device_type)
{
int result;
result = lu_device_type_init(device_type);
if (result)
return result;
ccc_inode_fini_env = cl_env_alloc(&dummy_refcheck,
LCT_REMEMBER | LCT_NOREF);
if (IS_ERR(ccc_inode_fini_env)) {
result = PTR_ERR(ccc_inode_fini_env);
goto out_device;
}
ccc_inode_fini_env->le_ctx.lc_cookie = 0x4;
return 0;
out_device:
lu_device_type_fini(device_type);
return result;
}
void ccc_global_fini(struct lu_device_type *device_type)
{
if (ccc_inode_fini_env) {
cl_env_put(ccc_inode_fini_env, &dummy_refcheck);
ccc_inode_fini_env = NULL;
}
lu_device_type_fini(device_type);
}
int cl_setattr_ost(struct inode *inode, const struct iattr *attr) int cl_setattr_ost(struct inode *inode, const struct iattr *attr)
{ {
...@@ -286,10 +255,10 @@ void cl_inode_fini(struct inode *inode) ...@@ -286,10 +255,10 @@ void cl_inode_fini(struct inode *inode)
env = cl_env_get(&refcheck); env = cl_env_get(&refcheck);
emergency = IS_ERR(env); emergency = IS_ERR(env);
if (emergency) { if (emergency) {
mutex_lock(&ccc_inode_fini_guard); mutex_lock(&cl_inode_fini_guard);
LASSERT(ccc_inode_fini_env); LASSERT(cl_inode_fini_env);
cl_env_implant(ccc_inode_fini_env, &refcheck); cl_env_implant(cl_inode_fini_env, &refcheck);
env = ccc_inode_fini_env; env = cl_inode_fini_env;
} }
/* /*
* cl_object cache is a slave to inode cache (which, in turn * cl_object cache is a slave to inode cache (which, in turn
...@@ -301,8 +270,8 @@ void cl_inode_fini(struct inode *inode) ...@@ -301,8 +270,8 @@ void cl_inode_fini(struct inode *inode)
cl_object_put_last(env, clob); cl_object_put_last(env, clob);
lli->lli_clob = NULL; lli->lli_clob = NULL;
if (emergency) { if (emergency) {
cl_env_unplant(ccc_inode_fini_env, &refcheck); cl_env_unplant(cl_inode_fini_env, &refcheck);
mutex_unlock(&ccc_inode_fini_guard); mutex_unlock(&cl_inode_fini_guard);
} else { } else {
cl_env_put(env, &refcheck); cl_env_put(env, &refcheck);
} }
......
...@@ -984,9 +984,6 @@ void free_rmtperm_hash(struct hlist_head *hash); ...@@ -984,9 +984,6 @@ void free_rmtperm_hash(struct hlist_head *hash);
int ll_update_remote_perm(struct inode *inode, struct mdt_remote_perm *perm); int ll_update_remote_perm(struct inode *inode, struct mdt_remote_perm *perm);
int lustre_check_remote_perm(struct inode *inode, int mask); int lustre_check_remote_perm(struct inode *inode, int mask);
/* llite/llite_cl.c */
extern struct lu_device_type vvp_device_type;
/** /**
* Common IO arguments for various VFS I/O interfaces. * Common IO arguments for various VFS I/O interfaces.
*/ */
...@@ -1371,4 +1368,8 @@ void ll_xattr_fini(void); ...@@ -1371,4 +1368,8 @@ void ll_xattr_fini(void);
int ll_page_sync_io(const struct lu_env *env, struct cl_io *io, int ll_page_sync_io(const struct lu_env *env, struct cl_io *io,
struct cl_page *page, enum cl_req_type crt); struct cl_page *page, enum cl_req_type crt);
/* lcommon_cl.c */
extern struct lu_env *cl_inode_fini_env;
extern int cl_inode_fini_refcheck;
#endif /* LLITE_INTERNAL_H */ #endif /* LLITE_INTERNAL_H */
...@@ -164,9 +164,18 @@ static int __init lustre_init(void) ...@@ -164,9 +164,18 @@ static int __init lustre_init(void)
if (rc != 0) if (rc != 0)
goto out_sysfs; goto out_sysfs;
cl_inode_fini_env = cl_env_alloc(&cl_inode_fini_refcheck,
LCT_REMEMBER | LCT_NOREF);
if (IS_ERR(cl_inode_fini_env)) {
rc = PTR_ERR(cl_inode_fini_env);
goto out_vvp;
}
cl_inode_fini_env->le_ctx.lc_cookie = 0x4;
rc = ll_xattr_init(); rc = ll_xattr_init();
if (rc != 0) if (rc != 0)
goto out_vvp; goto out_inode_fini_env;
lustre_register_client_fill_super(ll_fill_super); lustre_register_client_fill_super(ll_fill_super);
lustre_register_kill_super_cb(ll_kill_super); lustre_register_kill_super_cb(ll_kill_super);
...@@ -174,6 +183,8 @@ static int __init lustre_init(void) ...@@ -174,6 +183,8 @@ static int __init lustre_init(void)
return 0; return 0;
out_inode_fini_env:
cl_env_put(cl_inode_fini_env, &cl_inode_fini_refcheck);
out_vvp: out_vvp:
vvp_global_fini(); vvp_global_fini();
out_sysfs: out_sysfs:
...@@ -198,6 +209,7 @@ static void __exit lustre_exit(void) ...@@ -198,6 +209,7 @@ static void __exit lustre_exit(void)
kset_unregister(llite_kset); kset_unregister(llite_kset);
ll_xattr_fini(); ll_xattr_fini();
cl_env_put(cl_inode_fini_env, &cl_inode_fini_refcheck);
vvp_global_fini(); vvp_global_fini();
kmem_cache_destroy(ll_inode_cachep); kmem_cache_destroy(ll_inode_cachep);
......
...@@ -293,20 +293,27 @@ struct lu_device_type vvp_device_type = { ...@@ -293,20 +293,27 @@ struct lu_device_type vvp_device_type = {
*/ */
int vvp_global_init(void) int vvp_global_init(void)
{ {
int result; int rc;
rc = lu_kmem_init(vvp_caches);
if (rc != 0)
return rc;
rc = lu_device_type_init(&vvp_device_type);
if (rc != 0)
goto out_kmem;
result = lu_kmem_init(vvp_caches); return 0;
if (result == 0) {
result = ccc_global_init(&vvp_device_type); out_kmem:
if (result != 0)
lu_kmem_fini(vvp_caches); lu_kmem_fini(vvp_caches);
}
return result; return rc;
} }
void vvp_global_fini(void) void vvp_global_fini(void)
{ {
ccc_global_fini(&vvp_device_type); lu_device_type_fini(&vvp_device_type);
lu_kmem_fini(vvp_caches); lu_kmem_fini(vvp_caches);
} }
......
...@@ -164,6 +164,8 @@ struct vvp_io { ...@@ -164,6 +164,8 @@ struct vvp_io {
bool vui_ra_valid; bool vui_ra_valid;
}; };
extern struct lu_device_type vvp_device_type;
extern struct lu_context_key vvp_session_key; extern struct lu_context_key vvp_session_key;
extern struct lu_context_key vvp_thread_key; extern struct lu_context_key vvp_thread_key;
...@@ -324,8 +326,6 @@ void ccc_key_fini(const struct lu_context *ctx, ...@@ -324,8 +326,6 @@ void ccc_key_fini(const struct lu_context *ctx,
struct lu_context_key *key, void *data); struct lu_context_key *key, void *data);
void ccc_umount(const struct lu_env *env, struct cl_device *dev); void ccc_umount(const struct lu_env *env, struct cl_device *dev);
int ccc_global_init(struct lu_device_type *device_type);
void ccc_global_fini(struct lu_device_type *device_type);
static inline struct lu_device *vvp2lu_dev(struct vvp_device *vdv) static inline struct lu_device *vvp2lu_dev(struct vvp_device *vdv)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment