Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
cachefiles
main.c
Go to the documentation of this file.
1
/* Network filesystem caching backend to use cache files on a premounted
2
* filesystem
3
*
4
* Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
5
* Written by David Howells (
[email protected]
)
6
*
7
* This program is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU General Public Licence
9
* as published by the Free Software Foundation; either version
10
* 2 of the Licence, or (at your option) any later version.
11
*/
12
13
#include <linux/module.h>
14
#include <
linux/init.h
>
15
#include <linux/sched.h>
16
#include <
linux/completion.h
>
17
#include <linux/slab.h>
18
#include <linux/fs.h>
19
#include <
linux/file.h
>
20
#include <
linux/namei.h
>
21
#include <
linux/mount.h
>
22
#include <
linux/statfs.h
>
23
#include <linux/sysctl.h>
24
#include <
linux/miscdevice.h
>
25
#include "
internal.h
"
26
27
unsigned
cachefiles_debug
;
28
module_param_named
(
debug
,
cachefiles_debug
,
uint
,
S_IWUSR
|
S_IRUGO
);
29
MODULE_PARM_DESC
(
cachefiles_debug
,
"CacheFiles debugging mask"
);
30
31
MODULE_DESCRIPTION
(
"Mounted-filesystem based cache"
);
32
MODULE_AUTHOR
(
"Red Hat, Inc."
);
33
MODULE_LICENSE
(
"GPL"
);
34
35
struct
kmem_cache
*
cachefiles_object_jar
;
36
37
static
struct
miscdevice
cachefiles_dev = {
38
.minor =
MISC_DYNAMIC_MINOR
,
39
.name =
"cachefiles"
,
40
.fops = &
cachefiles_daemon_fops
,
41
};
42
43
static
void
cachefiles_object_init_once(
void
*_object)
44
{
45
struct
cachefiles_object
*
object
= _object;
46
47
memset
(
object
, 0,
sizeof
(*
object
));
48
spin_lock_init
(&object->
work_lock
);
49
}
50
51
/*
52
* initialise the fs caching module
53
*/
54
static
int
__init
cachefiles_init(
void
)
55
{
56
int
ret
;
57
58
ret =
misc_register
(&cachefiles_dev);
59
if
(ret < 0)
60
goto
error_dev;
61
62
/* create an object jar */
63
ret = -
ENOMEM
;
64
cachefiles_object_jar =
65
kmem_cache_create
(
"cachefiles_object_jar"
,
66
sizeof
(
struct
cachefiles_object
),
67
0,
68
SLAB_HWCACHE_ALIGN
,
69
cachefiles_object_init_once);
70
if
(!cachefiles_object_jar) {
71
printk
(
KERN_NOTICE
72
"CacheFiles: Failed to allocate an object jar\n"
);
73
goto
error_object_jar;
74
}
75
76
ret =
cachefiles_proc_init
();
77
if
(ret < 0)
78
goto
error_proc;
79
80
printk
(
KERN_INFO
"CacheFiles: Loaded\n"
);
81
return
0;
82
83
error_proc:
84
kmem_cache_destroy
(cachefiles_object_jar);
85
error_object_jar:
86
misc_deregister
(&cachefiles_dev);
87
error_dev:
88
kerror
(
"failed to register: %d"
, ret);
89
return
ret
;
90
}
91
92
fs_initcall
(cachefiles_init);
93
94
/*
95
* clean up on module removal
96
*/
97
static
void
__exit
cachefiles_exit(
void
)
98
{
99
printk
(
KERN_INFO
"CacheFiles: Unloading\n"
);
100
101
cachefiles_proc_cleanup
();
102
kmem_cache_destroy
(cachefiles_object_jar);
103
misc_deregister
(&cachefiles_dev);
104
}
105
106
module_exit
(cachefiles_exit);
Generated on Thu Jan 10 2013 12:48:50 for Linux Kernel by
1.8.2