Lines Matching defs:de
866 tmpfs_dirent_cookie(struct tmpfs_dirent *de)
868 if (de == NULL)
871 MPASS(de->td_cookie >= TMPFS_DIRCOOKIE_MIN);
873 return (de->td_cookie);
877 tmpfs_dirent_dup(struct tmpfs_dirent *de)
879 return ((de->td_cookie & TMPFS_DIRCOOKIE_DUP) != 0);
883 tmpfs_dirent_duphead(struct tmpfs_dirent *de)
885 return ((de->td_cookie & TMPFS_DIRCOOKIE_DUPHEAD) != 0);
889 tmpfs_dirent_init(struct tmpfs_dirent *de, const char *name, u_int namelen)
891 de->td_hash = de->td_cookie = tmpfs_dirent_hash(name, namelen);
892 memcpy(de->ud.td_name, name, namelen);
893 de->td_namelen = namelen;
898 * The new directory entry is returned in *de.
907 const char *name, u_int len, struct tmpfs_dirent **de)
921 *de = nde;
936 tmpfs_free_dirent(struct tmpfs_mount *tmp, struct tmpfs_dirent *de)
940 node = de->td_node;
945 if (!tmpfs_dirent_duphead(de) && de->ud.td_name != NULL)
946 free(de->ud.td_name, M_TMPFSNAME);
947 free(de, M_TMPFSDIR);
1209 struct tmpfs_dirent *de;
1246 &de);
1255 tmpfs_free_dirent(tmp, de);
1265 tmpfs_dir_attach(dvp, de);
1272 struct tmpfs_dirent *de;
1274 de = RB_MIN(tmpfs_dir, &dnode->tn_dir.tn_dirhead);
1275 dc->tdc_tree = de;
1276 if (de != NULL && tmpfs_dirent_duphead(de))
1277 de = LIST_FIRST(&de->ud.td_duphead);
1278 dc->tdc_current = de;
1286 struct tmpfs_dirent *de;
1296 if ((de = dc->tdc_current) != NULL && tmpfs_dirent_duphead(de)) {
1297 dc->tdc_current = LIST_FIRST(&de->ud.td_duphead);
1308 struct tmpfs_dirent *de, dekey;
1311 de = RB_FIND(tmpfs_dir, &dnode->tn_dir.tn_dirhead, &dekey);
1312 return (de);
1321 struct tmpfs_dirent *de, dekey;
1326 (de = node->tn_dir.tn_readdir_lastp) != NULL) {
1329 if (cookie == tmpfs_dirent_cookie(de))
1334 LIST_FOREACH(de, &node->tn_dir.tn_dupindex,
1336 MPASS(tmpfs_dirent_dup(de));
1337 if (de->td_cookie == cookie)
1340 if (de->td_cookie < cookie) {
1341 de = NULL;
1345 MPASS(de == NULL);
1350 de = NULL;
1354 de = RB_NFIND(tmpfs_dir, dirhead, &dekey);
1356 dc->tdc_tree = de;
1357 dc->tdc_current = de;
1358 if (de != NULL && tmpfs_dirent_duphead(de)) {
1359 dc->tdc_current = LIST_FIRST(&de->ud.td_duphead);
1365 dc->tdc_tree = de;
1366 dc->tdc_current = de;
1367 if (de != NULL && tmpfs_dirent_dup(de))
1369 de->td_hash);
1386 struct tmpfs_dirent *de;
1395 de = tmpfs_dir_xlookup_hash(node, hash);
1396 if (de != NULL && tmpfs_dirent_duphead(de)) {
1397 duphead = &de->ud.td_duphead;
1398 LIST_FOREACH(de, duphead, uh.td_dup.entries) {
1399 if (TMPFS_DIRENT_MATCHES(de, cnp->cn_nameptr,
1403 } else if (de != NULL) {
1404 if (!TMPFS_DIRENT_MATCHES(de, cnp->cn_nameptr,
1406 de = NULL;
1408 if (de != NULL && f != NULL && de->td_node != f)
1409 de = NULL;
1411 return (de);
1423 struct tmpfs_dirent *de, *pde;
1426 de = LIST_FIRST(dupindex);
1427 if (de == NULL || de->td_cookie < TMPFS_DIRCOOKIE_DUP_MAX) {
1428 if (de == NULL)
1431 nde->td_cookie = de->td_cookie + 1;
1444 pde = de;
1445 de = LIST_NEXT(de, uh.td_dup.index_entries);
1446 if (de == NULL && pde->td_cookie != TMPFS_DIRCOOKIE_DUP_MIN) {
1455 } else if (de == NULL) {
1468 if (de->td_cookie + 1 == pde->td_cookie ||
1469 de->td_cookie >= TMPFS_DIRCOOKIE_DUP_MAX)
1471 nde->td_cookie = de->td_cookie + 1;
1474 MPASS(nde->td_cookie > de->td_cookie);
1475 LIST_INSERT_BEFORE(de, nde, uh.td_dup.index_entries);
1482 * Attaches the directory entry de to the directory represented by vp.
1487 tmpfs_dir_attach(struct vnode *vp, struct tmpfs_dirent *de)
1493 MPASS(de->td_namelen > 0);
1494 MPASS(de->td_hash >= TMPFS_DIRCOOKIE_MIN);
1495 MPASS(de->td_cookie == de->td_hash);
1501 MPASS(!tmpfs_dirent_dup(de));
1502 xde = RB_INSERT(tmpfs_dir, &dnode->tn_dir.tn_dirhead, de);
1504 tmpfs_dir_attach_dup(dnode, &xde->ud.td_duphead, de);
1520 tmpfs_dir_attach_dup(dnode, &xde->ud.td_duphead, de);
1529 * Detaches the directory entry de from the directory represented by vp.
1534 tmpfs_dir_detach(struct vnode *vp, struct tmpfs_dirent *de)
1548 if (tmpfs_dirent_dup(de)) {
1549 /* Remove duphead if de was last entry. */
1550 if (LIST_NEXT(de, uh.td_dup.entries) == NULL) {
1551 xde = tmpfs_dir_xlookup_hash(dnode, de->td_hash);
1555 LIST_REMOVE(de, uh.td_dup.entries);
1556 LIST_REMOVE(de, uh.td_dup.index_entries);
1565 de->td_cookie = de->td_hash;
1567 RB_REMOVE(tmpfs_dir, head, de);
1578 struct tmpfs_dirent *de, *dde, *nde;
1580 RB_FOREACH_SAFE(de, tmpfs_dir, &dnode->tn_dir.tn_dirhead, nde) {
1581 RB_REMOVE(tmpfs_dir, &dnode->tn_dir.tn_dirhead, de);
1583 de->td_node = NULL;
1584 if (tmpfs_dirent_duphead(de)) {
1585 while ((dde = LIST_FIRST(&de->ud.td_duphead)) != NULL) {
1591 tmpfs_free_dirent(tmp, de);
1687 struct tmpfs_dirent *de, *nde;
1699 * fit into the buffer. Once no more entries are found (de == NULL),
1713 de = tmpfs_dir_first(node, &dc);
1714 off = tmpfs_dirent_cookie(de);
1722 if (de == NULL)
1728 de = tmpfs_dir_lookup_cookie(node, uio->uio_offset, &dc);
1729 if (de == NULL)
1732 off = tmpfs_dirent_cookie(de);
1746 if (de->td_node == NULL) {
1750 d.d_fileno = de->td_node->tn_id;
1751 switch (de->td_node->tn_type) {
1782 de->td_node, (int)de->td_node->tn_type);
1785 d.d_namlen = de->td_namelen;
1786 MPASS(de->td_namelen < sizeof(d.d_name));
1787 (void)memcpy(d.d_name, de->ud.td_name, de->td_namelen);
1809 de = nde;
1811 off = tmpfs_dirent_cookie(de);
1816 } while (error == 0 && uio->uio_resid > 0 && de != NULL);
1820 off = tmpfs_dirent_cookie(de);
1825 node->tn_dir.tn_readdir_lastp = de;
1834 struct tmpfs_dirent *de;
1839 cnp->cn_nameptr, cnp->cn_namelen, &de);
1843 tmpfs_dir_attach(dvp, de);
1844 dnode->tn_dir.tn_wht_size += sizeof(*de);
1851 struct tmpfs_dirent *de;
1855 de = tmpfs_dir_lookup(dnode, NULL, cnp);
1856 MPASS(de != NULL && de->td_node == NULL);
1857 MPASS(dnode->tn_dir.tn_wht_size >= sizeof(*de));
1858 dnode->tn_dir.tn_wht_size -= sizeof(*de);
1859 tmpfs_dir_detach(dvp, de);
1860 tmpfs_free_dirent(VFS_TO_TMPFS(dvp->v_mount), de);
1873 struct tmpfs_dirent *de;
1878 while ((de = tmpfs_dir_first(dnode, &dc)) != NULL) {
1879 KASSERT(de->td_node == NULL, ("%s: non-whiteout dirent %p",
1880 __func__, de));
1881 dnode->tn_dir.tn_wht_size -= sizeof(*de);
1882 tmpfs_dir_detach(dvp, de);
1883 tmpfs_free_dirent(VFS_TO_TMPFS(dvp->v_mount), de);