root/fs/cachefiles/main.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. cachefiles_object_init_once
  2. cachefiles_init
  3. cachefiles_exit

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /* Network filesystem caching backend to use cache files on a premounted
   3  * filesystem
   4  *
   5  * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
   6  * Written by David Howells (dhowells@redhat.com)
   7  */
   8 
   9 #include <linux/module.h>
  10 #include <linux/init.h>
  11 #include <linux/sched.h>
  12 #include <linux/completion.h>
  13 #include <linux/slab.h>
  14 #include <linux/fs.h>
  15 #include <linux/file.h>
  16 #include <linux/namei.h>
  17 #include <linux/mount.h>
  18 #include <linux/statfs.h>
  19 #include <linux/sysctl.h>
  20 #include <linux/miscdevice.h>
  21 #define CREATE_TRACE_POINTS
  22 #include "internal.h"
  23 
  24 unsigned cachefiles_debug;
  25 module_param_named(debug, cachefiles_debug, uint, S_IWUSR | S_IRUGO);
  26 MODULE_PARM_DESC(cachefiles_debug, "CacheFiles debugging mask");
  27 
  28 MODULE_DESCRIPTION("Mounted-filesystem based cache");
  29 MODULE_AUTHOR("Red Hat, Inc.");
  30 MODULE_LICENSE("GPL");
  31 
  32 struct kmem_cache *cachefiles_object_jar;
  33 
  34 static struct miscdevice cachefiles_dev = {
  35         .minor  = MISC_DYNAMIC_MINOR,
  36         .name   = "cachefiles",
  37         .fops   = &cachefiles_daemon_fops,
  38 };
  39 
  40 static void cachefiles_object_init_once(void *_object)
  41 {
  42         struct cachefiles_object *object = _object;
  43 
  44         memset(object, 0, sizeof(*object));
  45         spin_lock_init(&object->work_lock);
  46 }
  47 
  48 /*
  49  * initialise the fs caching module
  50  */
  51 static int __init cachefiles_init(void)
  52 {
  53         int ret;
  54 
  55         ret = misc_register(&cachefiles_dev);
  56         if (ret < 0)
  57                 goto error_dev;
  58 
  59         /* create an object jar */
  60         ret = -ENOMEM;
  61         cachefiles_object_jar =
  62                 kmem_cache_create("cachefiles_object_jar",
  63                                   sizeof(struct cachefiles_object),
  64                                   0,
  65                                   SLAB_HWCACHE_ALIGN,
  66                                   cachefiles_object_init_once);
  67         if (!cachefiles_object_jar) {
  68                 pr_notice("Failed to allocate an object jar\n");
  69                 goto error_object_jar;
  70         }
  71 
  72         ret = cachefiles_proc_init();
  73         if (ret < 0)
  74                 goto error_proc;
  75 
  76         pr_info("Loaded\n");
  77         return 0;
  78 
  79 error_proc:
  80         kmem_cache_destroy(cachefiles_object_jar);
  81 error_object_jar:
  82         misc_deregister(&cachefiles_dev);
  83 error_dev:
  84         pr_err("failed to register: %d\n", ret);
  85         return ret;
  86 }
  87 
  88 fs_initcall(cachefiles_init);
  89 
  90 /*
  91  * clean up on module removal
  92  */
  93 static void __exit cachefiles_exit(void)
  94 {
  95         pr_info("Unloading\n");
  96 
  97         cachefiles_proc_cleanup();
  98         kmem_cache_destroy(cachefiles_object_jar);
  99         misc_deregister(&cachefiles_dev);
 100 }
 101 
 102 module_exit(cachefiles_exit);

/* [<][>][^][v][top][bottom][index][help] */