/* $NetBSD: zfs_znode.h,v 1.1 2022/06/19 11:31:19 simonb Exp $ */ /* * XXX From: external/cddl/osnet/dist/uts/common/fs/zfs/sys/zfs_znode.h * * Grotty hack to define a "simple" znode_t so we don't need to * try to include the real zfs_znode.h which isn't easily possible * from userland due to all sorts of kernel only defines and structs * being required. */ /* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2015 by Delphix. All rights reserved. * Copyright (c) 2014 Integros [integros.com] */ #include #define VTOZ(VP) ((znode_t *)(VP)->v_data) #define ulong_t unsigned long #define uint_t unsigned int #define zfs_acl_t void struct avl_node; typedef struct sa_handle sa_handle_t; typedef int boolean_t; typedef struct avl_tree { struct avl_node *avl_root; int (*avl_compar)(const void *, const void *); size_t avl_offset; ulong_t avl_numnodes; size_t avl_size; } avl_tree_t; typedef struct list_node { struct list_node *list_next; struct list_node *list_prev; } list_node_t; typedef struct znode { #ifdef __NetBSD__ struct genfs_node z_gnode; #endif struct zfsvfs *z_zfsvfs; vnode_t *z_vnode; uint64_t z_id; /* object ID for this znode */ #ifdef illumos kmutex_t z_lock; /* znode modification lock */ krwlock_t z_parent_lock; /* parent lock for directories */ krwlock_t z_name_lock; /* "master" lock for dirent locks */ zfs_dirlock_t *z_dirlocks; /* directory entry lock list */ #endif kmutex_t z_range_lock; /* protects changes to z_range_avl */ avl_tree_t z_range_avl; /* avl tree of file range locks */ uint8_t z_unlinked; /* file has been unlinked */ uint8_t z_atime_dirty; /* atime needs to be synced */ uint8_t z_zn_prefetch; /* Prefetch znodes? */ uint8_t z_moved; /* Has this znode been moved? */ uint_t z_blksz; /* block size in bytes */ uint_t z_seq; /* modification sequence number */ uint64_t z_mapcnt; /* number of pages mapped to file */ uint64_t z_gen; /* generation (cached) */ uint64_t z_size; /* file size (cached) */ uint64_t z_atime[2]; /* atime (cached) */ uint64_t z_links; /* file links (cached) */ uint64_t z_pflags; /* pflags (cached) */ uint64_t z_uid; /* uid fuid (cached) */ uint64_t z_gid; /* gid fuid (cached) */ mode_t z_mode; /* mode (cached) */ uint32_t z_sync_cnt; /* synchronous open count */ kmutex_t z_acl_lock; /* acl data lock */ zfs_acl_t *z_acl_cached; /* cached acl */ list_node_t z_link_node; /* all znodes in fs link */ sa_handle_t *z_sa_hdl; /* handle to sa data */ boolean_t z_is_sa; /* are we native sa? */ #ifdef __NetBSD__ struct lockf *z_lockf; /* head of byte-level lock list */ #endif } znode_t;