FreeBSD ZFS
The Zettabyte File System
Data Structures | Defines | Typedefs | Functions | Variables

sys/zfs_znode.h File Reference

#include <sys/list.h>
#include <sys/dmu.h>
#include <sys/sa.h>
#include <sys/zfs_vfsops.h>
#include <sys/rrwlock.h>
#include <sys/zfs_sa.h>
#include <sys/zfs_stat.h>
#include <sys/zfs_acl.h>
#include <sys/zil.h>
#include <sys/zfs_vfsops.h>
#include <sys/zfs_sa.h>
Include dependency graph for zfs_znode.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  zfs_dirlock
 Directory Entry Locks. More...
struct  znode

Defines

#define ZFS_ATTR_SET(zp, attr, value, pflags, tx)
#define SA_ZPL_ATIME(z)   z->z_attr_table[ZPL_ATIME]
#define SA_ZPL_MTIME(z)   z->z_attr_table[ZPL_MTIME]
#define SA_ZPL_CTIME(z)   z->z_attr_table[ZPL_CTIME]
#define SA_ZPL_CRTIME(z)   z->z_attr_table[ZPL_CRTIME]
#define SA_ZPL_GEN(z)   z->z_attr_table[ZPL_GEN]
#define SA_ZPL_DACL_ACES(z)   z->z_attr_table[ZPL_DACL_ACES]
#define SA_ZPL_XATTR(z)   z->z_attr_table[ZPL_XATTR]
#define SA_ZPL_SYMLINK(z)   z->z_attr_table[ZPL_SYMLINK]
#define SA_ZPL_RDEV(z)   z->z_attr_table[ZPL_RDEV]
#define SA_ZPL_SCANSTAMP(z)   z->z_attr_table[ZPL_SCANSTAMP]
#define SA_ZPL_UID(z)   z->z_attr_table[ZPL_UID]
#define SA_ZPL_GID(z)   z->z_attr_table[ZPL_GID]
#define SA_ZPL_PARENT(z)   z->z_attr_table[ZPL_PARENT]
#define SA_ZPL_LINKS(z)   z->z_attr_table[ZPL_LINKS]
#define SA_ZPL_MODE(z)   z->z_attr_table[ZPL_MODE]
#define SA_ZPL_DACL_COUNT(z)   z->z_attr_table[ZPL_DACL_COUNT]
#define SA_ZPL_FLAGS(z)   z->z_attr_table[ZPL_FLAGS]
#define SA_ZPL_SIZE(z)   z->z_attr_table[ZPL_SIZE]
#define SA_ZPL_ZNODE_ACL(z)   z->z_attr_table[ZPL_ZNODE_ACL]
#define SA_ZPL_PAD(z)   z->z_attr_table[ZPL_PAD]
#define IS_EPHEMERAL(x)   (x > MAXUID)
 Is ID ephemeral?
#define USE_FUIDS(version, os)
 Should we use FUIDs?
#define USE_SA(version, os)
#define MASTER_NODE_OBJ   1
#define ZFS_MAX_BLOCKSIZE   (SPA_MAXBLOCKSIZE)
#define ZFS_MAXNAMELEN   (MAXNAMELEN - 1)
 Path component length.
#define IFTODT(mode)   (((mode) & S_IFMT) >> 12)
 Convert mode bits (zp_mode) to BSD-style DT_* values for storing in the directory entries.
#define ZTOV(ZP)   ((ZP)->z_vnode)
#define VTOZ(VP)   ((znode_t *)(VP)->v_data)
#define ZFS_ENTER(zfsvfs)
 Called on entry to each ZFS vnode and vfs operation.
#define ZFS_ENTER_NOERROR(zfsvfs)   rrw_enter(&(zfsvfs)->z_teardown_lock, RW_READER, FTAG)
 Called when we can't return EIO.
#define ZFS_EXIT(zfsvfs)   rrw_exit(&(zfsvfs)->z_teardown_lock, FTAG)
 Must be called before exitting the vop.
#define ZFS_VERIFY_ZP(zp)
 Verifies the znode is valid.
#define ZFS_TIME_ENCODE(tp, stmp)
 Encode ZFS stored time value from a struct timespec.
