Deleted Added
full compact
inode.c (57573) inode.c (62668)
1/*
2 * Copyright (c) 1980, 1986, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 22 unchanged lines hidden (view full) ---

31 * SUCH DAMAGE.
32 */
33
34#ifndef lint
35#if 0
36static const char sccsid[] = "@(#)inode.c 8.8 (Berkeley) 4/28/95";
37#endif
38static const char rcsid[] =
1/*
2 * Copyright (c) 1980, 1986, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 22 unchanged lines hidden (view full) ---

31 * SUCH DAMAGE.
32 */
33
34#ifndef lint
35#if 0
36static const char sccsid[] = "@(#)inode.c 8.8 (Berkeley) 4/28/95";
37#endif
38static const char rcsid[] =
39 "$FreeBSD: head/sbin/fsck_ffs/inode.c 57573 2000-02-28 20:02:41Z mckusick $";
39 "$FreeBSD: head/sbin/fsck_ffs/inode.c 62668 2000-07-06 02:03:11Z mckusick $";
40#endif /* not lint */
41
42#include <sys/param.h>
43#include <sys/time.h>
44
45#include <ufs/ufs/dinode.h>
46#include <ufs/ufs/dir.h>
47#include <ufs/ffs/fs.h>

--- 18 unchanged lines hidden (view full) ---

66 long n, ndb, offset;
67 struct dinode dino;
68 quad_t remsize, sizepb;
69 mode_t mode;
70 char pathbuf[MAXPATHLEN + 1];
71
72 if (idesc->id_fix != IGNORE)
73 idesc->id_fix = DONTKNOW;
40#endif /* not lint */
41
42#include <sys/param.h>
43#include <sys/time.h>
44
45#include <ufs/ufs/dinode.h>
46#include <ufs/ufs/dir.h>
47#include <ufs/ffs/fs.h>

--- 18 unchanged lines hidden (view full) ---

66 long n, ndb, offset;
67 struct dinode dino;
68 quad_t remsize, sizepb;
69 mode_t mode;
70 char pathbuf[MAXPATHLEN + 1];
71
72 if (idesc->id_fix != IGNORE)
73 idesc->id_fix = DONTKNOW;
74 idesc->id_lbn = -1;
74 idesc->id_entryno = 0;
75 idesc->id_filesize = dp->di_size;
76 mode = dp->di_mode & IFMT;
77 if (mode == IFBLK || mode == IFCHR || (mode == IFLNK &&
78 dp->di_size < (unsigned)sblock.fs_maxsymlinklen))
79 return (KEEPON);
80 dino = *dp;
81 ndb = howmany(dino.di_size, sblock.fs_bsize);
82 for (ap = &dino.di_db[0]; ap < &dino.di_db[NDADDR]; ap++) {
75 idesc->id_entryno = 0;
76 idesc->id_filesize = dp->di_size;
77 mode = dp->di_mode & IFMT;
78 if (mode == IFBLK || mode == IFCHR || (mode == IFLNK &&
79 dp->di_size < (unsigned)sblock.fs_maxsymlinklen))
80 return (KEEPON);
81 dino = *dp;
82 ndb = howmany(dino.di_size, sblock.fs_bsize);
83 for (ap = &dino.di_db[0]; ap < &dino.di_db[NDADDR]; ap++) {
84 idesc->id_lbn++;
83 if (--ndb == 0 && (offset = blkoff(&sblock, dino.di_size)) != 0)
84 idesc->id_numfrags =
85 numfrags(&sblock, fragroundup(&sblock, offset));
86 else
87 idesc->id_numfrags = sblock.fs_frag;
88 if (*ap == 0) {
89 if (idesc->id_type == DATA && ndb >= 0) {
90 /* An empty block in a directory XXX */

--- 10 unchanged lines hidden (view full) ---

101 rerun = 1;
102 inodirty();
103
104 }
105 }
106 continue;
107 }
108 idesc->id_blkno = *ap;
85 if (--ndb == 0 && (offset = blkoff(&sblock, dino.di_size)) != 0)
86 idesc->id_numfrags =
87 numfrags(&sblock, fragroundup(&sblock, offset));
88 else
89 idesc->id_numfrags = sblock.fs_frag;
90 if (*ap == 0) {
91 if (idesc->id_type == DATA && ndb >= 0) {
92 /* An empty block in a directory XXX */

--- 10 unchanged lines hidden (view full) ---

103 rerun = 1;
104 inodirty();
105
106 }
107 }
108 continue;
109 }
110 idesc->id_blkno = *ap;
109 if (idesc->id_type == ADDR)
111 if (idesc->id_type != DATA)
110 ret = (*idesc->id_func)(idesc);
111 else
112 ret = dirscan(idesc);
113 if (ret & STOP)
114 return (ret);
115 }
116 idesc->id_numfrags = sblock.fs_frag;
117 remsize = dino.di_size - sblock.fs_bsize * NDADDR;
118 sizepb = sblock.fs_bsize;
119 for (ap = &dino.di_ib[0], n = 1; n <= NIADDR; ap++, n++) {
112 ret = (*idesc->id_func)(idesc);
113 else
114 ret = dirscan(idesc);
115 if (ret & STOP)
116 return (ret);
117 }
118 idesc->id_numfrags = sblock.fs_frag;
119 remsize = dino.di_size - sblock.fs_bsize * NDADDR;
120 sizepb = sblock.fs_bsize;
121 for (ap = &dino.di_ib[0], n = 1; n <= NIADDR; ap++, n++) {
122 sizepb *= NINDIR(&sblock);
120 if (*ap) {
121 idesc->id_blkno = *ap;
122 ret = iblock(idesc, n, remsize);
123 if (ret & STOP)
124 return (ret);
125 } else {
123 if (*ap) {
124 idesc->id_blkno = *ap;
125 ret = iblock(idesc, n, remsize);
126 if (ret & STOP)
127 return (ret);
128 } else {
129 idesc->id_lbn += sizepb / sblock.fs_bsize;
126 if (idesc->id_type == DATA && remsize > 0) {
127 /* An empty block in a directory XXX */
128 getpathname(pathbuf, idesc->id_number,
129 idesc->id_number);
130 pfatal("DIRECTORY %s: CONTAINS EMPTY BLOCKS",
131 pathbuf);
132 if (reply("ADJUST LENGTH") == 1) {
133 dp = ginode(idesc->id_number);
134 dp->di_size -= remsize;
135 remsize = 0;
136 printf(
137 "YOU MUST RERUN FSCK AFTERWARDS\n");
138 rerun = 1;
139 inodirty();
140 break;
141 }
142 }
143 }
130 if (idesc->id_type == DATA && remsize > 0) {
131 /* An empty block in a directory XXX */
132 getpathname(pathbuf, idesc->id_number,
133 idesc->id_number);
134 pfatal("DIRECTORY %s: CONTAINS EMPTY BLOCKS",
135 pathbuf);
136 if (reply("ADJUST LENGTH") == 1) {
137 dp = ginode(idesc->id_number);
138 dp->di_size -= remsize;
139 remsize = 0;
140 printf(
141 "YOU MUST RERUN FSCK AFTERWARDS\n");
142 rerun = 1;
143 inodirty();
144 break;
145 }
146 }
147 }
144 sizepb *= NINDIR(&sblock);
145 remsize -= sizepb;
146 }
147 return (KEEPON);
148}
149
150static int
151iblock(idesc, ilevel, isize)
152 struct inodesc *idesc;

