Lines Matching refs:idesc
131 dirscan(struct inodesc *idesc) in dirscan() argument
140 if (idesc->id_type != DATA) in dirscan()
141 errexit("wrong type to dirscan %d", idesc->id_type); in dirscan()
142 if (idesc->id_entryno == 0 && in dirscan()
143 (idesc->id_filesize & (LFS_DIRBLKSIZ - 1)) != 0) in dirscan()
144 idesc->id_filesize = roundup(idesc->id_filesize, LFS_DIRBLKSIZ); in dirscan()
145 blksiz = idesc->id_numfrags * lfs_sb_getfsize(fs); in dirscan()
146 if (chkrange(idesc->id_blkno, idesc->id_numfrags)) { in dirscan()
147 idesc->id_filesize -= blksiz; in dirscan()
150 idesc->id_loc = 0; in dirscan()
152 vp = vget(fs, idesc->id_number); in dirscan()
153 for (dp = fsck_readdir(vp, idesc); dp != NULL; in dirscan()
154 dp = fsck_readdir(vp, idesc)) { in dirscan()
157 idesc->id_dirp = (LFS_DIRHEADER *) dbuf; in dirscan()
158 if ((n = (*idesc->id_func) (idesc)) & ALTERED) { in dirscan()
159 bread(vp, idesc->id_lblkno, blksiz, 0, &bp); in dirscan()
160 memcpy(bp->b_data + idesc->id_loc - dsize, dbuf, in dirscan()
168 return (idesc->id_filesize > 0 ? KEEPON : STOP); in dirscan()
175 fsck_readdir(struct uvnode *vp, struct inodesc *idesc) in fsck_readdir() argument
181 blksiz = idesc->id_numfrags * lfs_sb_getfsize(fs); in fsck_readdir()
182 bread(vp, idesc->id_lblkno, blksiz, 0, &bp); in fsck_readdir()
183 if (idesc->id_loc % LFS_DIRBLKSIZ == 0 && idesc->id_filesize > 0 && in fsck_readdir()
184 idesc->id_loc < blksiz) { in fsck_readdir()
185 dp = (LFS_DIRHEADER *) (bp->b_data + idesc->id_loc); in fsck_readdir()
186 if (dircheck(idesc, dp)) in fsck_readdir()
189 if (idesc->id_fix == IGNORE) in fsck_readdir()
191 fix = dofix(idesc, "DIRECTORY CORRUPTED"); in fsck_readdir()
192 bread(vp, idesc->id_lblkno, blksiz, 0, &bp); in fsck_readdir()
193 dp = (LFS_DIRHEADER *) (bp->b_data + idesc->id_loc); in fsck_readdir()
205 idesc->id_loc += LFS_DIRBLKSIZ; in fsck_readdir()
206 idesc->id_filesize -= LFS_DIRBLKSIZ; in fsck_readdir()
210 if (idesc->id_filesize <= 0 || idesc->id_loc >= blksiz) { in fsck_readdir()
214 dploc = idesc->id_loc; in fsck_readdir()
216 idesc->id_loc += lfs_dir_getreclen(fs, dp); in fsck_readdir()
217 idesc->id_filesize -= lfs_dir_getreclen(fs, dp); in fsck_readdir()
218 if ((idesc->id_loc % LFS_DIRBLKSIZ) == 0) { in fsck_readdir()
222 ndp = (LFS_DIRHEADER *) (bp->b_data + idesc->id_loc); in fsck_readdir()
223 if (idesc->id_loc < blksiz && idesc->id_filesize > 0 && in fsck_readdir()
224 dircheck(idesc, ndp) == 0) { in fsck_readdir()
226 size = LFS_DIRBLKSIZ - (idesc->id_loc % LFS_DIRBLKSIZ); in fsck_readdir()
227 idesc->id_loc += size; in fsck_readdir()
228 idesc->id_filesize -= size; in fsck_readdir()
229 if (idesc->id_fix == IGNORE) in fsck_readdir()
231 fix = dofix(idesc, "DIRECTORY CORRUPTED"); in fsck_readdir()
232 bread(vp, idesc->id_lblkno, blksiz, 0, &bp); in fsck_readdir()
250 dircheck(struct inodesc *idesc, LFS_DIRHEADER *dp) in dircheck() argument
257 spaceleft = LFS_DIRBLKSIZ - (idesc->id_loc % LFS_DIRBLKSIZ); in dircheck()
276 idesc->id_filesize < size || in dircheck()
331 adjust(struct inodesc *idesc, short lcnt) in adjust() argument
342 vp = vget(fs, idesc->id_number); in adjust()
345 if (linkup(idesc->id_number, (ino_t) 0) == 0) in adjust()
346 clri(idesc, "UNREF", 0); in adjust()
348 pwarn("LINK COUNT %s", (lfdir == idesc->id_number) ? lfname : in adjust()
350 pinode(idesc->id_number); in adjust()
369 mkentry(struct inodesc *idesc) in mkentry() argument
371 LFS_DIRHEADER *dirp = idesc->id_dirp; in mkentry()
376 namlen = strlen(idesc->id_name); in mkentry()
397 lfs_dir_setino(fs, dirp, idesc->id_parent); in mkentry()
399 lfs_dir_settype(fs, dirp, typemap[idesc->id_parent]); in mkentry()
401 lfs_copydirname(fs, lfs_dir_nameptr(fs, dirp), idesc->id_name, in mkentry()
408 chgino(struct inodesc *idesc) in chgino() argument
410 LFS_DIRHEADER *dirp = idesc->id_dirp; in chgino()
414 if (memcmp(lfs_dir_nameptr(fs, dirp), idesc->id_name, namlen + 1)) in chgino()
416 lfs_dir_setino(fs, dirp, idesc->id_parent); in chgino()
417 lfs_dir_settype(fs, dirp, typemap[idesc->id_parent]); in chgino()
427 struct inodesc idesc; in linkup() local
431 memset(&idesc, 0, sizeof(struct inodesc)); in linkup()
445 idesc.id_name = lfname; in linkup()
446 idesc.id_type = DATA; in linkup()
447 idesc.id_func = findino; in linkup()
448 idesc.id_number = ULFS_ROOTINO; in linkup()
449 if ((ckinode(dp, &idesc) & FOUND) != 0) { in linkup()
450 lfdir = idesc.id_parent; in linkup()
490 idesc.id_type = ADDR; in linkup()
491 idesc.id_func = pass4check; in linkup()
492 idesc.id_number = oldlfdir; in linkup()
493 adjust(&idesc, lncntp[oldlfdir] + 1); in linkup()
534 struct inodesc idesc; in changeino() local
536 memset(&idesc, 0, sizeof(struct inodesc)); in changeino()
537 idesc.id_type = DATA; in changeino()
538 idesc.id_func = chgino; in changeino()
539 idesc.id_number = dir; in changeino()
540 idesc.id_fix = DONTKNOW; in changeino()
541 idesc.id_name = name; in changeino()
542 idesc.id_parent = newnum; /* new value for name */ in changeino()
544 return (ckinode(ginode(dir), &idesc)); in changeino()
554 struct inodesc idesc; in makeentry() local
562 memset(&idesc, 0, sizeof(struct inodesc)); in makeentry()
563 idesc.id_type = DATA; in makeentry()
564 idesc.id_func = mkentry; in makeentry()
565 idesc.id_number = parent; in makeentry()
566 idesc.id_parent = ino; /* this is the inode to enter */ in makeentry()
567 idesc.id_fix = DONTKNOW; in makeentry()
568 idesc.id_name = name; in makeentry()
577 if ((ckinode(dp, &idesc) & ALTERED) != 0) in makeentry()
584 return (ckinode(dp, &idesc) & ALTERED); in makeentry()