#define ZFS_TIME_DECODE(tp, stmp)
 Decode ZFS stored time value to a struct timespec.
#define ZFS_ACCESSTIME_STAMP(zfsvfs, zp)
#define ZFS_NO_OBJECT   0
 no object id
Additional file level attributes

Stored in the upper half of zp_flags

#define ZFS_READONLY   0x0000000100000000
#define ZFS_HIDDEN   0x0000000200000000
#define ZFS_SYSTEM   0x0000000400000000
#define ZFS_ARCHIVE   0x0000000800000000
#define ZFS_IMMUTABLE   0x0000001000000000
#define ZFS_NOUNLINK   0x0000002000000000
#define ZFS_APPENDONLY   0x0000004000000000
#define ZFS_NODUMP   0x0000008000000000
#define ZFS_OPAQUE   0x0000010000000000
#define ZFS_AV_QUARANTINED   0x0000020000000000
#define ZFS_AV_MODIFIED   0x0000040000000000
#define ZFS_REPARSE   0x0000080000000000
#define ZFS_OFFLINE   0x0000100000000000
#define ZFS_SPARSE   0x0000200000000000
Special zfs pflags
#define ZFS_XATTR   0x1
 is an extended attribute
#define ZFS_INHERIT_ACE   0x2
 ace has inheritable ACEs
#define ZFS_ACL_TRIVIAL   0x4
 files ACL is trivial
#define ZFS_ACL_OBJ_ACE   0x8
 ACL has CMPLX Object ACE.
#define ZFS_ACL_PROTECTED   0x10
 ACL protected.
#define ZFS_ACL_DEFAULTED   0x20
 ACL should be defaulted.
#define ZFS_ACL_AUTO_INHERIT   0x40
 ACL should be inherited.
#define ZFS_BONUS_SCANSTAMP   0x80
 Scanstamp in bonus area.
#define ZFS_NO_EXECS_DENIED   0x100
 exec was given to everyone
Special attributes for master node.

"userquota@" and "groupquota@" are also valid (from zfs_userquota_prop_prefixes[]).

#define ZFS_FSID   "FSID"
#define ZFS_UNLINKED_SET   "DELETE_QUEUE"
#define ZFS_ROOT_OBJ   "ROOT"
#define ZPL_VERSION_STR   "VERSION"
#define ZFS_FUID_TABLES   "FUID"
#define ZFS_SHARES_DIR   "SHARES"
#define ZFS_SA_ATTRS   "SA_ATTRS"
Directory Entries

The directory entry has the type (currently unused on Solaris) in the top 4 bits, and the object number in the low 48 bits.

