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