|  | // SPDX-License-Identifier: GPL-2.0-or-later | 
|  | /* AFS caching stuff | 
|  | * | 
|  | * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved. | 
|  | * Written by David Howells (dhowells@redhat.com) | 
|  | */ | 
|  |  | 
|  | #include <linux/sched.h> | 
|  | #include "internal.h" | 
|  |  | 
|  | static enum fscache_checkaux afs_vnode_cache_check_aux(void *cookie_netfs_data, | 
|  | const void *buffer, | 
|  | uint16_t buflen, | 
|  | loff_t object_size); | 
|  |  | 
|  | struct fscache_netfs afs_cache_netfs = { | 
|  | .name			= "afs", | 
|  | .version		= 2, | 
|  | }; | 
|  |  | 
|  | struct fscache_cookie_def afs_cell_cache_index_def = { | 
|  | .name		= "AFS.cell", | 
|  | .type		= FSCACHE_COOKIE_TYPE_INDEX, | 
|  | }; | 
|  |  | 
|  | struct fscache_cookie_def afs_volume_cache_index_def = { | 
|  | .name		= "AFS.volume", | 
|  | .type		= FSCACHE_COOKIE_TYPE_INDEX, | 
|  | }; | 
|  |  | 
|  | struct fscache_cookie_def afs_vnode_cache_index_def = { | 
|  | .name		= "AFS.vnode", | 
|  | .type		= FSCACHE_COOKIE_TYPE_DATAFILE, | 
|  | .check_aux	= afs_vnode_cache_check_aux, | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * check that the auxiliary data indicates that the entry is still valid | 
|  | */ | 
|  | static enum fscache_checkaux afs_vnode_cache_check_aux(void *cookie_netfs_data, | 
|  | const void *buffer, | 
|  | uint16_t buflen, | 
|  | loff_t object_size) | 
|  | { | 
|  | struct afs_vnode *vnode = cookie_netfs_data; | 
|  | struct afs_vnode_cache_aux aux; | 
|  |  | 
|  | _enter("{%llx,%x,%llx},%p,%u", | 
|  | vnode->fid.vnode, vnode->fid.unique, vnode->status.data_version, | 
|  | buffer, buflen); | 
|  |  | 
|  | memcpy(&aux, buffer, sizeof(aux)); | 
|  |  | 
|  | /* check the size of the data is what we're expecting */ | 
|  | if (buflen != sizeof(aux)) { | 
|  | _leave(" = OBSOLETE [len %hx != %zx]", buflen, sizeof(aux)); | 
|  | return FSCACHE_CHECKAUX_OBSOLETE; | 
|  | } | 
|  |  | 
|  | if (vnode->status.data_version != aux.data_version) { | 
|  | _leave(" = OBSOLETE [vers %llx != %llx]", | 
|  | aux.data_version, vnode->status.data_version); | 
|  | return FSCACHE_CHECKAUX_OBSOLETE; | 
|  | } | 
|  |  | 
|  | _leave(" = SUCCESS"); | 
|  | return FSCACHE_CHECKAUX_OKAY; | 
|  | } |