The "middle" 12 bits are unused. /{

#define ZFS_DIRENT_TYPE(de)   BF64_GET(de, 60, 4)
#define ZFS_DIRENT_OBJ(de)   BF64_GET(de, 0, 48)
Macros for dealing with dmu_buf_hold
#define ZFS_OBJ_HASH(obj_num)   ((obj_num) & (ZFS_OBJ_MTX_SZ - 1))
#define ZFS_OBJ_MUTEX(zfsvfs, obj_num)   (&(zfsvfs)->z_hold_mtx[ZFS_OBJ_HASH(obj_num)])
#define ZFS_OBJ_HOLD_ENTER(zfsvfs, obj_num)   mutex_enter(ZFS_OBJ_MUTEX((zfsvfs), (obj_num)))
#define ZFS_OBJ_HOLD_TRYENTER(zfsvfs, obj_num)   mutex_tryenter(ZFS_OBJ_MUTEX((zfsvfs), (obj_num)))
#define ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num)   mutex_exit(ZFS_OBJ_MUTEX((zfsvfs), (obj_num)))
Timestamp defines
#define ACCESSED   (AT_ATIME)
#define STATE_CHANGED   (AT_CTIME)
#define CONTENT_MODIFIED   (AT_MTIME | AT_CTIME)

Typedefs

typedef struct zfs_dirlock zfs_dirlock_t
 Directory Entry Locks.
typedef struct znode znode_t

Functions

int zfs_init_fs (zfsvfs_t *, znode_t **)
void zfs_set_dataprop (objset_t *)
void zfs_create_fs (objset_t *os, cred_t *cr, nvlist_t *, dmu_tx_t *tx)
void zfs_tstamp_update_setup (znode_t *, uint_t, uint64_t[2], uint64_t[2], boolean_t)
void zfs_grow_blocksize (znode_t *, uint64_t, dmu_tx_t *)
 Grow the block size for a file.
int zfs_freesp (znode_t *, uint64_t, uint64_t, int, boolean_t)
 Free space in a file.
void zfs_znode_init (void)
void zfs_znode_fini (void)
int zfs_zget (zfsvfs_t *, uint64_t, znode_t **)
int zfs_rezget (znode_t *)
void zfs_zinactive (znode_t *)
void zfs_znode_delete (znode_t *, dmu_tx_t *)
void zfs_znode_free (znode_t *)
void zfs_remove_op_tables ()
int zfs_create_op_tables ()
dev_t zfs_cmpldev (uint64_t)
 Special cmpldev for ZFS private use.
int zfs_get_zplprop (objset_t *os, zfs_prop_t prop, uint64_t *value)
 Read a property stored within the master node.
int zfs_get_stats (objset_t *os, nvlist_t *nv)
void zfs_znode_dmu_fini (znode_t *)
void zfs_log_create (zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, znode_t *dzp, znode_t *zp, char *name, vsecattr_t *, zfs_fuid_info_t *, vattr_t *vap)
 Handles TX_CREATE, TX_CREATE_ATTR, TX_MKDIR, TX_MKDIR_ATTR and TX_MKXATTR transactions.
int zfs_log_create_txtype (zil_create_t, vsecattr_t *vsecp, vattr_t *vap)
void zfs_log_remove (zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, znode_t *dzp, char *name, uint64_t foid)
 handles both TX_REMOVE and TX_RMDIR transactions.
void zfs_log_link (zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, znode_t *dzp, znode_t *zp, char *name)
 handles TX_LINK transactions.
void zfs_log_symlink (zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, znode_t *dzp, znode_t *zp, char *name, char *link)
 handles TX_SYMLINK transactions.
void zfs_log_rename (zilog_t *zilog, dmu_tx_t *tx, uint64_t txtype, znode_t *sdzp, char *sname, znode_t *tdzp, char *dname, znode_t *szp)
 handles TX_RENAME transactions.
void zfs_log_write (zilog_t *zilog, dmu_tx_t *tx, int txtype, znode_t *zp, offset_t off, ssize_t len, int ioflag)
void zfs_log_truncate (zilog_t *zilog, dmu_tx_t *tx, int txtype, znode_t *zp, uint64_t off, uint64_t len)
 handles TX_TRUNCATE transactions.
void zfs_log_setattr (zilog_t *zilog, dmu_tx_t *tx, int txtype, znode_t *zp, vattr_t *vap, uint_t mask_applied, zfs_fuid_info_t *fuidp)
 handles TX_SETATTR transactions.
void zfs_log_acl (zilog_t *zilog, dmu_tx_t *tx, znode_t *zp, vsecattr_t *vsecp, zfs_fuid_info_t *fuidp)
 handles TX_ACL transactions.
void zfs_xvattr_set (znode_t *zp, xvattr_t *xvap, dmu_tx_t *tx)
 Update in-core attributes.
void zfs_upgrade (zfsvfs_t *zfsvfs, dmu_tx_t *tx)
int zfs_create_share_dir (zfsvfs_t *zfsvfs, dmu_tx_t *tx)
int zfs_obj_to_path (objset_t *osp, uint64_t obj, char *buf, int len)

Variables

zil_get_data_t zfs_get_data
zil_replay_func_tzfs_replay_vector [TX_MAX_TYPE]
 Callback vectors for replaying records.
int zfsfstype

Detailed Description

Range locking rules

  1. When truncating a file (zfs_create, zfs_setattr, zfs_space) the whole file range needs to be locked as RL_WRITER. Only then can the pages be freed etc and zp_size reset. zp_size must be set within range lock.
  2. For writes and punching holes (zfs_write & zfs_space) just the range being written or freed needs to be locked as RL_WRITER. Multiple writes at the end of the file must coordinate zp_size updates to ensure data isn't lost. A compare and swap loop is currently used to ensure the file size is at least the offset last written.
  3. For reads (zfs_read, zfs_get_data & zfs_putapage) just the range being read needs to be locked as RL_READER. A check against zp_size can then be made for reading beyond end of file.

Definition in file zfs_znode.h.


Define Documentation

#define ACCESSED   (AT_ATIME)

Definition at line 330 of file zfs_znode.h.

#define CONTENT_MODIFIED   (AT_MTIME | AT_CTIME)

Definition at line 332 of file zfs_znode.h.

#define IFTODT (   mode)    (((mode) & S_IFMT) >> 12)

Convert mode bits (zp_mode) to BSD-style DT_* values for storing in the directory entries.

Definition at line 158 of file zfs_znode.h.

#define IS_EPHEMERAL (   x)    (x > MAXUID)

Is ID ephemeral?

Definition at line 114 of file zfs_znode.h.

#define MASTER_NODE_OBJ   1

Definition at line 124 of file zfs_znode.h.

#define SA_ZPL_ATIME (   z)    z->z_attr_table[ZPL_ATIME]

Definition at line 90 of file zfs_znode.h.

#define SA_ZPL_CRTIME (   z)    z->z_attr_table[ZPL_CRTIME]

Definition at line 93 of file zfs_znode.h.

#define SA_ZPL_CTIME (   z)    z->z_attr_table[ZPL_CTIME]

Definition at line 92 of file zfs_znode.h.

#define SA_ZPL_DACL_ACES (   z)    z->z_attr_table[ZPL_DACL_ACES]

Definition at line 95 of file zfs_znode.h.

#define SA_ZPL_DACL_COUNT (   z)    z->z_attr_table[ZPL_DACL_COUNT]

Definition at line 105 of file zfs_znode.h.

#define SA_ZPL_FLAGS (   z)    z->z_attr_table[ZPL_FLAGS]

Definition at line 106 of file zfs_znode.h.

#define SA_ZPL_GEN (   z)    z->z_attr_table[ZPL_GEN]

Definition at line 94 of file zfs_znode.h.

#define SA_ZPL_GID (   z)    z->z_attr_table[ZPL_GID]

Definition at line 101 of file zfs_znode.h.

#define SA_ZPL_LINKS (   z)    z->z_attr_table[ZPL_LINKS]

Definition at line 103 of file zfs_znode.h.

#define SA_ZPL_MODE (   z)    z->z_attr_table[ZPL_MODE]

Definition at line 104 of file zfs_znode.h.

#define SA_ZPL_MTIME (   z)    z->z_attr_table[ZPL_MTIME]

Definition at line 91 of file zfs_znode.h.

#define SA_ZPL_PAD (   z)    z->z_attr_table[ZPL_PAD]

Definition at line 109 of file zfs_znode.h.

#define SA_ZPL_PARENT (   z)    z->z_attr_table[ZPL_PARENT]

Definition at line 102 of file zfs_znode.h.

#define SA_ZPL_RDEV (   z)    z->z_attr_table[ZPL_RDEV]

Definition at line 98 of file zfs_znode.h.

#define SA_ZPL_SCANSTAMP (   z)    z->z_attr_table[ZPL_SCANSTAMP]

Definition at line 99 of file zfs_znode.h.

#define SA_ZPL_SIZE (   z)    z->z_attr_table[ZPL_SIZE]

Definition at line 107 of file zfs_znode.h.

#define SA_ZPL_SYMLINK (   z)    z->z_attr_table[ZPL_SYMLINK]

Definition at line 97 of file zfs_znode.h.

#define SA_ZPL_UID (   z)    z->z_attr_table[ZPL_UID]

Definition at line 100 of file zfs_znode.h.

#define SA_ZPL_XATTR (   z)    z->z_attr_table[ZPL_XATTR]

Definition at line 96 of file zfs_znode.h.

#define SA_ZPL_ZNODE_ACL (   z)    z->z_attr_table[ZPL_ZNODE_ACL]

Definition at line 108 of file zfs_znode.h.

#define STATE_CHANGED   (AT_CTIME)

Definition at line 331 of file zfs_znode.h.

#define USE_FUIDS (   version,
  os 
)
Value:
(version >= ZPL_VERSION_FUID && \
    spa_version(dmu_objset_spa(os)) >= SPA_VERSION_FUID)

