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
fscache
netfs.c
Go to the documentation of this file.
1
/* FS-Cache netfs (client) registration
2
*
3
* Copyright (C) 2008 Red Hat, Inc. All Rights Reserved.
4
* Written by David Howells (
[email protected]
)
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public Licence
8
* as published by the Free Software Foundation; either version
9
* 2 of the Licence, or (at your option) any later version.
10
*/
11
12
#define FSCACHE_DEBUG_LEVEL COOKIE
13
#include <linux/module.h>
14
#include <linux/slab.h>
15
#include "
internal.h
"
16
17
static
LIST_HEAD
(fscache_netfs_list);
18
19
/*
20
* register a network filesystem for caching
21
*/
22
int
__fscache_register_netfs
(
struct
fscache_netfs
*netfs)
23
{
24
struct
fscache_netfs
*
ptr
;
25
int
ret
;
26
27
_enter
(
"{%s}"
, netfs->
name
);
28
29
INIT_LIST_HEAD(&netfs->
link
);
30
31
/* allocate a cookie for the primary index */
32
netfs->
primary_index
=
33
kmem_cache_zalloc(
fscache_cookie_jar
,
GFP_KERNEL
);
34
35
if
(!netfs->
primary_index
) {
36
_leave
(
" = -ENOMEM"
);
37
return
-
ENOMEM
;
38
}
39
40
/* initialise the primary index cookie */
41
atomic_set
(&netfs->
primary_index
->usage, 1);
42
atomic_set
(&netfs->
primary_index
->n_children, 0);
43
44
netfs->
primary_index
->def = &
fscache_fsdef_netfs_def
;
45
netfs->
primary_index
->parent = &
fscache_fsdef_index
;
46
netfs->
primary_index
->netfs_data = netfs;
47
48
atomic_inc
(&netfs->
primary_index
->parent->usage);
49
atomic_inc
(&netfs->
primary_index
->parent->n_children);
50
51
spin_lock_init
(&netfs->
primary_index
->lock);
52
INIT_HLIST_HEAD
(&netfs->
primary_index
->backing_objects);
53
54
/* check the netfs type is not already present */
55
down_write
(&
fscache_addremove_sem
);
56
57
ret = -
EEXIST
;
58
list_for_each_entry
(ptr, &fscache_netfs_list,
link
) {
59
if
(
strcmp
(ptr->
name
, netfs->
name
) == 0)
60
goto
already_registered;
61
}
62
63
list_add(&netfs->
link
, &fscache_netfs_list);
64
ret = 0;
65
66
printk
(
KERN_NOTICE
"FS-Cache: Netfs '%s' registered for caching\n"
,
67
netfs->
name
);
68
69
already_registered:
70
up_write
(&
fscache_addremove_sem
);
71
72
if
(ret < 0) {
73
netfs->
primary_index
->parent =
NULL
;
74
__fscache_cookie_put
(netfs->
primary_index
);
75
netfs->
primary_index
=
NULL
;
76
}
77
78
_leave
(
" = %d"
, ret);
79
return
ret
;
80
}
81
EXPORT_SYMBOL
(
__fscache_register_netfs
);
82
83
/*
84
* unregister a network filesystem from the cache
85
* - all cookies must have been released first
86
*/
87
void
__fscache_unregister_netfs
(
struct
fscache_netfs
*netfs)
88
{
89
_enter
(
"{%s.%u}"
, netfs->
name
, netfs->
version
);
90
91
down_write
(&
fscache_addremove_sem
);
92
93
list_del
(&netfs->
link
);
94
fscache_relinquish_cookie(netfs->
primary_index
, 0);
95
96
up_write
(&
fscache_addremove_sem
);
97
98
printk
(
KERN_NOTICE
"FS-Cache: Netfs '%s' unregistered from caching\n"
,
99
netfs->
name
);
100
101
_leave
(
""
);
102
}
103
EXPORT_SYMBOL
(
__fscache_unregister_netfs
);
Generated on Thu Jan 10 2013 14:47:07 for Linux Kernel by
1.8.2