Lines Matching refs:dent

89 typedef int (*gfs2_dscan_t)(const struct gfs2_dirent *dent,
401 static inline int gfs2_dirent_sentinel(const struct gfs2_dirent *dent) in gfs2_dirent_sentinel() argument
403 return dent->de_inum.no_addr == 0 || dent->de_inum.no_formal_ino == 0; in gfs2_dirent_sentinel()
406 static inline int __gfs2_dirent_find(const struct gfs2_dirent *dent, in __gfs2_dirent_find() argument
409 if (!gfs2_dirent_sentinel(dent) && in __gfs2_dirent_find()
410 be32_to_cpu(dent->de_hash) == name->hash && in __gfs2_dirent_find()
411 be16_to_cpu(dent->de_name_len) == name->len && in __gfs2_dirent_find()
412 memcmp(dent+1, name->name, name->len) == 0) in __gfs2_dirent_find()
417 static int gfs2_dirent_find(const struct gfs2_dirent *dent, in gfs2_dirent_find() argument
421 return __gfs2_dirent_find(dent, name, 1); in gfs2_dirent_find()
424 static int gfs2_dirent_prev(const struct gfs2_dirent *dent, in gfs2_dirent_prev() argument
428 return __gfs2_dirent_find(dent, name, 2); in gfs2_dirent_prev()
435 static int gfs2_dirent_last(const struct gfs2_dirent *dent, in gfs2_dirent_last() argument
440 const char *end = (const char *)dent + be16_to_cpu(dent->de_rec_len); in gfs2_dirent_last()
446 static int gfs2_dirent_find_space(const struct gfs2_dirent *dent, in gfs2_dirent_find_space() argument
451 unsigned actual = GFS2_DIRENT_SIZE(be16_to_cpu(dent->de_name_len)); in gfs2_dirent_find_space()
452 unsigned totlen = be16_to_cpu(dent->de_rec_len); in gfs2_dirent_find_space()
454 if (gfs2_dirent_sentinel(dent)) in gfs2_dirent_find_space()
466 static int gfs2_dirent_gather(const struct gfs2_dirent *dent, in gfs2_dirent_gather() argument
471 if (!gfs2_dirent_sentinel(dent)) { in gfs2_dirent_gather()
472 g->pdent[g->offset++] = dent; in gfs2_dirent_gather()
486 static int gfs2_check_dirent(struct gfs2_dirent *dent, unsigned int offset, in gfs2_check_dirent() argument
499 if (unlikely(!first && gfs2_dirent_sentinel(dent))) in gfs2_check_dirent()
502 if (!gfs2_dirent_sentinel(dent) && in gfs2_check_dirent()
503 unlikely(sizeof(struct gfs2_dirent)+be16_to_cpu(dent->de_name_len) > in gfs2_check_dirent()
541 struct gfs2_dirent *dent, *prev; in gfs2_dirent_scan() local
552 dent = buf + offset; in gfs2_dirent_scan()
553 size = be16_to_cpu(dent->de_rec_len); in gfs2_dirent_scan()
554 if (gfs2_check_dirent(dent, offset, size, len, 1)) in gfs2_dirent_scan()
557 ret = scan(dent, name, opaque); in gfs2_dirent_scan()
563 prev = dent; in gfs2_dirent_scan()
564 dent = buf + offset; in gfs2_dirent_scan()
565 size = be16_to_cpu(dent->de_rec_len); in gfs2_dirent_scan()
566 if (gfs2_check_dirent(dent, offset, size, len, 0)) in gfs2_dirent_scan()
574 return dent; in gfs2_dirent_scan()
576 return prev ? prev : dent; in gfs2_dirent_scan()
615 struct gfs2_dirent **dent) in dirent_next() argument
617 struct gfs2_dirent *cur = *dent, *tmp; in dirent_next()
636 *dent = tmp; in dirent_next()
690 struct gfs2_dirent *dent, in gfs2_init_dirent() argument
698 if (!gfs2_dirent_sentinel(dent)) in gfs2_init_dirent()
699 offset = GFS2_DIRENT_SIZE(be16_to_cpu(dent->de_name_len)); in gfs2_init_dirent()
700 totlen = be16_to_cpu(dent->de_rec_len); in gfs2_init_dirent()
703 ndent = (struct gfs2_dirent *)((char *)dent + offset); in gfs2_init_dirent()
704 dent->de_rec_len = cpu_to_be16(offset); in gfs2_init_dirent()
713 struct gfs2_dirent *dent; in gfs2_dirent_alloc() local
714 dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size, in gfs2_dirent_alloc()
716 if (!dent || IS_ERR(dent)) in gfs2_dirent_alloc()
717 return dent; in gfs2_dirent_alloc()
718 return gfs2_init_dirent(inode, dent, name, bh); in gfs2_dirent_alloc()
775 struct gfs2_dirent *dent; in gfs2_dirent_search() local
794 dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size, in gfs2_dirent_search()
796 if (dent) in gfs2_dirent_search()
814 dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size, scan, name, NULL); in gfs2_dirent_search()
816 if (unlikely(dent == NULL || IS_ERR(dent))) { in gfs2_dirent_search()
821 return dent; in gfs2_dirent_search()
832 struct gfs2_dirent *dent; in new_leaf() local
856 dent = (struct gfs2_dirent *)(leaf+1); in new_leaf()
857 gfs2_qstr2dirent(&name, bh->b_size - sizeof(struct gfs2_leaf), dent); in new_leaf()
873 struct gfs2_dirent *dent; in dir_make_exhash() local
908 dent = gfs2_dirent_scan(&dip->i_inode, bh->b_data, bh->b_size, in dir_make_exhash()
910 if (!dent) { in dir_make_exhash()
915 if (IS_ERR(dent)) { in dir_make_exhash()
918 return PTR_ERR(dent); in dir_make_exhash()
924 dent->de_rec_len = cpu_to_be16(be16_to_cpu(dent->de_rec_len) + in dir_make_exhash()
969 struct gfs2_dirent *dent = NULL, *prev = NULL, *next = NULL, *new; in dir_split_leaf() local
1044 dent = (struct gfs2_dirent *)(obh->b_data + sizeof(struct gfs2_leaf)); in dir_split_leaf()
1047 next = dent; in dir_split_leaf()
1051 if (!gfs2_dirent_sentinel(dent) && in dir_split_leaf()
1052 be32_to_cpu(dent->de_hash) < divider) { in dir_split_leaf()
1054 str.name = (char*)(dent+1); in dir_split_leaf()
1055 str.len = be16_to_cpu(dent->de_name_len); in dir_split_leaf()
1056 str.hash = be32_to_cpu(dent->de_hash); in dir_split_leaf()
1063 new->de_inum = dent->de_inum; /* No endian worries */ in dir_split_leaf()
1064 new->de_type = dent->de_type; /* No endian worries */ in dir_split_leaf()
1067 dirent_del(dip, obh, prev, dent); in dir_split_leaf()
1074 prev = dent; in dir_split_leaf()
1078 prev = dent; in dir_split_leaf()
1080 dent = next; in dir_split_leaf()
1081 } while (dent); in dir_split_leaf()
1233 const struct gfs2_dirent *dent, *dent_next; in do_filldir_main() local
1245 dent = dent_next; in do_filldir_main()
1269 if (!dir_emit(ctx, (const char *)(dent + 1), in do_filldir_main()
1270 be16_to_cpu(dent->de_name_len), in do_filldir_main()
1271 be64_to_cpu(dent->de_inum.no_addr), in do_filldir_main()
1272 be16_to_cpu(dent->de_type))) in do_filldir_main()
1308 const struct gfs2_dirent **darr, *dent; in gfs2_dir_read_leaf() local
1354 dent = gfs2_dirent_scan(inode, bh->b_data, bh->b_size, in gfs2_dir_read_leaf()
1356 error = PTR_ERR(dent); in gfs2_dir_read_leaf()
1357 if (IS_ERR(dent)) in gfs2_dir_read_leaf()
1486 const struct gfs2_dirent **darr, *dent; in gfs2_dir_read() local
1512 dent = gfs2_dirent_scan(inode, dibh->b_data, dibh->b_size, in gfs2_dir_read()
1514 if (IS_ERR(dent)) { in gfs2_dir_read()
1515 error = PTR_ERR(dent); in gfs2_dir_read()
1557 struct gfs2_dirent *dent; in gfs2_dir_search() local
1561 dent = gfs2_dirent_search(dir, name, gfs2_dirent_find, &bh); in gfs2_dir_search()
1562 if (dent) { in gfs2_dir_search()
1563 if (IS_ERR(dent)) in gfs2_dir_search()
1564 return ERR_CAST(dent); in gfs2_dir_search()
1565 dtype = be16_to_cpu(dent->de_type); in gfs2_dir_search()
1566 addr = be64_to_cpu(dent->de_inum.no_addr); in gfs2_dir_search()
1567 formal_ino = be64_to_cpu(dent->de_inum.no_formal_ino); in gfs2_dir_search()
1580 struct gfs2_dirent *dent; in gfs2_dir_check() local
1583 dent = gfs2_dirent_search(dir, name, gfs2_dirent_find, &bh); in gfs2_dir_check()
1584 if (dent) { in gfs2_dir_check()
1585 if (IS_ERR(dent)) in gfs2_dir_check()
1586 return PTR_ERR(dent); in gfs2_dir_check()
1588 if (be64_to_cpu(dent->de_inum.no_addr) != ip->i_no_addr) in gfs2_dir_check()
1590 if (be64_to_cpu(dent->de_inum.no_formal_ino) != in gfs2_dir_check()
1594 be16_to_cpu(dent->de_type))) { in gfs2_dir_check()
1703 struct gfs2_dirent *dent = da->dent; in gfs2_dir_add() local
1710 dent = gfs2_dirent_search(inode, name, in gfs2_dir_add()
1713 if (dent) { in gfs2_dir_add()
1714 if (IS_ERR(dent)) in gfs2_dir_add()
1715 return PTR_ERR(dent); in gfs2_dir_add()
1716 dent = gfs2_init_dirent(inode, dent, name, bh); in gfs2_dir_add()
1717 gfs2_inum_out(nip, dent); in gfs2_dir_add()
1718 dent->de_type = cpu_to_be16(IF2DT(nip->i_inode.i_mode)); in gfs2_dir_add()
1719 dent->de_rahead = cpu_to_be16(gfs2_inode_ra_len(nip)); in gfs2_dir_add()
1727 da->dent = NULL; in gfs2_dir_add()
1780 struct gfs2_dirent *dent, *prev = NULL; in gfs2_dir_del() local
1786 dent = gfs2_dirent_search(&dip->i_inode, name, gfs2_dirent_prev, &bh); in gfs2_dir_del()
1787 if (!dent) { in gfs2_dir_del()
1791 if (IS_ERR(dent)) { in gfs2_dir_del()
1793 return PTR_ERR(dent); in gfs2_dir_del()
1796 if (gfs2_dirent_find(dent, name, NULL) == 0) { in gfs2_dir_del()
1797 prev = dent; in gfs2_dir_del()
1798 dent = (struct gfs2_dirent *)((char *)dent + be16_to_cpu(prev->de_rec_len)); in gfs2_dir_del()
1801 dirent_del(dip, bh, prev, dent); in gfs2_dir_del()
1841 struct gfs2_dirent *dent; in gfs2_dir_mvino() local
1844 dent = gfs2_dirent_search(&dip->i_inode, filename, gfs2_dirent_find, &bh); in gfs2_dir_mvino()
1845 if (!dent) { in gfs2_dir_mvino()
1849 if (IS_ERR(dent)) in gfs2_dir_mvino()
1850 return PTR_ERR(dent); in gfs2_dir_mvino()
1853 gfs2_inum_out(nip, dent); in gfs2_dir_mvino()
1854 dent->de_type = cpu_to_be16(new_type); in gfs2_dir_mvino()
2069 struct gfs2_dirent *dent; in gfs2_diradd_alloc_required() local
2074 da->dent = NULL; in gfs2_diradd_alloc_required()
2076 dent = gfs2_dirent_search(inode, name, gfs2_dirent_find_space, &bh); in gfs2_diradd_alloc_required()
2077 if (!dent) { in gfs2_diradd_alloc_required()
2084 if (IS_ERR(dent)) in gfs2_diradd_alloc_required()
2085 return PTR_ERR(dent); in gfs2_diradd_alloc_required()
2089 da->dent = dent; in gfs2_diradd_alloc_required()