Should we use FUIDs?

Definition at line 119 of file zfs_znode.h.

#define USE_SA (   version,
  os 
)
Value:
(version >= ZPL_VERSION_SA && \
    spa_version(dmu_objset_spa(os)) >= SPA_VERSION_SA)

Definition at line 121 of file zfs_znode.h.

#define VTOZ (   VP)    ((znode_t *)(VP)->v_data)

Definition at line 266 of file zfs_znode.h.

#define ZFS_ACCESSTIME_STAMP (   zfsvfs,
  zp 
)
Value:
if ((zfsvfs)->z_atime && !((zfsvfs)->z_vfs->vfs_flag & VFS_RDONLY)) \
                zfs_tstamp_update_setup(zp, ACCESSED, NULL, NULL, B_FALSE);

Definition at line 335 of file zfs_znode.h.

#define ZFS_ACL_AUTO_INHERIT   0x40

ACL should be inherited.

Definition at line 85 of file zfs_znode.h.

#define ZFS_ACL_DEFAULTED   0x20

ACL should be defaulted.

Definition at line 84 of file zfs_znode.h.

#define ZFS_ACL_OBJ_ACE   0x8

ACL has CMPLX Object ACE.

Definition at line 82 of file zfs_znode.h.

#define ZFS_ACL_PROTECTED   0x10

