b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * This file and its contents are supplied under the terms of the
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Common Development and Distribution License ("CDDL"), version 1.0.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * You may only use this file in accordance with the terms of version
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * 1.0 of the CDDL.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * A full copy of the text of the CDDL should have accompanied this
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * source. A copy of the CDDL is also available via the Internet at
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Copyright 2015 Nexenta Systems, Inc. All rights reserved.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossint stat_to_vattr(const struct stat *, vattr_t *);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* call to ->vop_open was here */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* call to ->vop_close was here */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Check passed in count to handle possible dups. Vnode counts are only
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * kept on regular files
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * If that caller asks for read beyond end of file,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * that causes the pread call to block. (Ugh!)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Get the file size and return what we can.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross while (resid > 0) {
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross n = pread(vp->v_fd, iov->iov_base, cnt, uio->uio_loffset);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross n = pwrite(vp->v_fd, iov->iov_base, iov->iov_len,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* allow any flags? See fs_setfl */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* AT_MODE or anything else? */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross pathname_t *ppnp) /* Returned case-preserved name in directory */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * If lookup is for "", just return dvp.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross if (fstatat(dvp->v_fd, name, &st, AT_SYMLINK_NOFOLLOW) == -1)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* lookup gave us a hold */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross vsecattr_t *vsecp) /* ACL to set during create */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * If creating "", just return dvp.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross err = fstatat(dvp->v_fd, name, &st, AT_SYMLINK_NOFOLLOW);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* The file already exists. */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* vp gained a hold */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Open it. (may or may not exist)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* vp has its initial hold */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* Should have the vp now. */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross if (vp->v_type == VDIR && vap->va_type != VDIR) {
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross if (vp->v_type != VDIR && vap->va_type == VDIR) {
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Might need to set attributes.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Would prefer to specify "from" as the combination:
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * (fr_vp->v_fd, NULL) but linkat does not permit it.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross err = linkat(AT_FDCWD, fr_vp->v_path, to_dvp->v_fd, to_name,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross err = renameat(from_dvp->v_fd, from_name, to_dvp->v_fd, to_name);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross vsecattr_t *vsecp) /* ACL to set during create */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross if ((fd = openat(dvp->v_fd, name, O_RDONLY)) == -1)
a90cf9f29973990687fa61de9f1f6ea22e924e40Gordon Ross * Might need to set attributes.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross if (unlinkat(dvp->v_fd, name, AT_REMOVEDIR) == -1)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* LINTED E_BAD_PTR_CAST_ALIGN */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross cnt = getdents(fd, (struct dirent *)(uiop->uio_iov->iov_base),
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* See: fs_rwlock */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross return (-1);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* See: fs_rwunlock */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* See fs_cmp */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* See fs_frlock */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross /* See fs_frlock */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * See fs_pathconf
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Fake up just enough of this so we can test get/set SDs.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross vsecattr->vsa_dfaclcnt = 0; /* Default ACLs are not fabricated */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross if (vsecattr->vsa_mask & (VSA_ACLCNT | VSA_ACL)) {
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross vsecattr->vsa_aclentp = kmem_zalloc(aclsize, KM_SLEEP);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross } else if (vsecattr->vsa_mask & (VSA_ACECNT | VSA_ACE)) {
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossfop_vnevent(vnode_t *vp, vnevent_t vnevent, vnode_t *dvp, char *fnm,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossfop_reqzcbuf(vnode_t *vp, enum uio_rw ioflag, xuio_t *uiop, cred_t *cr,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossfop_retzcbuf(vnode_t *vp, xuio_t *uiop, cred_t *cr, caller_context_t *ct)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * ***************************************************************
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * other VOP support
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Convert stat(2) formats to vnode types and vice versa. (Knows about
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * numerical order of S_IFMT and vnode types.)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross VNON, VFIFO, VCHR, VNON, VDIR, VNON, VBLK, VNON,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross 0, S_IFREG, S_IFDIR, S_IFBLK, S_IFCHR, S_IFLNK, S_IFIFO,
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * stat_to_vattr()
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Convert from a stat structure to an vattr structure
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Note: only set fields according to va_mask
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Rossstat_to_vattr(const struct stat *st, vattr_t *vap)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross callb_cpr_t *(*cb_fcn)(flk_cb_when_t, void *), void *cbdata)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * vn_is_opened() checks whether a particular file is opened and
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * whether the open is for read and/or write.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Vnode counts are only kept on regular files (v_type=VREG).
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * vn_is_mapped() checks whether a particular file is mapped and whether
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * the file is mapped read and/or write.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross/* ARGSUSED */