示例#1
0
int
ntfs_ntvattrrele(struct ntvattr *vap)
{
	dprintf(("%s: ino: %llu, type: 0x%x\n", __func__,
	    (unsigned long long)vap->va_ip->i_number, vap->va_type));
	ntfs_ntrele(vap->va_ip);
	return (0);
}
示例#2
0
int
ntfs_ntvattrrele(struct ntvattr *vap)
{
	dprintf(("ntfs_ntvattrrele: ino: %"PRId64", type: 0x%x\n",
		 vap->va_ip->i_number, vap->va_type));

	ntfs_ntrele(vap->va_ip);

	return (0);
}
示例#3
0
/*
 * Reclaim an fnode/ntnode so that it can be used for other purposes.
 */
int
ntfs_reclaim(void *v)
{
	struct vop_reclaim_args /* {
		struct vnode *a_vp;
	} */ *ap = v;
	struct vnode *vp = ap->a_vp;
	struct fnode *fp = VTOF(vp);
	struct ntnode *ip = FTONT(fp);
	const int attrlen = strlen(fp->f_attrname);
	int error;

	dprintf(("ntfs_reclaim: vnode: %p, ntnode: %llu\n", vp,
	    (unsigned long long)ip->i_number));

	if (prtactive && vp->v_usecount > 1)
		vprint("ntfs_reclaim: pushing active", vp);

	if ((error = ntfs_ntget(ip)) != 0)
		return (error);

	vcache_remove(vp->v_mount, fp->f_key, NTKEY_SIZE(attrlen));

	if (ip->i_devvp) {
		vrele(ip->i_devvp);
		ip->i_devvp = NULL;
	}
	genfs_node_destroy(vp);
	vp->v_data = NULL;

	/* Destroy fnode. */
	if (fp->f_key != &fp->f_smallkey)
		kmem_free(fp->f_key, NTKEY_SIZE(attrlen));
	if (fp->f_dirblbuf)
		free(fp->f_dirblbuf, M_NTFSDIR);
	kmem_free(fp, sizeof(*fp));
	ntfs_ntrele(ip);

	ntfs_ntput(ip);

	return (0);
}