Lines Matching refs:dnode

3  *  linux/fs/hpfs/dnode.c
7 * handling directory dnode tree - adding, deleteing & searching for dirents
12 static loff_t get_pos(struct dnode *d, struct hpfs_dirent *fde)
120 static struct hpfs_dirent *dnode_pre_last_de(struct dnode *d)
130 static struct hpfs_dirent *dnode_last_de(struct dnode *d)
140 static void set_last_pointer(struct super_block *s, struct dnode *d, dnode_secno ptr)
144 hpfs_error(s, "set_last_pointer: empty dnode %08x", le32_to_cpu(d->self));
149 hpfs_error(s, "set_last_pointer: dnode %08x has already last pointer %08x",
154 hpfs_error(s, "set_last_pointer: bad last dirent in dnode %08x", le32_to_cpu(d->self));
161 hpfs_error(s, "set_last_pointer: too long dnode %08x", le32_to_cpu(d->self));
171 /* Add an entry to dnode and don't care if it grows over 2048 bytes */
173 struct hpfs_dirent *hpfs_add_de(struct super_block *s, struct dnode *d,
183 hpfs_error(s, "name (%c,%d) already exists in dnode %08x", *name, namelen, le32_to_cpu(d->self));
204 static void hpfs_delete_de(struct super_block *s, struct dnode *d,
208 hpfs_error(s, "attempt to delete last dirent in dnode %08x", le32_to_cpu(d->self));
215 static void fix_up_ptrs(struct super_block *s, struct dnode *d)
223 struct dnode *dd;
235 /* Add an entry to dnode and do dnode splitting if required */
242 struct dnode *d, *ad, *rd, *nd = NULL;
253 pr_err("out of memory, can't add to dnode\n");
290 /* 0x924 is a max size of dnode after adding a dirent with
295 pr_err("out of memory for dnode splitting\n");
305 hpfs_error(i->i_sb, "unable to alloc dnode - dnode tree will be corrupted");
342 hpfs_error(i->i_sb, "unable to alloc dnode - dnode tree will be corrupted");
392 struct dnode *d;
429 * Find dirent with higher name in 'from' subtree and move it to 'to' dnode.
430 * Return the dnode we moved from (to be checked later if it's empty)
437 struct dnode *dnode;
448 if (!(dnode = hpfs_map_dnode(i->i_sb, dno, &qbh))) return 0;
450 if (le32_to_cpu(dnode->up) != chk_up) {
452 dno, chk_up, le32_to_cpu(dnode->up));
458 if (!(de = dnode_last_de(dnode))) {
459 hpfs_error(i->i_sb, "move_to_top: dnode %08x has no last de", dno);
467 while (!(de = dnode_pre_last_de(dnode))) {
468 dnode_secno up = le32_to_cpu(dnode->up);
475 if (!(dnode = hpfs_map_dnode(i->i_sb, up, &qbh))) return 0;
476 if (dnode->root_dnode) {
481 de = dnode_last_de(dnode);
483 hpfs_error(i->i_sb, "move_to_top: dnode %08x doesn't point down to %08x", up, dno);
487 le32_add_cpu(&dnode->first_free, -4);
493 t = get_pos(dnode, de);
503 hpfs_delete_de(i->i_sb, dnode, de);
504 set_last_pointer(i->i_sb, dnode, ddno);
514 * Check if a dnode is empty and delete it from the tree
522 struct dnode *dnode;
529 if (!(dnode = hpfs_map_dnode(i->i_sb, dno, &qbh))) return;
530 if (le32_to_cpu(dnode->first_free) > 56) goto end;
531 if (le32_to_cpu(dnode->first_free) == 52 || le32_to_cpu(dnode->first_free) == 56) {
533 int root = dnode->root_dnode;
534 up = le32_to_cpu(dnode->up);
535 de = dnode_first_de(dnode);
538 hpfs_error(i->i_sb, "delete_empty_dnode: root dnode %08x is empty", dno);
548 struct dnode *d1;
553 "bad pointer to fnode, dnode %08x, pointing to %08x, should be %08lx",
573 if (!(dnode = hpfs_map_dnode(i->i_sb, up, &qbh))) return;
575 de_end = dnode_end_de(dnode);
576 for (de = dnode_first_de(dnode); de < de_end; de = de_next_de(de), p++)
578 hpfs_error(i->i_sb, "delete_empty_dnode: pointer to dnode %08x not found in dnode %08x", dno, up);
585 le32_add_cpu(&dnode->first_free, -4);
587 (char *)dnode + le32_to_cpu(dnode->first_free) - (char *)de_next_de(de));
589 struct dnode *d1;
599 hpfs_error(i->i_sb, "delete_empty_dnode: dnode %08x, first_free == %03x", dno, le32_to_cpu(dnode->first_free));
606 struct dnode *d1;
615 hpfs_delete_de(i->i_sb, dnode, de);
632 struct hpfs_dirent *de_prev = dnode_pre_last_de(dnode);
634 struct dnode *d1;
638 hpfs_error(i->i_sb, "delete_empty_dnode: empty dnode %08x", up);
652 pr_err("unbalanced dnode tree, see hpfs.txt 4 more info\n");
659 pr_err("unbalanced dnode tree, see hpfs.txt 4 more info\n");
681 hpfs_delete_de(i->i_sb, dnode, de_prev);
685 le32_add_cpu(&dnode->first_free, 4);
714 struct dnode *dnode = qbh->data;
718 hpfs_error(i->i_sb, "hpfs_remove_dirent: attempt to delete first or last dirent in dnode %08x", dno);
723 if (depth && (de->down || (de == dnode_first_de(dnode) && de_next_de(de)->last))) {
729 for_all_poss(i, hpfs_pos_del, (t = get_pos(dnode, de)) + 1, 1);
730 hpfs_delete_de(i->i_sb, dnode, de);
746 struct dnode *dnode;
758 if (!(dnode = hpfs_map_dnode(s, dno, &qbh))) return;
759 if (hpfs_sb(s)->sb_chk) if (odno && odno != -1 && le32_to_cpu(dnode->up) != odno)
760 hpfs_error(s, "hpfs_count_dnodes: bad up pointer; dnode %08x, down %08x points to %08x", odno, dno, le32_to_cpu(dnode->up));
761 de = dnode_first_de(dnode);
766 hpfs_error(s, "hpfs_count_dnodes: pointer to dnode %08x not found in dnode %08x, got here from %08x",
782 if ((de = de_next_de(de)) < dnode_end_de(dnode)) goto next_de;
784 dno = le32_to_cpu(dnode->up);
785 if (dnode->root_dnode) {
797 struct quad_buffer_head *qbh, struct dnode **dn)
801 struct dnode *dnode;
802 dnode = hpfs_map_dnode(s, dno, qbh);
803 if (!dnode) return NULL;
804 if (dn) *dn=dnode;
805 de = dnode_first_de(dnode);
806 de_end = dnode_end_de(dnode);
814 hpfs_error(s, "map_nth_dirent: n too high; dnode = %08x, requested %08x", dno, n);
832 if (up && le32_to_cpu(((struct dnode *)qbh.data)->up) != up)
833 hpfs_error(s, "hpfs_de_as_down_as_possible: bad up pointer; dnode %08x, down %08x points to %08x", up, d, le32_to_cpu(((struct dnode *)qbh.data)->up));
853 struct dnode *dnode;
854 struct dnode *up_dnode;
860 if (!(de = map_nth_dirent(inode->i_sb, dno, pos, qbh, &dnode)))
864 if ((d = de_next_de(de)) < dnode_end_de(dnode)) {
867 "map_pos_dirent: pos crossed dnode boundary; pos = %08llx",
880 if (dnode->root_dnode) goto bail;
882 if (!(up_dnode = hpfs_map_dnode(inode->i_sb, le32_to_cpu(dnode->up), &qbh0)))
890 "map_pos_dirent: pos crossed dnode boundary; dnode = %08x", le32_to_cpu(dnode->up));
892 *posp = ((loff_t) le32_to_cpu(dnode->up) << 4) + c;
898 hpfs_error(inode->i_sb, "map_pos_dirent: pointer to dnode %08x not found in parent dnode %08x",
899 dno, le32_to_cpu(dnode->up));
913 struct dnode *dnode;
922 if (!(dnode = hpfs_map_dnode(inode->i_sb, dno, qbh))) return NULL;
924 de_end = dnode_end_de(dnode);
925 for (de = dnode_first_de(dnode); de < de_end; de = de_next_de(de)) {
945 * Remove empty directory. In normal cases it is only one dnode with two
953 struct dnode *dnode;
957 if (!(dnode = hpfs_map_dnode(s, dno, &qbh))) return;
958 de = dnode_first_de(dnode);
976 if (!(dnode = hpfs_map_dnode(s, dno = d1, &qbh))) return;
977 de = dnode_first_de(dnode);
1004 struct dnode *d;
1051 hpfs_error(s, "pointer to dnode %08x not found in dnode %08x", downd, dno);