• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/fs/hpfs/

Lines Matching refs:dnode

2  *  linux/fs/hpfs/dnode.c
6 * handling directory dnode tree - adding, deleteing & searching for dirents
11 static loff_t get_pos(struct dnode *d, struct hpfs_dirent *fde)
109 static struct hpfs_dirent *dnode_pre_last_de(struct dnode *d)
119 static struct hpfs_dirent *dnode_last_de(struct dnode *d)
129 static void set_last_pointer(struct super_block *s, struct dnode *d, dnode_secno ptr)
133 hpfs_error(s, "set_last_pointer: empty dnode %08x", d->self);
138 hpfs_error(s, "set_last_pointer: dnode %08x has already last pointer %08x",
143 hpfs_error(s, "set_last_pointer: bad last dirent in dnode %08x", d->self);
149 hpfs_error(s,"set_last_pointer: too long dnode %08x", d->self);
159 /* Add an entry to dnode and don't care if it grows over 2048 bytes */
161 struct hpfs_dirent *hpfs_add_de(struct super_block *s, struct dnode *d, unsigned char *name,
170 hpfs_error(s, "name (%c,%d) already exists in dnode %08x", *name, namelen, d->self);
192 static void hpfs_delete_de(struct super_block *s, struct dnode *d,
196 hpfs_error(s, "attempt to delete last dirent in dnode %08x", d->self);
203 static void fix_up_ptrs(struct super_block *s, struct dnode *d)
211 struct dnode *dd;
223 /* Add an entry to dnode and do dnode splitting if required */
230 struct dnode *d, *ad, *rd, *nd = NULL;
241 printk("HPFS: out of memory, can't add to dnode\n");
278 /* 0x924 is a max size of dnode after adding a dirent with
283 printk("HPFS: out of memory for dnode splitting\n");
293 hpfs_error(i->i_sb, "unable to alloc dnode - dnode tree will be corrupted");
327 hpfs_error(i->i_sb, "unable to alloc dnode - dnode tree will be corrupted");
375 struct dnode *d;
415 * Find dirent with higher name in 'from' subtree and move it to 'to' dnode.
416 * Return the dnode we moved from (to be checked later if it's empty)
423 struct dnode *dnode;
434 if (!(dnode = hpfs_map_dnode(i->i_sb, dno, &qbh))) return 0;
436 if (dnode->up != chk_up) {
438 dno, chk_up, dnode->up);
444 if (!(de = dnode_last_de(dnode))) {
445 hpfs_error(i->i_sb, "move_to_top: dnode %08x has no last de", dno);
453 while (!(de = dnode_pre_last_de(dnode))) {
454 dnode_secno up = dnode->up;
461 if (!(dnode = hpfs_map_dnode(i->i_sb, up, &qbh))) return 0;
462 if (dnode->root_dnode) {
467 de = dnode_last_de(dnode);
469 hpfs_error(i->i_sb, "move_to_top: dnode %08x doesn't point down to %08x", up, dno);
473 dnode->first_free -= 4;
479 t = get_pos(dnode, de);
489 hpfs_delete_de(i->i_sb, dnode, de);
490 set_last_pointer(i->i_sb, dnode, ddno);
500 * Check if a dnode is empty and delete it from the tree
508 struct dnode *dnode;
515 if (!(dnode = hpfs_map_dnode(i->i_sb, dno, &qbh))) return;
516 if (dnode->first_free > 56) goto end;
517 if (dnode->first_free == 52 || dnode->first_free == 56) {
519 int root = dnode->root_dnode;
520 up = dnode->up;
521 de = dnode_first_de(dnode);
524 hpfs_error(i->i_sb, "delete_empty_dnode: root dnode %08x is empty", dno);
534 struct dnode *d1;
539 "bad pointer to fnode, dnode %08x, pointing to %08x, should be %08lx",
558 if (!(dnode = hpfs_map_dnode(i->i_sb, up, &qbh))) return;
560 de_end = dnode_end_de(dnode);
561 for (de = dnode_first_de(dnode); de < de_end; de = de_next_de(de), p++)
563 hpfs_error(i->i_sb, "delete_empty_dnode: pointer to dnode %08x not found in dnode %08x", dno, up);
570 dnode->first_free -= 4;
572 (char *)dnode + dnode->first_free - (char *)de_next_de(de));
574 struct dnode *d1;
584 hpfs_error(i->i_sb, "delete_empty_dnode: dnode %08x, first_free == %03x", dno, dnode->first_free);
591 struct dnode *d1;
600 hpfs_delete_de(i->i_sb, dnode, de);
616 struct hpfs_dirent *de_prev = dnode_pre_last_de(dnode);
618 struct dnode *d1;
622 hpfs_error(i->i_sb, "delete_empty_dnode: empty dnode %08x", up);
636 printk("HPFS: warning: unbalanced dnode tree, see hpfs.txt 4 more info\n");
643 printk("HPFS: warning: unbalanced dnode tree, see hpfs.txt 4 more info\n");
665 hpfs_delete_de(i->i_sb, dnode, de_prev);
669 dnode->first_free += 4;
698 struct dnode *dnode = qbh->data;
703 hpfs_error(i->i_sb, "hpfs_remove_dirent: attempt to delete first or last dirent in dnode %08x", dno);
708 if (depth && (de->down || (de == dnode_first_de(dnode) && de_next_de(de)->last))) {
718 for_all_poss(i, hpfs_pos_del, (t = get_pos(dnode, de)) + 1, 1);
719 hpfs_delete_de(i->i_sb, dnode, de);
737 struct dnode *dnode;
749 if (!(dnode = hpfs_map_dnode(s, dno, &qbh))) return;
750 if (hpfs_sb(s)->sb_chk) if (odno && odno != -1 && dnode->up != odno)
751 hpfs_error(s, "hpfs_count_dnodes: bad up pointer; dnode %08x, down %08x points to %08x", odno, dno, dnode->up);
752 de = dnode_first_de(dnode);
757 hpfs_error(s, "hpfs_count_dnodes: pointer to dnode %08x not found in dnode %08x, got here from %08x",
773 if ((de = de_next_de(de)) < dnode_end_de(dnode)) goto next_de;
775 dno = dnode->up;
776 if (dnode->root_dnode) {
788 struct quad_buffer_head *qbh, struct dnode **dn)
792 struct dnode *dnode;
793 dnode = hpfs_map_dnode(s, dno, qbh);
794 if (!dnode) return NULL;
795 if (dn) *dn=dnode;
796 de = dnode_first_de(dnode);
797 de_end = dnode_end_de(dnode);
805 hpfs_error(s, "map_nth_dirent: n too high; dnode = %08x, requested %08x", dno, n);
823 if (up && ((struct dnode *)qbh.data)->up != up)
824 hpfs_error(s, "hpfs_de_as_down_as_possible: bad up pointer; dnode %08x, down %08x points to %08x", up, d, ((struct dnode *)qbh.data)->up);
844 struct dnode *dnode;
845 struct dnode *up_dnode;
851 if (!(de = map_nth_dirent(inode->i_sb, dno, pos, qbh, &dnode)))
855 if ((d = de_next_de(de)) < dnode_end_de(dnode)) {
858 "map_pos_dirent: pos crossed dnode boundary; pos = %08llx",
871 if (dnode->root_dnode) goto bail;
873 if (!(up_dnode = hpfs_map_dnode(inode->i_sb, dnode->up, &qbh0)))
881 "map_pos_dirent: pos crossed dnode boundary; dnode = %08x", dnode->up);
883 *posp = ((loff_t) dnode->up << 4) + c;
889 hpfs_error(inode->i_sb, "map_pos_dirent: pointer to dnode %08x not found in parent dnode %08x",
890 dno, dnode->up);
903 struct dnode *dnode;
912 if (!(dnode = hpfs_map_dnode(inode->i_sb, dno, qbh))) return NULL;
914 de_end = dnode_end_de(dnode);
915 for (de = dnode_first_de(dnode); de < de_end; de = de_next_de(de)) {
935 * Remove empty directory. In normal cases it is only one dnode with two
943 struct dnode *dnode;
947 if (!(dnode = hpfs_map_dnode(s, dno, &qbh))) return;
948 de = dnode_first_de(dnode);
966 if (!(dnode = hpfs_map_dnode(s, dno = d1, &qbh))) return;
967 de = dnode_first_de(dnode);
994 struct dnode *d;
1041 hpfs_error(s, "pointer to dnode %08x not found in dnode %08x", downd, dno);