/* Filesystem index definition * * Copyright (C) 2004-2007 Red Hat, Inc. All Rights Reserved. * Written by David Howells (dhowells@redhat.com) * * 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. */ #define FSCACHE_DEBUG_LEVEL CACHE #include #include "internal.h" static uint16_t fscache_fsdef_netfs_get_key(const void *cookie_netfs_data, void *buffer, uint16_t bufmax); static uint16_t fscache_fsdef_netfs_get_aux(const void *cookie_netfs_data, void *buffer, uint16_t bufmax); static enum fscache_checkaux fscache_fsdef_netfs_check_aux(void *cookie_netfs_data, const void *data, uint16_t datalen); /* * The root index is owned by FS-Cache itself. * * When a netfs requests caching facilities, FS-Cache will, if one doesn't * already exist, create an entry in the root index with the key being the name * of the netfs ("AFS" for example), and the auxiliary data holding the index * structure version supplied by the netfs: * * FSDEF * | * +-----------+ * | | * NFS AFS * [v=1] [v=1] * * If an entry with the appropriate name does already exist, the version is * compared. If the version is different, the entire subtree from that entry * will be discarded and a new entry created. * * The new entry will be an index, and a cookie referring to it will be passed * to the netfs. This is then the root handle by which the netfs accesses the * cache. It can create whatever objects it likes in that index, including * further indices. */ static struct fscache_cookie_def fscache_fsdef_index_def = { .name = ".FS-Cache", .type = FSCACHE_COOKIE_TYPE_INDEX, }; struct fscache_cookie fscache_fsdef_index = { .usage = ATOMIC_INIT(1), .n_active = ATOMIC_INIT(1), .lock = __SPIN_LOCK_UNLOCKED(fscache_fsdef_index.lock), .backing_objects = HLIST_HEAD_INIT, .def = &fscache_fsdef_index_def, .flags = 1 << FSCACHE_COOKIE_ENABLED, }; EXPORT_SYMBOL(fscache_fsdef_index); /* * Definition of an entry in the root index. Each entry is an index, keyed to * a specific netfs and only applicable to a particular version of the index * structure used by that netfs. */ struct fscache_cookie_def fscache_fsdef_netfs_def = { .name = "FSDEF.netfs", .type = FSCACHE_COOKIE_TYPE_INDEX, .get_key = fscache_fsdef_netfs_get_key, .get_aux = fscache_fsdef_netfs_get_aux, .check_aux = fscache_fsdef_netfs_check_aux, }; /* * get the key data for an FSDEF index record - this is the name of the netfs * for which this entry is created */ static uint16_t fscache_fsdef_netfs_get_key(const void *cookie_netfs_data, void *buffer, uint16_t bufmax) { const struct fscache_netfs *netfs = cookie_netfs_data; unsigned klen; _enter("{%s.%u},", netfs->name, netfs->version); klen = strlen(netfs->name); if (klen > bufmax) return 0; memcpy(buffer, netfs->name, klen); return klen; } /* * get the auxiliary data for an FSDEF index record - this is the index * structure version number of the netfs for which this version is created */ static uint16_t fscache_fsdef_netfs_get_aux(const void *cookie_netfs_data, void *buffer, uint16_t bufmax) { const struct fscache_netfs *netfs = cookie_netfs_data; unsigned dlen; _enter("{%s.%u},", netfs->name, netfs->version); dlen = sizeof(uint32_t); if (dlen > bufmax) return 0; memcpy(buffer, &netfs->version, dlen); return dlen; } /* * check that the index structure version number stored in the auxiliary data * matches the one the netfs gave us */ static enum fscache_checkaux fscache_fsdef_netfs_check_aux( void *cookie_netfs_data, const void *data, uint16_t datalen) { struct fscache_netfs *netfs = cookie_netfs_data; uint32_t version; _enter("{%s},,%hu", netfs->name, datalen); if (datalen != sizeof(version)) { _leave(" = OBSOLETE [dl=%d v=%zu]", datalen, sizeof(version)); return FSCACHE_CHECKAUX_OBSOLETE; } memcpy(&version, data, sizeof(version)); if (version != netfs->version) { _leave(" = OBSOLETE [ver=%x net=%x]", version, netfs->version); return FSCACHE_CHECKAUX_OBSOLETE; } _leave(" = OKAY"); return FSCACHE_CHECKAUX_OKAY; } info'> authorLinus Torvalds <torvalds@linux-foundation.org>2017-01-23 13:10:50 -0800 committerLinus Torvalds <torvalds@linux-foundation.org>2017-01-23 13:10:50 -0800 commit3258943ddb90157a5b220656712394bd91bd47f1 (patch) tree174314734fe66f20b9b40475130977e7b2e5cf19 /include/uapi parent7a308bb3016f57e5be11a677d15b821536419d36 (diff)parent932790109f62aa52bdb4bb62aa66653c0b51bc75 (diff)
Merge tag 'drm-fixes-for-v4.10-rc6' of git://people.freedesktop.org/~airlied/linux
Pull drm fixes from Dave Airlie: "drm fixes across the board. Okay holidays and LCA kinda caught up with me, I thought I'd get some of this dequeued last week, but Hobart was sunny and warm and not all gloomy and rainy as usual. This is a bit large, but not too much considering it's two weeks stuff from AMD and Intel. core: - one locking fix that helps with dynamic suspend/resume races i915: - mostly GVT updates, GVT was a recent introduction so fixes for it shouldn't cause any notable side effects. amdgpu: - a bunch of fixes for GPUs with a different memory controller design that need different firmware. exynos: - decon regression fixes msm: - two regression fixes etnaviv: - a workaround for an mmu bug that needs a lot more work. virtio: - sparse fix, and a maintainers update" * tag 'drm-fixes-for-v4.10-rc6' of git://people.freedesktop.org/~airlied/linux: (56 commits) drm/exynos/decon5433: set STANDALONE_UPDATE_F on output enablement drm/exynos/decon5433: fix CMU programming drm/exynos/decon5433: do not disable video after reset drm/i915: Ignore bogus plane coordinates on SKL when the plane is not visible drm/i915: Remove WaDisableLSQCROPERFforOCL KBL workaround. drm/amdgpu: add support for new hainan variants drm/radeon: add support for new hainan variants drm/amdgpu: change clock gating mode for uvd_v4. drm/amdgpu: fix program vce instance logic error. drm/amdgpu: fix bug set incorrect value to vce register Revert "drm/amdgpu: Only update the CUR_SIZE register when necessary" drm/msm: fix potential null ptr issue in non-iommu case drm/msm/mdp5: rip out plane->pending tracking drm/exynos/decon5433: set STANDALONE_UPDATE_F also if planes are disabled drm/exynos/decon5433: update shadow registers iff there are active windows drm/i915/gvt: rewrite gt reset handler using new function intel_gvt_reset_vgpu_locked drm/i915/gvt: fix vGPU instance reuse issues by vGPU reset function drm/i915/gvt: introduce intel_vgpu_reset_mmio() to reset mmio space drm/i915/gvt: move mmio init/clean function to mmio.c drm/i915/gvt: introduce intel_vgpu_reset_cfg_space to reset configuration space ...
Diffstat (limited to 'include/uapi')