Lines Matching defs:zp

175 	znode_t *zp;
189 error = zfs_zget(zfsvfs, parent, &zp);
191 *zpp = zp;
199 znode_t *zp;
213 error = zfs_dirent_lookup(dzp, name, &zp, ZEXISTS);
216 *zpp = zp;
237 zfs_unlinked_add(znode_t *zp, dmu_tx_t *tx)
239 zfsvfs_t *zfsvfs = zp->z_zfsvfs;
241 ASSERT(zp->z_unlinked);
242 ASSERT(zp->z_links == 0);
245 zap_add_int(zfsvfs->z_os, zfsvfs->z_unlinkedobj, zp->z_id, tx));
258 znode_t *zp;
281 * so we pull them back into core and set zp->z_unlinked.
283 error = zfs_zget(zfsvfs, zap.za_first_integer, &zp);
294 vn_lock(ZTOV(zp), LK_EXCLUSIVE | LK_RETRY);
295 zp->z_unlinked = B_TRUE;
296 vput(ZTOV(zp));
367 zfs_rmnode(znode_t *zp)
369 zfsvfs_t *zfsvfs = zp->z_zfsvfs;
377 ASSERT(zp->z_links == 0);
378 ASSERT_VOP_ELOCKED(ZTOV(zp), __func__);
383 if (ZTOV(zp) != NULL && ZTOV(zp)->v_type == VDIR &&
384 (zp->z_pflags & ZFS_XATTR)) {
385 if (zfs_purgedir(zp) != 0) {
390 zfs_znode_dmu_fini(zp);
391 zfs_znode_free(zp);
399 error = dmu_free_long_range(os, zp->z_id, 0, DMU_OBJECT_END);
404 zfs_znode_dmu_fini(zp);
405 zfs_znode_free(zp);
413 error = sa_lookup(zp->z_sa_hdl, SA_ZPL_XATTR(zfsvfs),
421 acl_obj = zfs_external_acl(zp);
427 dmu_tx_hold_free(tx, zp->z_id, 0, DMU_OBJECT_END);
436 zfs_sa_upgrade_txholds(tx, zp);
445 zfs_znode_dmu_fini(zp);
446 zfs_znode_free(zp);
461 zap_remove_int(zfsvfs->z_os, zfsvfs->z_unlinkedobj, zp->z_id, tx));
463 zfs_znode_delete(zp, tx);
472 zfs_dirent(znode_t *zp, uint64_t mode)
474 uint64_t de = zp->z_id;
476 if (zp->z_zfsvfs->z_version >= ZPL_VERSION_DIRENT_TYPE)
482 * Link zp into dzp. Can only fail if zp has been unlinked.
485 zfs_link_create(znode_t *dzp, const char *name, znode_t *zp, dmu_tx_t *tx,
488 zfsvfs_t *zfsvfs = zp->z_zfsvfs;
489 vnode_t *vp = ZTOV(zp);
498 ASSERT_VOP_ELOCKED(ZTOV(zp), __func__);
508 if (zp->z_unlinked) { /* no new links to unlinked zp */
513 if (zp->z_links >= LINK_MAX) {
517 zp->z_links++;
519 &zp->z_links, sizeof (zp->z_links));
522 ASSERT(zp->z_unlinked == 0);
527 &zp->z_pflags, sizeof (zp->z_pflags));
532 zfs_tstamp_update_setup(zp, STATE_CHANGED, mtime,
535 error = sa_bulk_update(zp->z_sa_hdl, bulk, count, tx);
555 value = zfs_dirent(zp, zp->z_mode);
556 error = zap_add(zp->z_zfsvfs->z_os, dzp->z_id, name,
564 zfs_dropname(znode_t *dzp, const char *name, znode_t *zp, dmu_tx_t *tx,
569 if (zp->z_zfsvfs->z_norm) {
570 if (zp->z_zfsvfs->z_case == ZFS_CASE_MIXED)
571 error = zap_remove_norm(zp->z_zfsvfs->z_os,
574 error = zap_remove_norm(zp->z_zfsvfs->z_os,
577 error = zap_remove(zp->z_zfsvfs->z_os,
585 * Unlink zp from dzp, and mark zp for deletion if this was the last link.
586 * Can fail if zp is a mount point (EBUSY) or a non-empty directory (EEXIST).
592 zfs_link_destroy(znode_t *dzp, const char *name, znode_t *zp, dmu_tx_t *tx,
596 vnode_t *vp = ZTOV(zp);
605 ASSERT_VOP_ELOCKED(ZTOV(zp), __func__);
609 if (zp_is_dir && !zfs_dirempty(zp)) {
622 error = zfs_dropname(dzp, name, zp, tx, flag);
627 if (zp->z_links <= zp_is_dir) {
629 "should be at least %u", zp->z_vnode,
630 (int)zp->z_links,
632 zp->z_links = zp_is_dir + 1;
634 if (--zp->z_links == zp_is_dir) {
635 zp->z_unlinked = B_TRUE;
636 zp->z_links = 0;
642 NULL, &zp->z_pflags, sizeof (zp->z_pflags));
643 zfs_tstamp_update_setup(zp, STATE_CHANGED, mtime, ctime,
647 NULL, &zp->z_links, sizeof (zp->z_links));
648 error = sa_bulk_update(zp->z_sa_hdl, bulk, count, tx);
652 ASSERT(zp->z_unlinked == 0);
653 error = zfs_dropname(dzp, name, zp, tx, flag);
659 dzp->z_links -= zp_is_dir; /* ".." link from zp */
677 zfs_unlinked_add(zp, tx);
692 zfs_make_xattrdir(znode_t *zp, vattr_t *vap, vnode_t **xvpp, cred_t *cr)
694 zfsvfs_t *zfsvfs = zp->z_zfsvfs;
709 if (error = zfs_zaccess(zp, ACE_WRITE_NAMED_ATTRS, 0, B_FALSE, cr))
713 if ((error = zfs_acl_ids_create(zp, IS_XATTR, vap, cr, NULL,
726 dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE);
737 zfs_mknode(zp, vap, tx, cr, IS_XATTR, &xzp, &acl_ids);
745 ASSERT(error == 0 && parent == zp->z_id);
748 VERIFY(0 == sa_update(zp->z_sa_hdl, SA_ZPL_XATTR(zfsvfs), &xzp->z_id,
751 (void) zfs_log_create(zfsvfs->z_log, tx, TX_MKXATTR, zp,
765 * Return a znode for the extended attribute directory for zp.
768 * IN: zp - znode to obtain attribute directory from
778 zfs_get_xattrdir(znode_t *zp, vnode_t **xvpp, cred_t *cr, int flags)
780 zfsvfs_t *zfsvfs = zp->z_zfsvfs;
785 error = zfs_dirent_lookup(zp, "", &xzp, ZXATTR);
820 zfs_fuid_map_ids(zp, cr, &va.va_uid, &va.va_gid);
822 error = zfs_make_xattrdir(zp, &va, xvpp, cr);
848 zfs_sticky_remove_access(znode_t *zdp, znode_t *zp, cred_t *cr)
862 fowner = zfs_fuid_map_id(zfsvfs, zp->z_uid, cr, ZFS_OWNER);
865 (ZTOV(zp)->v_type == VREG &&
866 zfs_zaccess(zp, ACE_WRITE_DATA, 0, B_FALSE, cr) == 0))
869 return (secpolicy_vnode_remove(ZTOV(zp), cr));