ACL protected.

Definition at line 83 of file zfs_znode.h.

#define ZFS_ACL_TRIVIAL   0x4

files ACL is trivial

Definition at line 81 of file zfs_znode.h.

#define ZFS_APPENDONLY   0x0000004000000000

Definition at line 55 of file zfs_znode.h.

#define ZFS_ARCHIVE   0x0000000800000000

Definition at line 52 of file zfs_znode.h.

#define ZFS_ATTR_SET (   zp,
  attr,
  value,
  pflags,
  tx 
)
Value:
{ \
        if (value) \
                pflags |= attr; \
        else \
                pflags &= ~attr; \
        VERIFY(0 == sa_update(zp->z_sa_hdl, SA_ZPL_FLAGS(zp->z_zfsvfs), \
            &pflags, sizeof (pflags), tx)); \
}

Definition at line 65 of file zfs_znode.h.

#define ZFS_AV_MODIFIED   0x0000040000000000

Definition at line 59 of file zfs_znode.h.

#define ZFS_AV_QUARANTINED   0x0000020000000000

Definition at line 58 of file zfs_znode.h.

#define ZFS_BONUS_SCANSTAMP   0x80

Scanstamp in bonus area.

Definition at line 86 of file zfs_znode.h.

#define ZFS_DIRENT_OBJ (   de)    BF64_GET(de, 0, 48)

Definition at line 170 of file zfs_znode.h.

#define ZFS_DIRENT_TYPE (   de)    BF64_GET(de, 60, 4)

Definition at line 169 of file zfs_znode.h.

#define ZFS_ENTER (   zfsvfs)
Value:
{ \
                rrw_enter(&(zfsvfs)->z_teardown_lock, RW_READER, FTAG); \
                if ((zfsvfs)->z_unmounted) { \
                        ZFS_EXIT(zfsvfs); \
                        return (EIO); \
                } \
        }

Called on entry to each ZFS vnode and vfs operation.

Definition at line 270 of file zfs_znode.h.

#define ZFS_ENTER_NOERROR (   zfsvfs)    rrw_enter(&(zfsvfs)->z_teardown_lock, RW_READER, FTAG)

Called when we can't return EIO.

Definition at line 280 of file zfs_znode.h.

#define ZFS_EXIT (   zfsvfs)    rrw_exit(&(zfsvfs)->z_teardown_lock, FTAG)

Must be called before exitting the vop.

Definition at line 284 of file zfs_znode.h.

#define ZFS_FSID   "FSID"

Definition at line 132 of file zfs_znode.h.

#define ZFS_FUID_TABLES   "FUID"

