summaryrefslogtreecommitdiffstats
path: root/sbin/fsck_ffs
diff options
context:
space:
mode:
authormckusick <mckusick@FreeBSD.org>2002-09-24 05:18:17 +0000
committermckusick <mckusick@FreeBSD.org>2002-09-24 05:18:17 +0000
commitbe95bd58fc90c8e861fc5fc7b31fa38053635353 (patch)
tree08fba983a0e35a2d5b81bcf6ae85c1c6721dfed4 /sbin/fsck_ffs
parente52a22a75ad9405fa22e8683a99b3e89398333ca (diff)
downloadFreeBSD-src-be95bd58fc90c8e861fc5fc7b31fa38053635353.zip
FreeBSD-src-be95bd58fc90c8e861fc5fc7b31fa38053635353.tar.gz
Add support to fsck_ffs to account for storage for extended
attributes. Sponsored by: DARPA & NAI Labs.
Diffstat (limited to 'sbin/fsck_ffs')
-rw-r--r--sbin/fsck_ffs/pass1.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/sbin/fsck_ffs/pass1.c b/sbin/fsck_ffs/pass1.c
index a66690c..87cc464 100644
--- a/sbin/fsck_ffs/pass1.c
+++ b/sbin/fsck_ffs/pass1.c
@@ -191,7 +191,7 @@ checkinode(ino_t inumber, struct inodesc *idesc)
off_t kernmaxfilesize;
ufs2_daddr_t ndb;
mode_t mode;
- int j;
+ int j, ret, offset;
dp = getnextinode(inumber);
mode = DIP(dp, di_mode) & IFMT;
@@ -331,6 +331,24 @@ checkinode(ino_t inumber, struct inodesc *idesc)
else
idesc->id_type = ADDR;
(void)ckinode(dp, idesc);
+ if (sblock.fs_magic == FS_UFS2_MAGIC && dp->dp2.di_extsize > 0) {
+ idesc->id_type = ADDR;
+ ndb = howmany(dp->dp2.di_extsize, sblock.fs_bsize);
+ for (j = 0; j < NXADDR; j++) {
+ if (--ndb == 0 &&
+ (offset = blkoff(&sblock, dp->dp2.di_extsize)) != 0)
+ idesc->id_numfrags = numfrags(&sblock,
+ fragroundup(&sblock, offset));
+ else
+ idesc->id_numfrags = sblock.fs_frag;
+ if (dp->dp2.di_extb[j] == 0)
+ continue;
+ idesc->id_blkno = dp->dp2.di_extb[j];
+ ret = (*idesc->id_func)(idesc);
+ if (ret & STOP)
+ break;
+ }
+ }
if (sblock.fs_magic == FS_UFS2_MAGIC)
eascan(idesc, &dp->dp2);
idesc->id_entryno *= btodb(sblock.fs_fsize);
OpenPOWER on IntegriCloud