mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 06:04:23 +08:00
2874c5fd28
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 3029 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190527070032.746973796@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
69 lines
1.8 KiB
C
69 lines
1.8 KiB
C
// 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;
|
|
}
|