Lines Matching refs:dent

86 typedef int (*gfs2_dscan_t)(const struct gfs2_dirent *dent,
397 static inline int gfs2_dirent_sentinel(const struct gfs2_dirent *dent)
399 return dent->de_inum.no_addr == 0 || dent->de_inum.no_formal_ino == 0;
402 static inline int __gfs2_dirent_find(const struct gfs2_dirent *dent,
405 if (!gfs2_dirent_sentinel(dent) &&
406 be32_to_cpu(dent->de_hash) == name->hash &&
407 be16_to_cpu(dent->de_name_len) == name->len &&
408 memcmp(dent+1, name->name, name->len) == 0)
413 static int gfs2_dirent_find(const struct gfs2_dirent *dent,
417 return __gfs2_dirent_find(dent, name, 1);
420 static int gfs2_dirent_prev(const struct gfs2_dirent *dent,
424 return __gfs2_dirent_find(dent, name, 2);
431 static int gfs2_dirent_last(const struct gfs2_dirent *dent,
436 const char *end = (const char *)dent + be16_to_cpu(dent->de_rec_len);
444 static int gfs2_dirent_find_offset(const struct gfs2_dirent *dent,
449 unsigned actual = GFS2_DIRENT_SIZE(be16_to_cpu(dent->de_name_len));
450 unsigned totlen = be16_to_cpu(dent->de_rec_len);
452 if (ptr < (void *)dent || ptr >= (void *)dent + totlen)
454 if (gfs2_dirent_sentinel(dent))
456 if (ptr < (void *)dent + actual)
458 if ((void *)dent + totlen >= ptr + required)
463 static int gfs2_dirent_find_space(const struct gfs2_dirent *dent,
468 unsigned actual = GFS2_DIRENT_SIZE(be16_to_cpu(dent->de_name_len));
469 unsigned totlen = be16_to_cpu(dent->de_rec_len);
471 if (gfs2_dirent_sentinel(dent))
483 static int gfs2_dirent_gather(const struct gfs2_dirent *dent,
488 if (!gfs2_dirent_sentinel(dent)) {
489 g->pdent[g->offset++] = dent;
504 struct gfs2_dirent *dent, unsigned int offset,
517 if (unlikely(!first && gfs2_dirent_sentinel(dent)))
520 if (!gfs2_dirent_sentinel(dent) &&
521 unlikely(sizeof(struct gfs2_dirent)+be16_to_cpu(dent->de_name_len) >
560 struct gfs2_dirent *dent, *prev;
571 dent = buf + offset;
572 size = be16_to_cpu(dent->de_rec_len);
573 if (gfs2_check_dirent(GFS2_SB(inode), dent, offset, size, len, 1))
576 ret = scan(dent, name, opaque);
582 prev = dent;
583 dent = buf + offset;
584 size = be16_to_cpu(dent->de_rec_len);
585 if (gfs2_check_dirent(GFS2_SB(inode), dent, offset, size,
594 return dent;
596 return prev ? prev : dent;
629 * @dent: Pointer to list of dirents
635 struct gfs2_dirent **dent)
637 struct gfs2_dirent *cur = *dent, *tmp;
650 /* Only the first dent could ever have de_inum.no_addr == 0 */
656 *dent = tmp;
707 struct gfs2_dirent *dent,
716 totlen = be16_to_cpu(dent->de_rec_len);
719 ndent = (struct gfs2_dirent *)((char *)dent + offset);
720 dent->de_rec_len = cpu_to_be16(offset);
727 * Takes a dent from which to grab space as an argument. Returns the
728 * newly created dent.
731 struct gfs2_dirent *dent,
737 if (!gfs2_dirent_sentinel(dent))
738 offset = GFS2_DIRENT_SIZE(be16_to_cpu(dent->de_name_len));
739 return do_init_dirent(inode, dent, name, bh, offset);
747 struct gfs2_dirent *dent;
748 dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size,
750 if (IS_ERR_OR_NULL(dent))
751 return dent;
752 return do_init_dirent(inode, dent, name, bh,
753 (unsigned)(ptr - (void *)dent));
813 struct gfs2_dirent *dent;
832 dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size,
834 if (dent)
852 dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size, scan, name, NULL);
854 if (IS_ERR_OR_NULL(dent)) {
859 return dent;
870 struct gfs2_dirent *dent;
893 dent = (struct gfs2_dirent *)(leaf+1);
894 gfs2_qstr2dirent(&empty_name, bh->b_size - sizeof(struct gfs2_leaf), dent);
910 struct gfs2_dirent *dent;
945 dent = gfs2_dirent_scan(&dip->i_inode, bh->b_data, bh->b_size,
947 if (!dent) {
952 if (IS_ERR(dent)) {
955 return PTR_ERR(dent);
959 (Remember that dent still points to the last entry.) */
961 dent->de_rec_len = cpu_to_be16(be16_to_cpu(dent->de_rec_len) +
1006 struct gfs2_dirent *dent = NULL, *prev = NULL, *next = NULL, *new;
1081 dent = (struct gfs2_dirent *)(obh->b_data + sizeof(struct gfs2_leaf));
1084 next = dent;
1088 if (!gfs2_dirent_sentinel(dent) &&
1089 be32_to_cpu(dent->de_hash) < divider) {
1091 void *ptr = ((char *)dent - obh->b_data) + nbh->b_data;
1092 str.name = (char*)(dent+1);
1093 str.len = be16_to_cpu(dent->de_name_len);
1094 str.hash = be32_to_cpu(dent->de_hash);
1101 new->de_inum = dent->de_inum; /* No endian worries */
1102 new->de_type = dent->de_type; /* No endian worries */
1105 dirent_del(dip, obh, prev, dent);
1112 prev = dent;
1114 prev = dent;
1116 dent = next;
1117 } while (dent);
1209 * @a: first dent
1210 * @b: second dent
1269 const struct gfs2_dirent *dent, *dent_next;
1282 dent = dent_next;
1305 if (!dir_emit(ctx, (const char *)(dent + 1),
1306 be16_to_cpu(dent->de_name_len),
1307 be64_to_cpu(dent->de_inum.no_addr),
1308 be16_to_cpu(dent->de_type)))
1378 struct gfs2_dirent **darr, *dent;
1429 dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size,
1431 error = PTR_ERR(dent);
1432 if (IS_ERR(dent))
1571 struct gfs2_dirent **darr, *dent;
1597 dent = gfs2_dirent_scan(inode, dibh->b_data, dibh->b_size,
1599 if (IS_ERR(dent)) {
1600 error = PTR_ERR(dent);
1644 struct gfs2_dirent *dent;
1648 dent = gfs2_dirent_search(dir, name, gfs2_dirent_find, &bh);
1649 if (dent) {
1653 if (IS_ERR(dent))
1654 return ERR_CAST(dent);
1655 dtype = be16_to_cpu(dent->de_type);
1656 rahead = be16_to_cpu(dent->de_rahead);
1657 addr = be64_to_cpu(dent->de_inum.no_addr);
1658 formal_ino = be64_to_cpu(dent->de_inum.no_formal_ino);
1675 struct gfs2_dirent *dent;
1678 dent = gfs2_dirent_search(dir, name, gfs2_dirent_find, &bh);
1679 if (dent) {
1680 if (IS_ERR(dent))
1681 return PTR_ERR(dent);
1683 if (be64_to_cpu(dent->de_inum.no_addr) != ip->i_no_addr)
1685 if (be64_to_cpu(dent->de_inum.no_formal_ino) !=
1689 be16_to_cpu(dent->de_type))) {
1798 struct gfs2_dirent *dent = da->dent;
1805 dent = gfs2_dirent_search(inode, name,
1808 if (dent) {
1809 if (IS_ERR(dent))
1810 return PTR_ERR(dent);
1811 dent = gfs2_init_dirent(inode, dent, name, bh);
1812 gfs2_inum_out(nip, dent);
1813 dent->de_type = cpu_to_be16(IF2DT(nip->i_inode.i_mode));
1814 dent->de_rahead = cpu_to_be16(gfs2_inode_ra_len(nip));
1822 da->dent = NULL;
1875 struct gfs2_dirent *dent, *prev = NULL;
1881 dent = gfs2_dirent_search(&dip->i_inode, name, gfs2_dirent_prev, &bh);
1882 if (!dent) {
1886 if (IS_ERR(dent)) {
1888 return PTR_ERR(dent);
1891 if (gfs2_dirent_find(dent, name, NULL) == 0) {
1892 prev = dent;
1893 dent = (struct gfs2_dirent *)((char *)dent + be16_to_cpu(prev->de_rec_len));
1896 dirent_del(dip, bh, prev, dent);
1936 struct gfs2_dirent *dent;
1938 dent = gfs2_dirent_search(&dip->i_inode, filename, gfs2_dirent_find, &bh);
1939 if (!dent) {
1943 if (IS_ERR(dent))
1944 return PTR_ERR(dent);
1947 gfs2_inum_out(nip, dent);
1948 dent->de_type = cpu_to_be16(new_type);
2158 struct gfs2_dirent *dent;
2163 da->dent = NULL;
2165 dent = gfs2_dirent_search(inode, name, gfs2_dirent_find_space, &bh);
2166 if (!dent) {
2173 if (IS_ERR(dent))
2174 return PTR_ERR(dent);
2178 da->dent = dent;