+ dbase = cgbase(&sblock, c);
+ dmax = dbase + sblock.fs_fpg;
+ if (dmax > sblock.fs_size)
+ dmax = sblock.fs_size;
+ if (now > cgrp.cg_time)
+ newcg->cg_time = cgrp.cg_time;
+ else
+ newcg->cg_time = now;
+ newcg->cg_cgx = c;
+ if (c == sblock.fs_ncg - 1)
+ newcg->cg_ncyl = sblock.fs_ncyl % sblock.fs_cpg;
+ else
+ newcg->cg_ncyl = sblock.fs_cpg;
+ newcg->cg_niblk = sblock.fs_ipg;
+ newcg->cg_ndblk = dmax - dbase;
+ newcg->cg_cs.cs_ndir = 0;
+ newcg->cg_cs.cs_nffree = 0;
+ newcg->cg_cs.cs_nbfree = 0;
+ newcg->cg_cs.cs_nifree = sblock.fs_ipg;
+ if (cgrp.cg_rotor < newcg->cg_ndblk)
+ newcg->cg_rotor = cgrp.cg_rotor;
+ else
+ newcg->cg_rotor = 0;
+ if (cgrp.cg_frotor < newcg->cg_ndblk)
+ newcg->cg_frotor = cgrp.cg_frotor;
+ else
+ newcg->cg_frotor = 0;
+ if (cgrp.cg_irotor < newcg->cg_niblk)
+ newcg->cg_irotor = cgrp.cg_irotor;
+ else
+ newcg->cg_irotor = 0;
+ bzero((char *)newcg->cg_frsum, sizeof newcg->cg_frsum);
+ bzero((char *)newcg->cg_btot, sizeof newcg->cg_btot);
+ bzero((char *)newcg->cg_b, sizeof newcg->cg_b);
+ bzero((char *)newcg->cg_free, howmany(sblock.fs_fpg, NBBY));
+ bzero((char *)newcg->cg_iused, howmany(sblock.fs_ipg, NBBY));
+ j = sblock.fs_ipg * c;
+ for (i = 0; i < sblock.fs_ipg; j++, i++) {
+ switch (statemap[j]) {
+
+ case USTATE:
+ break;
+
+ case DSTATE:
+ case DCLEAR:
+ case DFOUND:
+ newcg->cg_cs.cs_ndir++;
+ /* fall through */
+
+ case FSTATE:
+ case FCLEAR:
+ newcg->cg_cs.cs_nifree--;
+ setbit(newcg->cg_iused, i);
+ break;
+ }