/* * Copyright (c) 2002, 2007 Red Hat, Inc. All rights reserved. * * This software may be freely redistributed under the terms of the * GNU General Public License. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Authors: David Woodhouse <[email protected]> * David Howells <[email protected]> * */ #include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/circ_buf.h> #include <linux/sched.h> #include "internal.h" /* * Handle invalidation of an mmap'd file. We invalidate all the PTEs referring * to the pages in this file's pagecache, forcing the kernel to go through * ->fault() or ->page_mkwrite() - at which point we can handle invalidation * more fully. */ void afs_invalidate_mmap_work(struct work_struct *work) { … } static void afs_volume_init_callback(struct afs_volume *volume) { … } /* * Allow the fileserver to request callback state (re-)initialisation. * Unfortunately, UUIDs are not guaranteed unique. */ void afs_init_callback_state(struct afs_server *server) { … } /* * actually break a callback */ void __afs_break_callback(struct afs_vnode *vnode, enum afs_cb_break_reason reason) { … } void afs_break_callback(struct afs_vnode *vnode, enum afs_cb_break_reason reason) { … } /* * Look up a volume by volume ID under RCU conditions. */ static struct afs_volume *afs_lookup_volume_rcu(struct afs_cell *cell, afs_volid_t vid) { … } /* * Allow the fileserver to break callbacks at the volume-level. This is * typically done when, for example, a R/W volume is snapshotted to a R/O * volume (the only way to change an R/O volume). It may also, however, happen * when a volserver takes control of a volume (offlining it, moving it, etc.). * * Every file in that volume will need to be reevaluated. */ static void afs_break_volume_callback(struct afs_server *server, struct afs_volume *volume) __releases(RCU) { … } /* * allow the fileserver to explicitly break one callback * - happens when * - the backing file is changed * - a lock is released */ static void afs_break_one_callback(struct afs_server *server, struct afs_volume *volume, struct afs_fid *fid) { … } static void afs_break_some_callbacks(struct afs_server *server, struct afs_callback_break *cbb, size_t *_count) { … } /* * allow the fileserver to break callback promises */ void afs_break_callbacks(struct afs_server *server, size_t count, struct afs_callback_break *callbacks) { … }