Root/
1 | /* FS-Cache netfs (client) registration |
2 | * |
3 | * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved. |
4 | * Written by David Howells (dhowells@redhat.com) |
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); |
104 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9