cregit-Linux how code gets into the kernel

Release 4.10 fs/nfs_common/grace.c

Directory: fs/nfs_common
/*
 * Common code for control of lockd and nfsv4 grace periods.
 *
 * Transplanted from lockd code
 */

#include <linux/module.h>
#include <net/net_namespace.h>
#include <net/netns/generic.h>
#include <linux/fs.h>


static unsigned int grace_net_id;
static DEFINE_SPINLOCK(grace_lock);

/**
 * locks_start_grace
 * @net: net namespace that this lock manager belongs to
 * @lm: who this grace period is for
 *
 * A grace period is a period during which locks should not be given
 * out.  Currently grace periods are only enforced by the two lock
 * managers (lockd and nfsd), using the locks_in_grace() function to
 * check when they are in a grace period.
 *
 * This function is called to start a grace period.
 */

void locks_start_grace(struct net *net, struct lock_manager *lm) { struct list_head *grace_list = net_generic(net, grace_net_id); spin_lock(&grace_lock); list_add(&lm->list, grace_list); spin_unlock(&grace_lock); }

Contributors

PersonTokensPropCommitsCommitProp
jeff laytonjeff layton49100.00%1100.00%
Total49100.00%1100.00%

EXPORT_SYMBOL_GPL(locks_start_grace); /** * locks_end_grace * @net: net namespace that this lock manager belongs to * @lm: who this grace period is for * * Call this function to state that the given lock manager is ready to * resume regular locking. The grace period will not end until all lock * managers that called locks_start_grace() also call locks_end_grace(). * Note that callers count on it being safe to call this more than once, * and the second call should be a no-op. */
void locks_end_grace(struct lock_manager *lm) { spin_lock(&grace_lock); list_del_init(&lm->list); spin_unlock(&grace_lock); }

Contributors

PersonTokensPropCommitsCommitProp
jeff laytonjeff layton30100.00%1100.00%
Total30100.00%1100.00%

EXPORT_SYMBOL_GPL(locks_end_grace); /** * locks_in_grace * * Lock managers call this function to determine when it is OK for them * to answer ordinary lock requests, and when they should accept only * lock reclaims. */
int __state_in_grace(struct net *net, bool open) { struct list_head *grace_list = net_generic(net, grace_net_id); struct lock_manager *lm; if (!open) return !list_empty(grace_list); list_for_each_entry(lm, grace_list, list) { if (lm->block_opens) return true; } return false; }

Contributors

PersonTokensPropCommitsCommitProp
j. bruce fieldsj. bruce fields3757.81%150.00%
jeff laytonjeff layton2742.19%150.00%
Total64100.00%2100.00%


int locks_in_grace(struct net *net) { return __state_in_grace(net, 0); }

Contributors

PersonTokensPropCommitsCommitProp
j. bruce fieldsj. bruce fields1794.44%150.00%
jeff laytonjeff layton15.56%150.00%
Total18100.00%2100.00%

EXPORT_SYMBOL_GPL(locks_in_grace);
int opens_in_grace(struct net *net) { return __state_in_grace(net, 1); }

Contributors

PersonTokensPropCommitsCommitProp
j. bruce fieldsj. bruce fields18100.00%1100.00%
Total18100.00%1100.00%

EXPORT_SYMBOL_GPL(opens_in_grace);
static int __net_init grace_init_net(struct net *net) { struct list_head *grace_list = net_generic(net, grace_net_id); INIT_LIST_HEAD(grace_list); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
jeff laytonjeff layton32100.00%1100.00%
Total32100.00%1100.00%


static void __net_exit grace_exit_net(struct net *net) { struct list_head *grace_list = net_generic(net, grace_net_id); BUG_ON(!list_empty(grace_list)); }

Contributors

PersonTokensPropCommitsCommitProp
jeff laytonjeff layton33100.00%1100.00%
Total33100.00%1100.00%

static struct pernet_operations grace_net_ops = { .init = grace_init_net, .exit = grace_exit_net, .id = &grace_net_id, .size = sizeof(struct list_head), };
static int __init init_grace(void) { return register_pernet_subsys(&grace_net_ops); }

Contributors

PersonTokensPropCommitsCommitProp
jeff laytonjeff layton16100.00%1100.00%
Total16100.00%1100.00%


static void __exit exit_grace(void) { unregister_pernet_subsys(&grace_net_ops); }

Contributors

PersonTokensPropCommitsCommitProp
jeff laytonjeff layton15100.00%1100.00%
Total15100.00%1100.00%

MODULE_AUTHOR("Jeff Layton <jlayton@primarydata.com>"); MODULE_LICENSE("GPL"); module_init(init_grace) module_exit(exit_grace)

Overall Contributors

PersonTokensPropCommitsCommitProp
jeff laytonjeff layton29479.03%133.33%
j. bruce fieldsj. bruce fields7720.70%133.33%
alexey dobriyanalexey dobriyan10.27%133.33%
Total372100.00%3100.00%
Directory: fs/nfs_common
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.