]> git.proxmox.com Git - mirror_zfs-debian.git/blobdiff - include/sys/zfs_znode.h
Imported Upstream version 0.6.1
[mirror_zfs-debian.git] / include / sys / zfs_znode.h
index 9d12a118ec31c5a6297af4176c477817a26f4026..bdddcc366b8d7328c8f77ee2a5735bc91abb6853 100644 (file)
@@ -57,8 +57,8 @@ extern "C" {
 #define        ZFS_APPENDONLY          0x0000004000000000ull
 #define        ZFS_NODUMP              0x0000008000000000ull
 #define        ZFS_OPAQUE              0x0000010000000000ull
-#define        ZFS_AV_QUARANTINED      0x0000020000000000ull
-#define        ZFS_AV_MODIFIED         0x0000040000000000ull
+#define        ZFS_AV_QUARANTINED      0x0000020000000000ull
+#define        ZFS_AV_MODIFIED         0x0000040000000000ull
 #define        ZFS_REPARSE             0x0000080000000000ull
 #define        ZFS_OFFLINE             0x0000100000000000ull
 #define        ZFS_SPARSE              0x0000200000000000ull
@@ -69,7 +69,7 @@ extern "C" {
                pflags |= attr; \
        else \
                pflags &= ~attr; \
-       VERIFY(0 == sa_update(zp->z_sa_hdl, SA_ZPL_FLAGS(zp->z_sb), \
+       VERIFY(0 == sa_update(zp->z_sa_hdl, SA_ZPL_FLAGS(ZTOZSB(zp)), \
            &pflags, sizeof (pflags), tx)); \
 }
 
@@ -78,8 +78,8 @@ extern "C" {
  */
 #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_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 */
@@ -105,6 +105,7 @@ extern "C" {
 #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_DXATTR(z)        z->z_attr_table[ZPL_DXATTR]
 #define        SA_ZPL_PAD(z)           z->z_attr_table[ZPL_PAD]
 
 /*
@@ -206,11 +207,16 @@ typedef struct znode {
        uint32_t        z_sync_cnt;     /* synchronous open count */
        kmutex_t        z_acl_lock;     /* acl data lock */
        zfs_acl_t       *z_acl_cached;  /* cached acl */
+       krwlock_t       z_xattr_lock;   /* xattr data lock */
+       nvlist_t        *z_xattr_cached;/* cached xattrs */
+       struct znode    *z_xattr_parent;/* xattr parent znode */
        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? */
        boolean_t       z_is_zvol;      /* are we used by the zvol */
        boolean_t       z_is_mapped;    /* are we mmap'ed */
+       boolean_t       z_is_ctldir;    /* are we .zfs entry */
+       boolean_t       z_is_stale;     /* are we stale due to rollback? */
        struct inode    z_inode;        /* generic vfs inode */
 } znode_t;
 
@@ -236,9 +242,8 @@ typedef struct znode {
  */
 #define        ZTOI(znode)     (&((znode)->z_inode))
 #define        ITOZ(inode)     (container_of((inode), znode_t, z_inode))
-#define VTOZSB(vfs)    ((zfs_sb_t *)((vfs)->mnt_sb->s_fs_info))
-#define ZTOZSB(znode)  ((zfs_sb_t *)(ZTOI(znode)->i_sb->s_fs_info))
-#define ITOZSB(inode)  ((zfs_sb_t *)((inode)->i_sb->s_fs_info))
+#define        ZTOZSB(znode)   ((zfs_sb_t *)(ZTOI(znode)->i_sb->s_fs_info))
+#define        ITOZSB(inode)   ((zfs_sb_t *)((inode)->i_sb->s_fs_info))
 
 #define        S_ISDEV(mode)   (S_ISCHR(mode) || S_ISBLK(mode) || S_ISFIFO(mode))
 
@@ -280,6 +285,8 @@ typedef struct znode {
        mutex_tryenter(ZFS_OBJ_MUTEX((zsb), (obj_num)))
 #define        ZFS_OBJ_HOLD_EXIT(zsb, obj_num) \
        mutex_exit(ZFS_OBJ_MUTEX((zsb), (obj_num)))
+#define        ZFS_OBJ_HOLD_OWNED(zsb, obj_num) \
+       mutex_owned(ZFS_OBJ_MUTEX((zsb), (obj_num)))
 
 /*
  * Macros to encode/decode ZFS stored time values from/to struct timespec
@@ -304,7 +311,7 @@ typedef struct znode {
 #define        CONTENT_MODIFIED        (ATTR_MTIME | ATTR_CTIME)
 
 #define        ZFS_ACCESSTIME_STAMP(zsb, zp) \
-       if ((zsb)->z_atime && !((zsb)->z_vfs->mnt_flags & MNT_READONLY)) \
+       if ((zsb)->z_atime && !(zfs_is_readonly(zsb))) \
                zfs_tstamp_update_setup(zp, ACCESSED, NULL, NULL, B_FALSE);
 
 extern int     zfs_init_fs(zfs_sb_t *, znode_t **);
@@ -323,7 +330,7 @@ extern void zfs_zinactive(znode_t *);
 extern void    zfs_znode_delete(znode_t *, dmu_tx_t *);
 extern void    zfs_remove_op_tables(void);
 extern int     zfs_create_op_tables(void);
-extern int     zfs_sync(zfs_sb_t *, short, cred_t *);
+extern int     zfs_sync(struct super_block *, int, cred_t *);
 extern dev_t   zfs_cmpldev(uint64_t);
 extern int     zfs_get_zplprop(objset_t *os, zfs_prop_t prop, uint64_t *value);
 extern int     zfs_get_stats(objset_t *os, nvlist_t *nv);
@@ -351,8 +358,7 @@ extern void zfs_log_write(zilog_t *zilog, dmu_tx_t *tx, int txtype,
 extern void zfs_log_truncate(zilog_t *zilog, dmu_tx_t *tx, int txtype,
     znode_t *zp, uint64_t off, uint64_t len);
 extern void zfs_log_setattr(zilog_t *zilog, dmu_tx_t *tx, int txtype,
-    znode_t *zp, struct iattr *attr, uint_t mask_applied,
-    zfs_fuid_info_t *fuidp);
+    znode_t *zp, vattr_t *vap, uint_t mask_applied, zfs_fuid_info_t *fuidp);
 extern void zfs_log_acl(zilog_t *zilog, dmu_tx_t *tx, znode_t *zp,
     vsecattr_t *vsecp, zfs_fuid_info_t *fuidp);
 extern void zfs_xvattr_set(znode_t *zp, xvattr_t *xvap, dmu_tx_t *tx);
@@ -365,7 +371,7 @@ extern void zfs_unmap_page(page_t *, caddr_t);
 #endif /* HAVE_UIO_RW */
 
 extern zil_get_data_t zfs_get_data;
-extern zil_replay_func_t *zfs_replay_vector[TX_MAX_TYPE];
+extern zil_replay_func_t zfs_replay_vector[TX_MAX_TYPE];
 extern int zfsfstype;
 
 #endif /* _KERNEL */