diff options
author | Kirk McKusick <mckusick@FreeBSD.org> | 2002-09-24 05:18:17 +0000 |
---|---|---|
committer | Kirk McKusick <mckusick@FreeBSD.org> | 2002-09-24 05:18:17 +0000 |
commit | c18ef4c018881d7e39b27df5bf7b65b4d58cac6b (patch) | |
tree | 08fba983a0e35a2d5b81bcf6ae85c1c6721dfed4 /sbin/fsck_ffs/pass1.c | |
parent | ecf15560c7d2c805ea3ba8aeb660f3e54a7b199e (diff) | |
download | src-c18ef4c018881d7e39b27df5bf7b65b4d58cac6b.tar.gz src-c18ef4c018881d7e39b27df5bf7b65b4d58cac6b.zip |
Add support to fsck_ffs to account for storage for extended
attributes.
Sponsored by: DARPA & NAI Labs.
Notes
Notes:
svn path=/head/; revision=103885
Diffstat (limited to 'sbin/fsck_ffs/pass1.c')
-rw-r--r-- | sbin/fsck_ffs/pass1.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/sbin/fsck_ffs/pass1.c b/sbin/fsck_ffs/pass1.c index a66690c151dc..87cc46488d45 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); |