Definition at line 136 of file zfs_znode.h.

#define ZFS_HIDDEN   0x0000000200000000

Definition at line 50 of file zfs_znode.h.

#define ZFS_IMMUTABLE   0x0000001000000000

Definition at line 53 of file zfs_znode.h.

#define ZFS_INHERIT_ACE   0x2

ace has inheritable ACEs

Definition at line 80 of file zfs_znode.h.

#define ZFS_MAX_BLOCKSIZE   (SPA_MAXBLOCKSIZE)

Definition at line 140 of file zfs_znode.h.

#define ZFS_MAXNAMELEN   (MAXNAMELEN - 1)

Path component length.

The generic fs code uses MAXNAMELEN to represent what the largest component length is. Unfortunately, this length includes the terminating NULL. ZFS needs to tell the users via pathconf() and statvfs() what the true maximum length of a component is, excluding the NULL.

Definition at line 151 of file zfs_znode.h.

#define ZFS_NO_EXECS_DENIED   0x100

exec was given to everyone

Definition at line 87 of file zfs_znode.h.

#define ZFS_NO_OBJECT   0

no object id

Definition at line 368 of file zfs_znode.h.

#define ZFS_NODUMP   0x0000008000000000

Definition at line 56 of file zfs_znode.h.

#define ZFS_NOUNLINK   0x0000002000000000

Definition at line 54 of file zfs_znode.h.

#define ZFS_OBJ_HASH (   obj_num)    ((obj_num) & (ZFS_OBJ_MTX_SZ - 1))

Definition at line 297 of file zfs_znode.h.

#define ZFS_OBJ_HOLD_ENTER (   zfsvfs,
  obj_num 
)    mutex_enter(ZFS_OBJ_MUTEX((zfsvfs), (obj_num)))

Definition at line 300 of file zfs_znode.h.

#define ZFS_OBJ_HOLD_EXIT (   zfsvfs,
  obj_num 
)    mutex_exit(ZFS_OBJ_MUTEX((zfsvfs), (obj_num)))

Definition at line 304 of file zfs_znode.h.

#define ZFS_OBJ_HOLD_TRYENTER (   zfsvfs,
  obj_num 
)    mutex_tryenter(ZFS_OBJ_MUTEX((zfsvfs), (obj_num)))

Definition at line 302 of file zfs_znode.h.

#define ZFS_OBJ_MUTEX (   zfsvfs,
  obj_num 
)    (&(zfsvfs)->z_hold_mtx[ZFS_OBJ_HASH(obj_num)])

Definition at line 298 of file zfs_znode.h.

#define ZFS_OFFLINE   0x0000100000000000

Definition at line 61 of file zfs_znode.h.

#define ZFS_OPAQUE   0x0000010000000000

Definition at line 57 of file zfs_znode.h.

#define ZFS_READONLY   0x0000000100000000

Definition at line 49 of file zfs_znode.h.

#define ZFS_REPARSE   0x0000080000000000

Definition at line 60 of file zfs_znode.h.

#define ZFS_ROOT_OBJ   "ROOT"

Definition at line 134 of file zfs_znode.h.

#define ZFS_SA_ATTRS   "SA_ATTRS"

Definition at line 138 of file zfs_znode.h.

#define ZFS_SHARES_DIR   "SHARES"

Definition at line 137 of file zfs_znode.h.

#define ZFS_SPARSE   0x0000200000000000

Definition at line 62 of file zfs_znode.h.

#define ZFS_SYSTEM   0x0000000400000000

Definition at line 51 of file zfs_znode.h.

#define ZFS_TIME_DECODE (   tp,
  stmp 
)
Value:
{                                               \
        (tp)->tv_sec = (time_t)(stmp)[0];               \
        (tp)->tv_nsec = (long)(stmp)[1];                \
}

Decode ZFS stored time value to a struct timespec.

Definition at line 320 of file zfs_znode.h.

#define ZFS_TIME_ENCODE (   tp,
  stmp 
)
Value:
{                                               \
        (stmp)[0] = (uint64_t)(tp)->tv_sec;     \
        (stmp)[1] = (uint64_t)(tp)->tv_nsec;    \
}

