Release 4.11 fs/gfs2/main.c
/*
* Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
* Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
*
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU General Public License version 2.
*/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/completion.h>
#include <linux/buffer_head.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/gfs2_ondisk.h>
#include <linux/rcupdate.h>
#include <linux/rculist_bl.h>
#include <linux/atomic.h>
#include <linux/mempool.h>
#include "gfs2.h"
#include "incore.h"
#include "super.h"
#include "sys.h"
#include "util.h"
#include "glock.h"
#include "quota.h"
#include "recovery.h"
#include "dir.h"
#include "glops.h"
struct workqueue_struct *gfs2_control_wq;
static void gfs2_init_inode_once(void *foo)
{
struct gfs2_inode *ip = foo;
inode_init_once(&ip->i_inode);
init_rwsem(&ip->i_rw_mutex);
INIT_LIST_HEAD(&ip->i_trunc_list);
ip->i_qadata = NULL;
memset(&ip->i_res, 0, sizeof(ip->i_res));
RB_CLEAR_NODE(&ip->i_res.rs_node);
ip->i_hash_cache = NULL;
gfs2_holder_mark_uninitialized(&ip->i_iopen_gh);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Steven Whitehouse | 47 | 53.41% | 4 | 40.00% |
Robert S Peterson | 30 | 34.09% | 3 | 30.00% |
Andreas Gruenbacher | 8 | 9.09% | 2 | 20.00% |
Christoph Lameter | 3 | 3.41% | 1 | 10.00% |
Total | 88 | 100.00% | 10 | 100.00% |
static void gfs2_init_glock_once(void *foo)
{
struct gfs2_glock *gl = foo;
INIT_HLIST_BL_NODE(&gl->gl_list);
spin_lock_init(&gl->gl_lockref.lock);
INIT_LIST_HEAD(&gl->gl_holders);
INIT_LIST_HEAD(&gl->gl_lru);
INIT_LIST_HEAD(&gl->gl_ail_list);
atomic_set(&gl->gl_ail_count, 0);
atomic_set(&gl->gl_revokes, 0);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Steven Whitehouse | 73 | 92.41% | 4 | 66.67% |
Christoph Lameter | 3 | 3.80% | 1 | 16.67% |
Andreas Gruenbacher | 3 | 3.80% | 1 | 16.67% |
Total | 79 | 100.00% | 6 | 100.00% |
static void gfs2_init_gl_aspace_once(void *foo)
{
struct gfs2_glock *gl = foo;
struct address_space *mapping = (struct address_space *)(gl + 1);
gfs2_init_glock_once(gl);
address_space_init_once(mapping);
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Steven Whitehouse | 42 | 97.67% | 1 | 50.00% |
Miklos Szeredi | 1 | 2.33% | 1 | 50.00% |
Total | 43 | 100.00% | 2 | 100.00% |
/**
* init_gfs2_fs - Register GFS2 as a filesystem
*
* Returns: 0 on success, error code on failure
*/
static int __init init_gfs2_fs(void)
{
int error;
gfs2_str2qstr(&gfs2_qdot, ".");
gfs2_str2qstr(&gfs2_qdotdot, "..");
gfs2_quota_hash_init();
error = gfs2_sys_init();
if (error)
return error;
error = list_lru_init(&gfs2_qd_lru);
if (error)
goto fail_lru;
error = gfs2_glock_init();
if (error)
goto fail;
error = -ENOMEM;
gfs2_glock_cachep = kmem_cache_create("gfs2_glock",
sizeof(struct gfs2_glock),
0, 0,
gfs2_init_glock_once);
if (!gfs2_glock_cachep)
goto fail;
gfs2_glock_aspace_cachep = kmem_cache_create("gfs2_glock(aspace)",
sizeof(struct gfs2_glock) +
sizeof(struct address_space),
0, 0, gfs2_init_gl_aspace_once);
if (!gfs2_glock_aspace_cachep)
goto fail;
gfs2_inode_cachep = kmem_cache_create("gfs2_inode",
sizeof(struct gfs2_inode),
0, SLAB_RECLAIM_ACCOUNT|
SLAB_MEM_SPREAD|
SLAB_ACCOUNT,
gfs2_init_inode_once);
if (!gfs2_inode_cachep)
goto fail;
gfs2_bufdata_cachep = kmem_cache_create("gfs2_bufdata",
sizeof(struct gfs2_bufdata),
0, 0, NULL);
if (!gfs2_bufdata_cachep)
goto fail;
gfs2_rgrpd_cachep = kmem_cache_create("gfs2_rgrpd",
sizeof(struct gfs2_rgrpd),
0, 0, NULL);
if (!gfs2_rgrpd_cachep)
goto fail;
gfs2_quotad_cachep = kmem_cache_create("gfs2_quotad",
sizeof(struct gfs2_quota_data),
0, 0, NULL);
if (!gfs2_quotad_cachep)
goto fail;
gfs2_qadata_cachep = kmem_cache_create("gfs2_qadata",
sizeof(struct gfs2_qadata),
0, 0, NULL);
if (!gfs2_qadata_cachep)
goto fail;
error = register_shrinker(&gfs2_qd_shrinker);
if (error)
goto fail;
error = register_filesystem(&gfs2_fs_type);
if (error)
goto fail;
error = register_filesystem(&gfs2meta_fs_type);
if (error)
goto fail_unregister;
error = -ENOMEM;
gfs_recovery_wq = alloc_workqueue("gfs_recovery",
WQ_MEM_RECLAIM | WQ_FREEZABLE, 0);
if (!gfs_recovery_wq)
goto fail_wq;
gfs2_control_wq = alloc_workqueue("gfs2_control",
WQ_UNBOUND | WQ_FREEZABLE, 0);
if (!gfs2_control_wq)
goto fail_recovery;
gfs2_freeze_wq = alloc_workqueue("freeze_workqueue", 0, 0);
if (!gfs2_freeze_wq)
goto fail_control;
gfs2_page_pool = mempool_create_page_pool(64, 0);
if (!gfs2_page_pool)
goto fail_freeze;
gfs2_register_debugfs();
pr_info("GFS2 installed\n");
return 0;
fail_freeze:
destroy_workqueue(gfs2_freeze_wq);
fail_control:
destroy_workqueue(gfs2_control_wq);
fail_recovery:
destroy_workqueue(gfs_recovery_wq);
fail_wq:
unregister_filesystem(&gfs2meta_fs_type);
fail_unregister:
unregister_filesystem(&gfs2_fs_type);
fail:
list_lru_destroy(&gfs2_qd_lru);
fail_lru:
unregister_shrinker(&gfs2_qd_shrinker);
gfs2_glock_exit();
if (gfs2_qadata_cachep)
kmem_cache_destroy(gfs2_qadata_cachep);
if (gfs2_quotad_cachep)
kmem_cache_destroy(gfs2_quotad_cachep);
if (gfs2_rgrpd_cachep)
kmem_cache_destroy(gfs2_rgrpd_cachep);
if (gfs2_bufdata_cachep)
kmem_cache_destroy(gfs2_bufdata_cachep);
if (gfs2_inode_cachep)
kmem_cache_destroy(gfs2_inode_cachep);
if (gfs2_glock_aspace_cachep)
kmem_cache_destroy(gfs2_glock_aspace_cachep);
if (gfs2_glock_cachep)
kmem_cache_destroy(gfs2_glock_cachep);
gfs2_sys_uninit();
return error;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Steven Whitehouse | 205 | 38.10% | 15 | 50.00% |
David Teigland | 190 | 35.32% | 2 | 6.67% |
Robert S Peterson | 75 | 13.94% | 3 | 10.00% |
Benjamin Marzinski | 27 | 5.02% | 1 | 3.33% |
Tejun Heo | 16 | 2.97% | 3 | 10.00% |
Abhijith Das | 10 | 1.86% | 1 | 3.33% |
Chao Yu | 9 | 1.67% | 1 | 3.33% |
David Howells | 2 | 0.37% | 1 | 3.33% |
Vladimir Davydov | 2 | 0.37% | 1 | 3.33% |
Michal Marek | 1 | 0.19% | 1 | 3.33% |
Fabian Frederick | 1 | 0.19% | 1 | 3.33% |
Total | 538 | 100.00% | 30 | 100.00% |
/**
* exit_gfs2_fs - Unregister the file system
*
*/
static void __exit exit_gfs2_fs(void)
{
unregister_shrinker(&gfs2_qd_shrinker);
gfs2_glock_exit();
gfs2_unregister_debugfs();
unregister_filesystem(&gfs2_fs_type);
unregister_filesystem(&gfs2meta_fs_type);
destroy_workqueue(gfs_recovery_wq);
destroy_workqueue(gfs2_control_wq);
destroy_workqueue(gfs2_freeze_wq);
list_lru_destroy(&gfs2_qd_lru);
rcu_barrier();
mempool_destroy(gfs2_page_pool);
kmem_cache_destroy(gfs2_qadata_cachep);
kmem_cache_destroy(gfs2_quotad_cachep);
kmem_cache_destroy(gfs2_rgrpd_cachep);
kmem_cache_destroy(gfs2_bufdata_cachep);
kmem_cache_destroy(gfs2_inode_cachep);
kmem_cache_destroy(gfs2_glock_aspace_cachep);
kmem_cache_destroy(gfs2_glock_cachep);
gfs2_sys_uninit();
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
David Teigland | 38 | 38.00% | 2 | 11.11% |
Steven Whitehouse | 35 | 35.00% | 9 | 50.00% |
Robert S Peterson | 13 | 13.00% | 3 | 16.67% |
Abhijith Das | 5 | 5.00% | 1 | 5.56% |
Benjamin Marzinski | 5 | 5.00% | 1 | 5.56% |
Tejun Heo | 2 | 2.00% | 1 | 5.56% |
David Howells | 2 | 2.00% | 1 | 5.56% |
Total | 100 | 100.00% | 18 | 100.00% |
MODULE_DESCRIPTION("Global File System");
MODULE_AUTHOR("Red Hat, Inc.");
MODULE_LICENSE("GPL");
module_init(init_gfs2_fs);
module_exit(exit_gfs2_fs);
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Steven Whitehouse | 430 | 45.22% | 24 | 48.98% |
David Teigland | 285 | 29.97% | 2 | 4.08% |
Robert S Peterson | 118 | 12.41% | 5 | 10.20% |
Benjamin Marzinski | 35 | 3.68% | 1 | 2.04% |
Tejun Heo | 21 | 2.21% | 3 | 6.12% |
Abhijith Das | 18 | 1.89% | 1 | 2.04% |
Andreas Gruenbacher | 11 | 1.16% | 3 | 6.12% |
Chao Yu | 9 | 0.95% | 1 | 2.04% |
Joe Perches | 7 | 0.74% | 1 | 2.04% |
Christoph Lameter | 6 | 0.63% | 1 | 2.04% |
David Howells | 4 | 0.42% | 1 | 2.04% |
Vladimir Davydov | 2 | 0.21% | 1 | 2.04% |
Arun Sharma | 1 | 0.11% | 1 | 2.04% |
Fabio Massimo Di Nitto | 1 | 0.11% | 1 | 2.04% |
Fabian Frederick | 1 | 0.11% | 1 | 2.04% |
Michal Marek | 1 | 0.11% | 1 | 2.04% |
Miklos Szeredi | 1 | 0.11% | 1 | 2.04% |
Total | 951 | 100.00% | 49 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.