--- 4 unchanged lines hidden (view full) ---

157 ufs_daddr_t *aplim;
158 struct bufarea *bp;
159 int i, n, (*func)(), nif;
160 quad_t sizepb;
161 char buf[BUFSIZ];
162 char pathbuf[MAXPATHLEN + 1];
163 struct dinode *dp;
164
148 remsize -= sizepb;
149 }
150 return (KEEPON);
151}
152
153static int
154iblock(idesc, ilevel, isize)
155 struct inodesc *idesc;

--- 4 unchanged lines hidden (view full) ---

160 ufs_daddr_t *aplim;
161 struct bufarea *bp;
162 int i, n, (*func)(), nif;
163 quad_t sizepb;
164 char buf[BUFSIZ];
165 char pathbuf[MAXPATHLEN + 1];
166 struct dinode *dp;
167
165 if (idesc->id_type == ADDR) {
168 if (idesc->id_type != DATA) {
166 func = idesc->id_func;
167 if (((n = (*func)(idesc)) & KEEPON) == 0)
168 return (n);
169 } else
170 func = dirscan;
171 if (chkrange(idesc->id_blkno, idesc->id_numfrags))
172 return (SKIP);
173 bp = getdatablk(idesc->id_blkno, sblock.fs_bsize);

--- 14 unchanged lines hidden (view full) ---

188 *ap = 0;
189 dirty(bp);
190 }
191 }
192 flush(fswritefd, bp);
193 }
194 aplim = &bp->b_un.b_indir[nif];
195 for (ap = bp->b_un.b_indir; ap < aplim; ap++) {
169 func = idesc->id_func;
170 if (((n = (*func)(idesc)) & KEEPON) == 0)
171 return (n);
172 } else
173 func = dirscan;
174 if (chkrange(idesc->id_blkno, idesc->id_numfrags))
175 return (SKIP);
176 bp = getdatablk(idesc->id_blkno, sblock.fs_bsize);

--- 14 unchanged lines hidden (view full) ---

191 *ap = 0;
192 dirty(bp);
193 }
194 }
195 flush(fswritefd, bp);
196 }
197 aplim = &bp->b_un.b_indir[nif];
198 for (ap = bp->b_un.b_indir; ap < aplim; ap++) {
199 if (ilevel == 0)
200 idesc->id_lbn++;
196 if (*ap) {
197 idesc->id_blkno = *ap;
198 if (ilevel == 0)
199 n = (*func)(idesc);
200 else
201 n = iblock(idesc, ilevel, isize);
202 if (n & STOP) {
203 bp->b_flags &= ~B_INUSE;

--- 463 unchanged lines hidden ---
201 if (*ap) {
202 idesc->id_blkno = *ap;
203 if (ilevel == 0)
204 n = (*func)(idesc);
205 else
206 n = iblock(idesc, ilevel, isize);
207 if (n & STOP) {
208 bp->b_flags &= ~B_INUSE;

--- 463 unchanged lines hidden ---