Encode ZFS stored time value from a struct timespec.

Definition at line 311 of file zfs_znode.h.

#define ZFS_UNLINKED_SET   "DELETE_QUEUE"

Definition at line 133 of file zfs_znode.h.

#define ZFS_VERIFY_ZP (   zp)
Value:
if ((zp)->z_sa_hdl == NULL) { \
                ZFS_EXIT((zp)->z_zfsvfs); \
                return (EIO); \
        } \

Verifies the znode is valid.

Definition at line 287 of file zfs_znode.h.

#define ZFS_XATTR   0x1

is an extended attribute

Definition at line 79 of file zfs_znode.h.

#define ZPL_VERSION_STR   "VERSION"

Definition at line 135 of file zfs_znode.h.

#define ZTOV (   ZP)    ((ZP)->z_vnode)

Definition at line 265 of file zfs_znode.h.


Typedef Documentation

typedef struct zfs_dirlock zfs_dirlock_t

Directory Entry Locks.

Directory entry locks control access to directory entries. They are used to protect creates, deletes, and renames. Each directory znode has a mutex and a list of locked names.

typedef struct znode znode_t

Function Documentation

dev_t zfs_cmpldev ( uint64_t  dev)

Special cmpldev for ZFS private use.

Can't use standard cmpldev since it takes a long dev_t and compresses it to dev32_t in LP64. We need to do a compaction of a long dev_t to a dev32_t in ILP32.

Definition at line 586 of file zfs_znode.c.

void zfs_create_fs ( objset_t os,
cred_t *  cr,
nvlist_t *  ,
dmu_tx_t tx 
)

Definition at line 1841 of file zfs_znode.c.

int zfs_create_op_tables ( )
int zfs_create_share_dir ( zfsvfs_t zfsvfs,
dmu_tx_t tx 
)

Definition at line 499 of file zfs_znode.c.

int zfs_freesp ( znode_t zp,
uint64_t  off,
uint64_t  len,
int  flag,
boolean_t  log 
)

Free space in a file.

Parameters:
[in]zpznode of file to free data in.
[in]offstart of range
[in]lenend of range (0 => EOF)
[in]flagcurrent file open mode flags.
[in]logTRUE if this action should be logged
Returns:
0 on success, error code on failure

Definition at line 1768 of file zfs_znode.c.

int zfs_get_stats ( objset_t os,
nvlist_t *  nv 
)
int zfs_get_zplprop ( objset_t os,
zfs_prop_t  prop,
uint64_t *  value 
)

Read a property stored within the master node.

Definition at line 2421 of file zfs_vfsops.c.

void zfs_grow_blocksize ( znode_t zp,
uint64_t  size,
dmu_tx_t tx 
)

Grow the block size for a file.

Parameters:
[in]zpznode of file to free data in.
[in]sizerequested block size
[in]txopen transaction.
Note:
This function assumes that the znode is write locked.

Definition at line 1509 of file zfs_znode.c.

int zfs_init_fs ( zfsvfs_t ,
znode_t **   
)
void zfs_log_acl ( zilog_t zilog,
dmu_tx_t tx,
znode_t zp,
vsecattr_t *  vsecp,
zfs_fuid_info_t fuidp 
)

handles TX_ACL transactions.

Definition at line 623 of file zfs_log.c.

void zfs_log_create ( zilog_t zilog,
dmu_tx_t tx,
uint64_t  txtype,
znode_t dzp,
znode_t zp,
char *  name,
vsecattr_t *  vsecp,
zfs_fuid_info_t fuidp,
vattr_t *  vap 
)

Handles TX_CREATE, TX_CREATE_ATTR, TX_MKDIR, TX_MKDIR_ATTR and TX_MKXATTR transactions.

TX_CREATE and TX_MKDIR are standard creates, but they may have FUID domain information appended prior to the name. In this case the uid/gid in the log record will be a log centric FUID.

TX_CREATE_ACL_ATTR and TX_MKDIR_ACL_ATTR handle special creates that may contain attributes, ACL and optional fuid information.

TX_CREATE_ACL and TX_MKDIR_ACL handle special creates that specify and ACL and normal users/groups in the ACEs.

