Lines Matching refs:dent

86 typedef int (*gfs2_dscan_t)(const struct gfs2_dirent *dent,
396 static inline int gfs2_dirent_sentinel(const struct gfs2_dirent *dent)
398 return dent->de_inum.no_addr == 0 || dent->de_inum.no_formal_ino == 0;
401 static inline int __gfs2_dirent_find(const struct gfs2_dirent *dent,
404 if (!gfs2_dirent_sentinel(dent) &&
405 be32_to_cpu(dent->de_hash) == name->hash &&
406 be16_to_cpu(dent->de_name_len) == name->len &&
407 memcmp(dent+1, name->name, name->len) == 0)
412 static int gfs2_dirent_find(const struct gfs2_dirent *dent,
416 return __gfs2_dirent_find(dent, name, 1);
419 static int gfs2_dirent_prev(const struct gfs2_dirent *dent,
423 return __gfs2_dirent_find(dent, name, 2);
430 static int gfs2_dirent_last(const struct gfs2_dirent *dent,
435 const char *end = (const char *)dent + be16_to_cpu(dent->de_rec_len);
443 static int gfs2_dirent_find_offset(const struct gfs2_dirent *dent,
448 unsigned actual = GFS2_DIRENT_SIZE(be16_to_cpu(dent->de_name_len));
449 unsigned totlen = be16_to_cpu(dent->de_rec_len);
451 if (ptr < (void *)dent || ptr >= (void *)dent + totlen)
453 if (gfs2_dirent_sentinel(dent))
455 if (ptr < (void *)dent + actual)
457 if ((void *)dent + totlen >= ptr + required)
462 static int gfs2_dirent_find_space(const struct gfs2_dirent *dent,
467 unsigned actual = GFS2_DIRENT_SIZE(be16_to_cpu(dent->de_name_len));
468 unsigned totlen = be16_to_cpu(dent->de_rec_len);
470 if (gfs2_dirent_sentinel(dent))
482 static int gfs2_dirent_gather(const struct gfs2_dirent *dent,
487 if (!gfs2_dirent_sentinel(dent)) {
488 g->pdent[g->offset++] = dent;
503 struct gfs2_dirent *dent, unsigned int offset,
516 if (unlikely(!first && gfs2_dirent_sentinel(dent)))
519 if (!gfs2_dirent_sentinel(dent) &&
520 unlikely(sizeof(struct gfs2_dirent)+be16_to_cpu(dent->de_name_len) >
559 struct gfs2_dirent *dent, *prev;
570 dent = buf + offset;
571 size = be16_to_cpu(dent->de_rec_len);
572 if (gfs2_check_dirent(GFS2_SB(inode), dent, offset, size, len, 1))
575 ret = scan(dent, name, opaque);
581 prev = dent;
582 dent = buf + offset;
583 size = be16_to_cpu(dent->de_rec_len);
584 if (gfs2_check_dirent(GFS2_SB(inode), dent, offset, size,
593 return dent;
595 return prev ? prev : dent;
628 * @dent: Pointer to list of dirents
634 struct gfs2_dirent **dent)
636 struct gfs2_dirent *cur = *dent, *tmp;
649 /* Only the first dent could ever have de_inum.no_addr == 0 */
655 *dent = tmp;
706 struct gfs2_dirent *dent,
715 totlen = be16_to_cpu(dent->de_rec_len);
718 ndent = (struct gfs2_dirent *)((char *)dent + offset);
719 dent->de_rec_len = cpu_to_be16(offset);
726 * Takes a dent from which to grab space as an argument. Returns the
727 * newly created dent.
730 struct gfs2_dirent *dent,
736 if (!gfs2_dirent_sentinel(dent))
737 offset = GFS2_DIRENT_SIZE(be16_to_cpu(dent->de_name_len));
738 return do_init_dirent(inode, dent, name, bh, offset);
746 struct gfs2_dirent *dent;
747 dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size,
749 if (IS_ERR_OR_NULL(dent))
750 return dent;
751 return do_init_dirent(inode, dent, name, bh,
752 (unsigned)(ptr - (void *)dent));
811 struct gfs2_dirent *dent;
830 dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size,
832 if (dent)
850 dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size, scan, name, NULL);
852 if (IS_ERR_OR_NULL(dent)) {
857 return dent;
868 struct gfs2_dirent *dent;
891 dent = (struct gfs2_dirent *)(leaf+1);
892 gfs2_qstr2dirent(&empty_name, bh->b_size - sizeof(struct gfs2_leaf), dent);
908 struct gfs2_dirent *dent;
943 dent = gfs2_dirent_scan(&dip->i_inode, bh->b_data, bh->b_size,
945 if (!dent) {
950 if (IS_ERR(dent)) {
953 return PTR_ERR(dent);
957 (Remember that dent still points to the last entry.) */
959 dent->de_rec_len = cpu_to_be16(be16_to_cpu(dent->de_rec_len) +
1003 struct gfs2_dirent *dent = NULL, *prev = NULL, *next = NULL, *new;
1078 dent = (struct gfs2_dirent *)(obh->b_data + sizeof(struct gfs2_leaf));
1081 next = dent;
1085 if (!gfs2_dirent_sentinel(dent) &&
1086 be32_to_cpu(dent->de_hash) < divider) {
1088 void *ptr = ((char *)dent - obh->b_data) + nbh->b_data;
1089 str.name = (char*)(dent+1);
1090 str.len = be16_to_cpu(dent->de_name_len);
1091 str.hash = be32_to_cpu(dent->de_hash);
1098 new->de_inum = dent->de_inum; /* No endian worries */
1099 new->de_type = dent->de_type; /* No endian worries */
1102 dirent_del(dip, obh, prev, dent);
1109 prev = dent;
1111 prev = dent;
1113 dent = next;
1114 } while (dent);
1206 * @a: first dent
1207 * @b: second dent
1267 const struct gfs2_dirent *dent, *dent_next;
1280 dent = dent_next;
1303 if (!dir_emit(ctx, (const char *)(dent + 1),
1304 be16_to_cpu(dent->de_name_len),
1305 be64_to_cpu(dent->de_inum.no_addr),
1306 be16_to_cpu(dent->de_type)))
1376 struct gfs2_dirent **darr, *dent;
1427 dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size,
1429 error = PTR_ERR(dent);
1430 if (IS_ERR(dent))
1573 struct gfs2_dirent **darr, *dent;
1599 dent = gfs2_dirent_scan(inode, dibh->b_data, dibh->b_size,
1601 if (IS_ERR(dent)) {
1602 error = PTR_ERR(dent);
1646 struct gfs2_dirent *dent;
1650 dent = gfs2_dirent_search(dir, name, gfs2_dirent_find, &bh);
1651 if (dent) {
1655 if (IS_ERR(dent))
1656 return ERR_CAST(dent);
1657 dtype = be16_to_cpu(dent->de_type);
1658 rahead = be16_to_cpu(dent->de_rahead);
1659 addr = be64_to_cpu(dent->de_inum.no_addr);
1660 formal_ino = be64_to_cpu(dent->de_inum.no_formal_ino);
1677 struct gfs2_dirent *dent;
1680 dent = gfs2_dirent_search(dir, name, gfs2_dirent_find, &bh);
1681 if (dent) {
1682 if (IS_ERR(dent))
1683 return PTR_ERR(dent);
1685 if (be64_to_cpu(dent->de_inum.no_addr) != ip->i_no_addr)
1687 if (be64_to_cpu(dent->de_inum.no_formal_ino) !=
1691 be16_to_cpu(dent->de_type))) {
1800 struct gfs2_dirent *dent = da->dent;
1807 dent = gfs2_dirent_search(inode, name,
1810 if (dent) {
1811 if (IS_ERR(dent))
1812 return PTR_ERR(dent);
1813 dent = gfs2_init_dirent(inode, dent, name, bh);
1814 gfs2_inum_out(nip, dent);
1815 dent->de_type = cpu_to_be16(IF2DT(nip->i_inode.i_mode));
1816 dent->de_rahead = cpu_to_be16(gfs2_inode_ra_len(nip));
1824 da->dent = NULL;
1877 struct gfs2_dirent *dent, *prev = NULL;
1883 dent = gfs2_dirent_search(&dip->i_inode, name, gfs2_dirent_prev, &bh);
1884 if (!dent) {
1888 if (IS_ERR(dent)) {
1890 return PTR_ERR(dent);
1893 if (gfs2_dirent_find(dent, name, NULL) == 0) {
1894 prev = dent;
1895 dent = (struct gfs2_dirent *)((char *)dent + be16_to_cpu(prev->de_rec_len));
1898 dirent_del(dip, bh, prev, dent);
1940 struct gfs2_dirent *dent;
1942 dent = gfs2_dirent_search(&dip->i_inode, filename, gfs2_dirent_find, &bh);
1943 if (!dent) {
1947 if (IS_ERR(dent))
1948 return PTR_ERR(dent);
1951 gfs2_inum_out(nip, dent);
1952 dent->de_type = cpu_to_be16(new_type);
2162 struct gfs2_dirent *dent;
2167 da->dent = NULL;
2169 dent = gfs2_dirent_search(inode, name, gfs2_dirent_find_space, &bh);
2170 if (!dent) {
2177 if (IS_ERR(dent))
2178 return PTR_ERR(dent);
2182 da->dent = dent;