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