There may be an optional xvattr attribute information similar to zfs_log_setattr.

Also, after the file name "domain" strings may be appended.

Definition at line 241 of file zfs_log.c.

int zfs_log_create_txtype ( zil_create_t  ,
vsecattr_t *  vsecp,
vattr_t *  vap 
)

Definition at line 69 of file zfs_log.c.

void zfs_log_link ( zilog_t zilog,
dmu_tx_t tx,
uint64_t  txtype,
znode_t dzp,
znode_t zp,
char *  name 
)

handles TX_LINK transactions.

Definition at line 378 of file zfs_log.c.

void zfs_log_remove ( zilog_t zilog,
dmu_tx_t tx,
uint64_t  txtype,
znode_t dzp,
char *  name,
uint64_t  foid 
)

handles both TX_REMOVE and TX_RMDIR transactions.

Definition at line 354 of file zfs_log.c.

void zfs_log_rename ( zilog_t zilog,
dmu_tx_t tx,
uint64_t  txtype,
znode_t sdzp,
char *  sname,
znode_t tdzp,
char *  dname,
znode_t szp 
)

handles TX_RENAME transactions.

Definition at line 433 of file zfs_log.c.

void zfs_log_setattr ( zilog_t zilog,
dmu_tx_t tx,
int  txtype,
znode_t zp,
vattr_t *  vap,
uint_t  mask_applied,
zfs_fuid_info_t fuidp 
)

handles TX_SETATTR transactions.

Definition at line 561 of file zfs_log.c.

void zfs_log_symlink ( zilog_t zilog,
dmu_tx_t tx,
uint64_t  txtype,
znode_t dzp,
znode_t zp,
char *  name,
char *  link 
)

handles TX_SYMLINK transactions.

Definition at line 401 of file zfs_log.c.

void zfs_log_truncate ( zilog_t zilog,
dmu_tx_t tx,
int  txtype,
znode_t zp,
uint64_t  off,
uint64_t  len 
)

handles TX_TRUNCATE transactions.

Definition at line 538 of file zfs_log.c.

void zfs_log_write ( zilog_t zilog,
dmu_tx_t tx,
int  txtype,
znode_t zp,
offset_t  off,
ssize_t  len,
int  ioflag 
)

Definition at line 461 of file zfs_log.c.

int zfs_obj_to_path ( objset_t osp,
uint64_t  obj,
char *  buf,
int  len 
)

Definition at line 2196 of file zfs_znode.c.

void zfs_remove_op_tables ( )
int zfs_rezget ( znode_t )

Definition at line 1276 of file zfs_znode.c.

void zfs_set_dataprop ( objset_t )
void zfs_tstamp_update_setup ( znode_t ,
uint_t  ,
uint64_t  [2],
uint64_t  [2],
boolean_t   
)

Definition at line 1466 of file zfs_znode.c.

void zfs_upgrade ( zfsvfs_t zfsvfs,
dmu_tx_t tx 
)
void zfs_xvattr_set ( znode_t zp,
xvattr_t *  xvap,
dmu_tx_t tx 
)

Update in-core attributes.

It is assumed the caller will be doing an sa_bulk_update to push the changes out

Definition at line 1051 of file zfs_znode.c.

int zfs_zget ( zfsvfs_t ,
uint64_t  ,
znode_t **   
)

Definition at line 1142 of file zfs_znode.c.

void zfs_zinactive ( znode_t )

Definition at line 1398 of file zfs_znode.c.

void zfs_znode_delete ( znode_t ,
dmu_tx_t  
)

Definition at line 1379 of file zfs_znode.c.

void zfs_znode_dmu_fini ( znode_t )

Definition at line 623 of file zfs_znode.c.

void zfs_znode_fini ( void  )

Definition at line 386 of file zfs_znode.c.

void zfs_znode_free ( znode_t )

Definition at line 1444 of file zfs_znode.c.

void zfs_znode_init ( void  )

Definition at line 372 of file zfs_znode.c.


Variable Documentation

zil_get_data_t zfs_get_data

Callback vectors for replaying records.

Definition at line 1014 of file zfs_replay.c.

int zfsfstype
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines