int nandfs_node_destroy(struct nandfs_node *node) { struct nandfs_alloc_request req; struct nandfsmount *nmp; struct nandfs_mdt *mdt; struct nandfs_node *ifile; struct vnode *vp; int error = 0; nmp = node->nn_nmp; req.entrynum = node->nn_ino; mdt = &nmp->nm_nandfsdev->nd_ifile_mdt; ifile = nmp->nm_ifile_node; vp = NTOV(ifile); DPRINTF(IFILE, ("%s: destroy node: %p ino: %#jx\n", __func__, node, (uintmax_t)node->nn_ino)); VOP_LOCK(vp, LK_EXCLUSIVE); error = nandfs_find_entry(mdt, ifile, &req); if (error) { nandfs_error("%s: finding entry error:%d node %p(%jx)", __func__, error, node, node->nn_ino); VOP_UNLOCK(vp, 0); return (error); } nandfs_inode_destroy(&node->nn_inode); error = nandfs_free_entry(mdt, &req); if (error) { nandfs_error("%s: freing entry error:%d node %p(%jx)", __func__, error, node, node->nn_ino); VOP_UNLOCK(vp, 0); return (error); } VOP_UNLOCK(vp, 0); DPRINTF(IFILE, ("%s: freed node %p ino %#jx\n", __func__, node, (uintmax_t)node->nn_ino)); return (error); }
int nandfs_vblock_free(struct nandfs_device *nandfsdev, nandfs_daddr_t vblock) { struct nandfs_node *dat; struct nandfs_mdt *mdt; struct nandfs_alloc_request req; int error; dat = nandfsdev->nd_dat_node; mdt = &nandfsdev->nd_dat_mdt; VOP_LOCK(NTOV(dat), LK_EXCLUSIVE); req.entrynum = vblock; error = nandfs_find_entry(mdt, dat, &req); if (!error) { DPRINTF(DAT, ("%s: vblk %#jx\n", __func__, (uintmax_t)vblock)); nandfs_free_entry(mdt, &req); } VOP_UNLOCK(NTOV(dat), 0); return (error); }