251
254
if (bkgrdcheck) {
252
255
if ((fsreadfd = open(filesys, O_RDONLY)) < 0 || readsb(0) == 0)
253
exit(3); /* Cannot read superblock */
256
exit(8); /* Cannot read superblock */
255
258
/* Earlier background failed or journaled */
256
259
if (sblock.fs_flags & (FS_NEEDSFSCK | FS_SUJ))
270
273
* If file system is gjournaled, check it here.
272
275
if ((fsreadfd = open(filesys, O_RDONLY)) < 0 || readsb(0) == 0)
273
exit(3); /* Cannot read superblock */
276
exit(8); /* Cannot read superblock */
275
278
if ((sblock.fs_flags & FS_GJOURNAL) != 0) {
276
279
//printf("GJournaled file system detected on %s.\n",
288
pfatal("UNEXPECTED INCONSISTENCY, %s\n",
289
"CANNOT RUN FAST FSCK\n");
292
"UNEXPECTED INCONSISTENCY, CANNOT RUN FAST FSCK\n");
303
306
pfatal("NOT MOUNTED, CANNOT RUN IN BACKGROUND\n");
304
307
} else if ((mntp->f_flags & MNT_SOFTDEP) == 0) {
306
pfatal("NOT USING SOFT UPDATES, %s\n",
307
"CANNOT RUN IN BACKGROUND");
310
"NOT USING SOFT UPDATES, CANNOT RUN IN BACKGROUND\n");
308
311
} else if ((mntp->f_flags & MNT_RDONLY) != 0) {
310
313
pfatal("MOUNTED READ-ONLY, CANNOT RUN IN BACKGROUND\n");
312
315
if (readsb(0) != 0) {
313
316
if (sblock.fs_flags & (FS_NEEDSFSCK | FS_SUJ)) {
315
pfatal("UNEXPECTED INCONSISTENCY, %s\n",
316
"CANNOT RUN IN BACKGROUND\n");
319
"UNEXPECTED INCONSISTENCY, CANNOT RUN IN BACKGROUND\n");
318
321
if ((sblock.fs_flags & FS_UNCLEAN) == 0 &&
319
322
skipclean && ckclean) {
334
337
if (stat(snapname, &snapdir) < 0) {
335
338
if (errno != ENOENT) {
337
pfatal("CANNOT FIND %s %s: %s, %s\n",
338
"SNAPSHOT DIRECTORY",
339
snapname, strerror(errno),
340
"CANNOT RUN IN BACKGROUND");
341
"CANNOT FIND SNAPSHOT DIRECTORY %s: %s, CANNOT RUN IN BACKGROUND\n",
342
snapname, strerror(errno));
341
343
} else if ((grp = getgrnam("operator")) == 0 ||
342
344
mkdir(snapname, 0770) < 0 ||
343
345
chown(snapname, -1, grp->gr_gid) < 0 ||
344
346
chmod(snapname, 0770) < 0) {
346
pfatal("CANNOT CREATE %s %s: %s, %s\n",
347
"SNAPSHOT DIRECTORY",
348
snapname, strerror(errno),
349
"CANNOT RUN IN BACKGROUND");
349
"CANNOT CREATE SNAPSHOT DIRECTORY %s: %s, CANNOT RUN IN BACKGROUND\n",
350
snapname, strerror(errno));
351
352
} else if (!S_ISDIR(snapdir.st_mode)) {
353
pfatal("%s IS NOT A DIRECTORY, %s\n", snapname,
354
"CANNOT RUN IN BACKGROUND");
355
"%s IS NOT A DIRECTORY, CANNOT RUN IN BACKGROUND\n",
390
392
pwarn("clean, %ld free ", (long)(sblock.fs_cstotal.cs_nffree +
391
393
sblock.fs_frag * sblock.fs_cstotal.cs_nbfree));
392
printf("(%lld frags, %lld blocks, %.1f%% fragmentation)\n",
393
(long long)sblock.fs_cstotal.cs_nffree,
394
(long long)sblock.fs_cstotal.cs_nbfree,
394
printf("(%jd frags, %jd blocks, %.1f%% fragmentation)\n",
395
(intmax_t)sblock.fs_cstotal.cs_nffree,
396
(intmax_t)sblock.fs_cstotal.cs_nbfree,
395
397
sblock.fs_cstotal.cs_nffree * 100.0 / sblock.fs_dsize);
404
406
if (suj_check(filesys) == 0) {
405
407
printf("\n***** FILE SYSTEM MARKED CLEAN *****\n");
406
408
if (chkdoreload(mntp) == 0)
411
413
printf("** Skipping journal, falling through to full fsck\n\n");
495
497
blks = maxfsblock - (n_ffree + sblock.fs_frag * n_bfree) - blks;
496
498
if (bkgrdflag && (files > 0 || blks > 0)) {
497
499
countdirs = sblock.fs_cstotal.cs_ndir - countdirs;
498
pwarn("Reclaimed: %ld directories, %ld files, %lld fragments\n",
499
countdirs, (long)files - countdirs, (long long)blks);
500
pwarn("Reclaimed: %ld directories, %jd files, %jd fragments\n",
501
countdirs, files - countdirs, blks);
501
503
pwarn("%ld files, %jd used, %ju free ",
502
504
(long)n_files, (intmax_t)n_blks,
506
508
n_ffree * 100.0 / sblock.fs_dsize);
509
printf("%d inodes missing\n", -files);
511
printf("%jd inodes missing\n", -files);
511
printf("%lld blocks missing\n", -(long long)blks);
513
printf("%jd blocks missing\n", -blks);
512
514
if (duplist != NULL) {
513
515
printf("The following duplicate blocks remain:");
514
516
for (dp = duplist; dp; dp = dp->next)
515
printf(" %lld,", (long long)dp->dup);
517
printf(" %jd,", (intmax_t)dp->dup);