2N/A * The contents of this file are subject to the terms of the 2N/A * Common Development and Distribution License (the "License"). 2N/A * You may not use this file except in compliance with the License. 2N/A * See the License for the specific language governing permissions 2N/A * and limitations under the License. 2N/A * When distributing Covered Code, include this CDDL HEADER in each 2N/A * If applicable, add the following below this CDDL HEADER, with the 2N/A * fields enclosed by brackets "[]" replaced with your own identifying 2N/A * information: Portions Copyright [yyyy] [name of copyright owner] 2N/A * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 2N/A * Use is subject to license terms. 2N/A * Copyright 2013 Nexenta Systems, Inc. All rights reserved. 2N/A * fem - file event monitoring 2N/A * File Event Monitoring is a formalized mechanism to monitor events on a 2N/A * vnode or vfs by intercepting the vnode/vfs operations. The framework enables 2N/A * the consumer to request event notifications for specified files and 2N/A * directories. The consumers, which intercept the events, are responsible for 2N/A * delivering the event to the next interceptor or the terminal destination. 2N/A * vnode -> fem_head. 2N/A * There can only be one fem_head for a vnode. 2N/A * Once attached, the fem_head persists until explicitly detached 2N/A * or the vnode expires. 2N/A * fem_head -> fem_list. 2N/A * There can be many lists for a head, as each reconfiguration of 2N/A * the list causes a new one to be created and initialized from the 2N/A * old one. For this reason, modules cannot assume that they can 2N/A * reach thier list by vnode->fem_head->fem_list->list[n] == mod; 2N/A * fem_arg -> vnode, &vnode. 2N/A * This relationship is established at the head of the call (ie. in 2N/A * femhead_open()) where the fem_arg is allocated. Intermediate nodes 2N/A * have direct access to this. 2N/A * fem_arg -> fem_node 2N/A * This relationship is established at the head of the call (ie. in 2N/A * femhead_open()) where the fem_arg is allocated. The fem_arg is 2N/A * updated as intermediate nodes are invoked, however not as they 2N/A * return. For this reason, nodes which are interested in maintaining 2N/A * context following a "next" should store a copy of the fem_available 2N/A * field before invoking the 'next'. 2N/A * The following enumerations specify the conditions 2N/A * should be installed. These are used when calling 2N/A * fem_install() and fsem_install() 2N/A FORCE = 0,
/* Force the installation of this monitor */ 2N/A OPUNIQ =
1,
/* Install if operation set is unique */ 2N/A void *
anon;
/* anonymous, for updates */ 2N/A * FEM_OPS defines all the FEM operations. It is used to define FEM_OPS;
/* Signatures of all FEM operations (femops) */ * FSEM_OPS defines all the FSEM operations. It is used to define * the fsem structure (below) and the fs_func_p union (vfs_opreg.h). FSEM_OPS;
/* Signatures of all FSEM operations (fsemops) */ extern void fem_init(
void);
/* called once, by startup */