]>
Commit | Line | Data |
---|---|---|
08e0e7c8 DH |
1 | /* AFS caching stuff |
2 | * | |
9b3f26c9 | 3 | * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved. |
08e0e7c8 DH |
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 License | |
8 | * as published by the Free Software Foundation; either version | |
9 | * 2 of the License, or (at your option) any later version. | |
10 | */ | |
11 | ||
9b3f26c9 DH |
12 | #include <linux/sched.h> |
13 | #include "internal.h" | |
14 | ||
9b3f26c9 DH |
15 | static enum fscache_checkaux afs_vnode_cache_check_aux(void *cookie_netfs_data, |
16 | const void *buffer, | |
ee1235a9 DH |
17 | uint16_t buflen, |
18 | loff_t object_size); | |
9b3f26c9 DH |
19 | |
20 | struct fscache_netfs afs_cache_netfs = { | |
21 | .name = "afs", | |
27a3ee3a | 22 | .version = 2, |
9b3f26c9 DH |
23 | }; |
24 | ||
25 | struct fscache_cookie_def afs_cell_cache_index_def = { | |
26 | .name = "AFS.cell", | |
27 | .type = FSCACHE_COOKIE_TYPE_INDEX, | |
9b3f26c9 DH |
28 | }; |
29 | ||
30 | struct fscache_cookie_def afs_volume_cache_index_def = { | |
31 | .name = "AFS.volume", | |
32 | .type = FSCACHE_COOKIE_TYPE_INDEX, | |
9b3f26c9 DH |
33 | }; |
34 | ||
35 | struct fscache_cookie_def afs_vnode_cache_index_def = { | |
402cb8dd DH |
36 | .name = "AFS.vnode", |
37 | .type = FSCACHE_COOKIE_TYPE_DATAFILE, | |
402cb8dd | 38 | .check_aux = afs_vnode_cache_check_aux, |
08e0e7c8 | 39 | }; |
08e0e7c8 | 40 | |
9b3f26c9 | 41 | /* |
25985edc | 42 | * check that the auxiliary data indicates that the entry is still valid |
08e0e7c8 | 43 | */ |
9b3f26c9 DH |
44 | static enum fscache_checkaux afs_vnode_cache_check_aux(void *cookie_netfs_data, |
45 | const void *buffer, | |
ee1235a9 DH |
46 | uint16_t buflen, |
47 | loff_t object_size) | |
08e0e7c8 | 48 | { |
9b3f26c9 | 49 | struct afs_vnode *vnode = cookie_netfs_data; |
ad6a942a | 50 | struct afs_vnode_cache_aux aux; |
9b3f26c9 DH |
51 | |
52 | _enter("{%x,%x,%llx},%p,%u", | |
53 | vnode->fid.vnode, vnode->fid.unique, vnode->status.data_version, | |
54 | buffer, buflen); | |
55 | ||
ad6a942a DH |
56 | memcpy(&aux, buffer, sizeof(aux)); |
57 | ||
9b3f26c9 | 58 | /* check the size of the data is what we're expecting */ |
ad6a942a DH |
59 | if (buflen != sizeof(aux)) { |
60 | _leave(" = OBSOLETE [len %hx != %zx]", buflen, sizeof(aux)); | |
9b3f26c9 | 61 | return FSCACHE_CHECKAUX_OBSOLETE; |
08e0e7c8 DH |
62 | } |
63 | ||
ad6a942a | 64 | if (vnode->status.data_version != aux.data_version) { |
9b3f26c9 | 65 | _leave(" = OBSOLETE [vers %llx != %llx]", |
ad6a942a | 66 | aux.data_version, vnode->status.data_version); |
9b3f26c9 | 67 | return FSCACHE_CHECKAUX_OBSOLETE; |
08e0e7c8 DH |
68 | } |
69 | ||
70 | _leave(" = SUCCESS"); | |
9b3f26c9 | 71 | return FSCACHE_CHECKAUX_OKAY; |
08e0e7c8 | 72 | } |