Something went wrong. Try again.
Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
2.2 kB · 93 lines
C
at master
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394// SPDX-License-Identifier: GPL-2.0-or-later/* Network filesystem caching backend to use cache files on a premounted * filesystem * * Copyright (C) 2021 Red Hat, Inc. All Rights Reserved. * Written by David Howells (dhowells@redhat.com) */
#include <linux/module.h>#include <linux/init.h>#include <linux/sched.h>#include <linux/completion.h>#include <linux/slab.h>#include <linux/fs.h>#include <linux/file.h>#include <linux/namei.h>#include <linux/mount.h>#include <linux/statfs.h>#include <linux/sysctl.h>#include <linux/miscdevice.h>#include <linux/netfs.h>#include <trace/events/netfs.h>#define CREATE_TRACE_POINTS#include "internal.h"
unsigned cachefiles_debug;module_param_named(debug, cachefiles_debug, uint, S_IWUSR | S_IRUGO);MODULE_PARM_DESC(cachefiles_debug, "CacheFiles debugging mask");
MODULE_DESCRIPTION("Mounted-filesystem based cache");MODULE_AUTHOR("Red Hat, Inc.");MODULE_LICENSE("GPL");
struct kmem_cache *cachefiles_object_jar;
static struct miscdevice cachefiles_dev = { .minor = MISC_DYNAMIC_MINOR, .name = "cachefiles", .fops = &cachefiles_daemon_fops,};
/* * initialise the fs caching module */static int __init cachefiles_init(void){ int ret;
ret = cachefiles_register_error_injection(); if (ret < 0) goto error_einj; ret = misc_register(&cachefiles_dev); if (ret < 0) goto error_dev;
/* create an object jar */ ret = -ENOMEM; cachefiles_object_jar = kmem_cache_create("cachefiles_object_jar", sizeof(struct cachefiles_object), 0, SLAB_HWCACHE_ALIGN, NULL); if (!cachefiles_object_jar) { pr_notice("Failed to allocate an object jar\n"); goto error_object_jar; }
pr_info("Loaded\n"); return 0;
error_object_jar: misc_deregister(&cachefiles_dev);error_dev: cachefiles_unregister_error_injection();error_einj: pr_err("failed to register: %d\n", ret); return ret;}
fs_initcall(cachefiles_init);
/* * clean up on module removal */static void __exit cachefiles_exit(void){ pr_info("Unloading\n");
kmem_cache_destroy(cachefiles_object_jar); misc_deregister(&cachefiles_dev); cachefiles_unregister_error_injection();}
module_exit(cachefiles_exit);