Home | History | Annotate | Download | only in fsck_lfs

Lines Matching defs:idesc

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