fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER START
fa9e4066f08beec538e775443c5be79dd423fcabahrens *
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The contents of this file are subject to the terms of the
3f063a9d046be1602e680274441fdc168bba9f61ck * Common Development and Distribution License (the "License").
3f063a9d046be1602e680274441fdc168bba9f61ck * You may not use this file except in compliance with the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens *
fa9e4066f08beec538e775443c5be79dd423fcabahrens * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
fa9e4066f08beec538e775443c5be79dd423fcabahrens * or http://www.opensolaris.org/os/licensing.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * See the License for the specific language governing permissions
fa9e4066f08beec538e775443c5be79dd423fcabahrens * and limitations under the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens *
fa9e4066f08beec538e775443c5be79dd423fcabahrens * When distributing Covered Code, include this CDDL HEADER in each
fa9e4066f08beec538e775443c5be79dd423fcabahrens * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * If applicable, add the following below this CDDL HEADER, with the
fa9e4066f08beec538e775443c5be79dd423fcabahrens * fields enclosed by brackets "[]" replaced with your own identifying
fa9e4066f08beec538e775443c5be79dd423fcabahrens * information: Portions Copyright [yyyy] [name of copyright owner]
fa9e4066f08beec538e775443c5be79dd423fcabahrens *
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER END
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
0a586cea3ceec7e5e50e7e54c745082a7a333ac2Mark Shellenbaum * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Use is subject to license terms.
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens#ifndef _SYS_FS_ZFS_DIR_H
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define _SYS_FS_ZFS_DIR_H
fa9e4066f08beec538e775443c5be79dd423fcabahrens
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <sys/pathname.h>
fa9e4066f08beec538e775443c5be79dd423fcabahrens#include <sys/dmu.h>
fa9e4066f08beec538e775443c5be79dd423fcabahrens#include <sys/zfs_znode.h>
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens#ifdef __cplusplus
fa9e4066f08beec538e775443c5be79dd423fcabahrensextern "C" {
fa9e4066f08beec538e775443c5be79dd423fcabahrens#endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* zfs_dirent_lock() flags */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZNEW 0x0001 /* entry should not exist */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZEXISTS 0x0002 /* entry should exist */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZSHARED 0x0004 /* shared access (zfs_dirlook()) */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZXATTR 0x0008 /* we want the xattr dir */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define ZRENAMING 0x0010 /* znode is being renamed */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#define ZCILOOK 0x0020 /* case-insensitive lookup requested */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#define ZCIEXACT 0x0040 /* c-i requires c-s match (rename) */
afefc7e4027e02291d2f534f969cfd38b9dd1db3Sanjeev Bagewadi#define ZHAVELOCK 0x0080 /* z_name_lock is already held */
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/* mknode flags */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define IS_ROOT_NODE 0x01 /* create a root node */
fa9e4066f08beec538e775443c5be79dd423fcabahrens#define IS_XATTR 0x02 /* create an extended attribute node */
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensextern int zfs_dirent_lock(zfs_dirlock_t **, znode_t *, char *, znode_t **,
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw int, int *, pathname_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensextern void zfs_dirent_unlock(zfs_dirlock_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensextern int zfs_link_create(zfs_dirlock_t *, znode_t *, dmu_tx_t *, int);
893a6d32980d24be1349478f44169009d4801c25ahrensextern int zfs_link_destroy(zfs_dirlock_t *, znode_t *, dmu_tx_t *, int,
893a6d32980d24be1349478f44169009d4801c25ahrens boolean_t *);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwextern int zfs_dirlook(znode_t *, char *, vnode_t **, int, int *,
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw pathname_t *);
4ccbb6e737373468bb9dc1709618384cce4c9f92ahrensextern void zfs_mknode(znode_t *, vattr_t *, dmu_tx_t *, cred_t *,
0a586cea3ceec7e5e50e7e54c745082a7a333ac2Mark Shellenbaum uint_t, znode_t **, zfs_acl_ids_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensextern void zfs_rmnode(znode_t *);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwextern void zfs_dl_name_switch(zfs_dirlock_t *dl, char *new, char **old);
fa9e4066f08beec538e775443c5be79dd423fcabahrensextern boolean_t zfs_dirempty(znode_t *);
893a6d32980d24be1349478f44169009d4801c25ahrensextern void zfs_unlinked_add(znode_t *, dmu_tx_t *);
893a6d32980d24be1349478f44169009d4801c25ahrensextern void zfs_unlinked_drain(zfsvfs_t *zfsvfs);
fa9e4066f08beec538e775443c5be79dd423fcabahrensextern int zfs_sticky_remove_access(znode_t *, znode_t *, cred_t *cr);
3f063a9d046be1602e680274441fdc168bba9f61ckextern int zfs_get_xattrdir(znode_t *, vnode_t **, cred_t *, int);
fa9e4066f08beec538e775443c5be79dd423fcabahrensextern int zfs_make_xattrdir(znode_t *, vattr_t *, vnode_t **, cred_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens#ifdef __cplusplus
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens#endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens#endif /* _SYS_FS_ZFS_DIR_H */