Deleted Added
full compact
tunefs.c (96707) tunefs.c (98542)
1/*
2 * Copyright (c) 1983, 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

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

37 The Regents of the University of California. All rights reserved.\n";
38#endif /* not lint */
39
40#ifndef lint
41#if 0
42static char sccsid[] = "@(#)tunefs.c 8.2 (Berkeley) 4/19/94";
43#endif
44static const char rcsid[] =
1/*
2 * Copyright (c) 1983, 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

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

37 The Regents of the University of California. All rights reserved.\n";
38#endif /* not lint */
39
40#ifndef lint
41#if 0
42static char sccsid[] = "@(#)tunefs.c 8.2 (Berkeley) 4/19/94";
43#endif
44static const char rcsid[] =
45 "$FreeBSD: head/sbin/tunefs/tunefs.c 96707 2002-05-16 04:10:46Z trhodes $";
45 "$FreeBSD: head/sbin/tunefs/tunefs.c 98542 2002-06-21 06:18:05Z mckusick $";
46#endif /* not lint */
47
48/*
49 * tunefs: change layout parameters to an existing filesystem.
50 */
51#include <sys/param.h>
52#include <sys/mount.h>
53#include <sys/disklabel.h>
54#include <sys/stat.h>
55
46#endif /* not lint */
47
48/*
49 * tunefs: change layout parameters to an existing filesystem.
50 */
51#include <sys/param.h>
52#include <sys/mount.h>
53#include <sys/disklabel.h>
54#include <sys/stat.h>
55
56#include <ufs/ffs/fs.h>
57#include <ufs/ufs/ufsmount.h>
56#include <ufs/ufs/ufsmount.h>
57#include <ufs/ufs/dinode.h>
58#include <ufs/ffs/fs.h>
58
59#include <err.h>
60#include <fcntl.h>
61#include <fstab.h>
62#include <paths.h>
63#include <stdio.h>
64#include <stdlib.h>
65#include <string.h>

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

72 struct fs sb;
73 char pad[MAXBSIZE];
74} sbun;
75#define sblock sbun.sb
76
77int fi;
78long dev_bsize = 1;
79
59
60#include <err.h>
61#include <fcntl.h>
62#include <fstab.h>
63#include <paths.h>
64#include <stdio.h>
65#include <stdlib.h>
66#include <string.h>

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

73 struct fs sb;
74 char pad[MAXBSIZE];
75} sbun;
76#define sblock sbun.sb
77
78int fi;
79long dev_bsize = 1;
80
80void bwrite(daddr_t, const char *, int);
81int bread(daddr_t, char *, int);
81void bwrite(ufs2_daddr_t, const char *, int);
82int bread(ufs2_daddr_t, char *, int);
82void getsb(struct fs *, const char *);
83void putsb(struct fs *, const char *, int);
84void usage(void);
85void printfs(void);
86
87int
88main(argc, argv)
89 int argc;
90 char *argv[];
91{
92 char *special;
93 const char *name;
94 struct stat st;
95 int Aflag = 0, active = 0;
83void getsb(struct fs *, const char *);
84void putsb(struct fs *, const char *, int);
85void usage(void);
86void printfs(void);
87
88int
89main(argc, argv)
90 int argc;
91 char *argv[];
92{
93 char *special;
94 const char *name;
95 struct stat st;
96 int Aflag = 0, active = 0;
96 int aflag = 0, dflag = 0, eflag = 0, fflag = 0, mflag = 0;
97 int aflag = 0, eflag = 0, fflag = 0, mflag = 0;
97 int nflag = 0, oflag = 0, pflag = 0, sflag = 0;
98 int nflag = 0, oflag = 0, pflag = 0, sflag = 0;
98 int avalue = 0, dvalue = 0, evalue = 0, fvalue = 0;
99 int avalue = 0, evalue = 0, fvalue = 0;
99 int mvalue = 0, ovalue = 0, svalue = 0;
100 char *nvalue = NULL;
101 struct fstab *fs;
102 const char *chg[2];
103 char device[MAXPATHLEN];
104 struct ufs_args args;
105 struct statfs stfs;
106 int found_arg, ch;
107
108 if (argc < 3)
109 usage();
110 found_arg = 0; /* at least one arg is required */
100 int mvalue = 0, ovalue = 0, svalue = 0;
101 char *nvalue = NULL;
102 struct fstab *fs;
103 const char *chg[2];
104 char device[MAXPATHLEN];
105 struct ufs_args args;
106 struct statfs stfs;
107 int found_arg, ch;
108
109 if (argc < 3)
110 usage();
111 found_arg = 0; /* at least one arg is required */
111 while ((ch = getopt(argc, argv, "Aa:d:e:f:m:n:o:ps:")) != -1)
112 while ((ch = getopt(argc, argv, "Aa:e:f:m:n:o:ps:")) != -1)
112 switch (ch) {
113 case 'A':
114 found_arg = 1;
115 Aflag++;
116 break;
117 case 'a':
118 found_arg = 1;
119 name = "maximum contiguous block count";
120 avalue = atoi(optarg);
121 if (avalue < 1)
122 errx(10, "%s must be >= 1 (was %s)", name, optarg);
123 aflag = 1;
124 break;
113 switch (ch) {
114 case 'A':
115 found_arg = 1;
116 Aflag++;
117 break;
118 case 'a':
119 found_arg = 1;
120 name = "maximum contiguous block count";
121 avalue = atoi(optarg);
122 if (avalue < 1)
123 errx(10, "%s must be >= 1 (was %s)", name, optarg);
124 aflag = 1;
125 break;
125 case 'd':
126 found_arg = 1;
127 name = "rotational delay between contiguous blocks";
128 dvalue = atoi(optarg);
129 dflag = 1;
130 break;
131 case 'e':
132 found_arg = 1;
133 name = "maximum blocks per file in a cylinder group";
134 evalue = atoi(optarg);
135 if (evalue < 1)
136 errx(10, "%s must be >= 1 (was %s)", name, optarg);
137 eflag = 1;
138 break;

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

232 warnx("%s remains unchanged as %d", name, avalue);
233 }
234 else {
235 warnx("%s changes from %d to %d",
236 name, sblock.fs_maxcontig, avalue);
237 sblock.fs_maxcontig = avalue;
238 }
239 }
126 case 'e':
127 found_arg = 1;
128 name = "maximum blocks per file in a cylinder group";
129 evalue = atoi(optarg);
130 if (evalue < 1)
131 errx(10, "%s must be >= 1 (was %s)", name, optarg);
132 eflag = 1;
133 break;

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

227 warnx("%s remains unchanged as %d", name, avalue);
228 }
229 else {
230 warnx("%s changes from %d to %d",
231 name, sblock.fs_maxcontig, avalue);
232 sblock.fs_maxcontig = avalue;
233 }
234 }
240 if (dflag) {
241 name = "rotational delay between contiguous blocks";
242 if (sblock.fs_rotdelay == dvalue) {
243 warnx("%s remains unchanged as %dms", name, dvalue);
244 }
245 else {
246 warnx("%s changes from %dms to %dms",
247 name, sblock.fs_rotdelay, dvalue);
248 sblock.fs_rotdelay = dvalue;
249 }
250 }
251 if (eflag) {
252 name = "maximum blocks per file in a cylinder group";
253 if (sblock.fs_maxbpg == evalue) {
254 warnx("%s remains unchanged as %d", name, evalue);
255 }
256 else {
257 warnx("%s changes from %d to %d",
258 name, sblock.fs_maxbpg, evalue);

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

353{
354 fprintf(stderr, "%s\n%s\n%s\n",
355"usage: tunefs [-A] [-a maxcontig] [-d rotdelay] [-e maxbpg] [-f avgfilesize]",
356" [-m minfree] [-p] [-n enable | disable] [-o space | time]",
357" [-s filesperdir] special | filesystem");
358 exit(2);
359}
360
235 if (eflag) {
236 name = "maximum blocks per file in a cylinder group";
237 if (sblock.fs_maxbpg == evalue) {
238 warnx("%s remains unchanged as %d", name, evalue);
239 }
240 else {
241 warnx("%s changes from %d to %d",
242 name, sblock.fs_maxbpg, evalue);

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

337{
338 fprintf(stderr, "%s\n%s\n%s\n",
339"usage: tunefs [-A] [-a maxcontig] [-d rotdelay] [-e maxbpg] [-f avgfilesize]",
340" [-m minfree] [-p] [-n enable | disable] [-o space | time]",
341" [-s filesperdir] special | filesystem");
342 exit(2);
343}
344
345/*
346 * Possible superblock locations ordered from most to least likely.
347 */
348static int sblock_try[] = SBLOCKSEARCH;
349static ufs2_daddr_t sblockloc;
350
361void
362getsb(fs, file)
363 struct fs *fs;
364 const char *file;
365{
351void
352getsb(fs, file)
353 struct fs *fs;
354 const char *file;
355{
356 int i;
366
367 fi = open(file, O_RDONLY);
368 if (fi < 0)
369 err(3, "cannot open %s", file);
357
358 fi = open(file, O_RDONLY);
359 if (fi < 0)
360 err(3, "cannot open %s", file);
370 if (bread((daddr_t)SBOFF, (char *)fs, SBSIZE))
371 err(4, "%s: bad super block", file);
372 if (fs->fs_magic != FS_MAGIC)
373 errx(5, "%s: bad magic number", file);
361 for (i = 0; sblock_try[i] != -1; i++) {
362 if (bread(sblock_try[i], (char *)fs, SBLOCKSIZE))
363 err(4, "%s: bad super block", file);
364 if ((fs->fs_magic == FS_UFS1_MAGIC ||
365 (fs->fs_magic == FS_UFS2_MAGIC &&
366 fs->fs_sblockloc == numfrags(fs, sblock_try[i]))) &&
367 fs->fs_bsize <= MAXBSIZE &&
368 fs->fs_bsize >= sizeof(struct fs))
369 break;
370 }
371 if (sblock_try[i] == -1)
372 err(5, "Cannot find filesystem superblock");
374 dev_bsize = fs->fs_fsize / fsbtodb(fs, 1);
373 dev_bsize = fs->fs_fsize / fsbtodb(fs, 1);
374 sblockloc = sblock_try[i] / dev_bsize;
375}
376
377void
378putsb(fs, file, all)
379 struct fs *fs;
380 const char *file;
381 int all;
382{

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

387 * descriptor as an interlock to prevent the device from
388 * being mounted while we are switching mode.
389 */
390 i = fi;
391 fi = open(file, O_RDWR);
392 close(i);
393 if (fi < 0)
394 err(3, "cannot open %s", file);
375}
376
377void
378putsb(fs, file, all)
379 struct fs *fs;
380 const char *file;
381 int all;
382{

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

387 * descriptor as an interlock to prevent the device from
388 * being mounted while we are switching mode.
389 */
390 i = fi;
391 fi = open(file, O_RDWR);
392 close(i);
393 if (fi < 0)
394 err(3, "cannot open %s", file);
395 bwrite((daddr_t)SBOFF / dev_bsize, (const char *)fs, SBSIZE);
395 bwrite(sblockloc, (const char *)fs, SBLOCKSIZE);
396 if (all)
397 for (i = 0; i < fs->fs_ncg; i++)
398 bwrite(fsbtodb(fs, cgsblock(fs, i)),
396 if (all)
397 for (i = 0; i < fs->fs_ncg; i++)
398 bwrite(fsbtodb(fs, cgsblock(fs, i)),
399 (const char *)fs, SBSIZE);
399 (const char *)fs, SBLOCKSIZE);
400 close(fi);
401}
402
403void
404printfs()
405{
406 warnx("soft updates: (-n) %s",
407 (sblock.fs_flags & FS_DOSOFTDEP)? "enabled" : "disabled");
408 warnx("maximum contiguous block count: (-a) %d",
409 sblock.fs_maxcontig);
400 close(fi);
401}
402
403void
404printfs()
405{
406 warnx("soft updates: (-n) %s",
407 (sblock.fs_flags & FS_DOSOFTDEP)? "enabled" : "disabled");
408 warnx("maximum contiguous block count: (-a) %d",
409 sblock.fs_maxcontig);
410 warnx("rotational delay between contiguous blocks: (-d) %d ms",
411 sblock.fs_rotdelay);
412 warnx("maximum blocks per file in a cylinder group: (-e) %d",
413 sblock.fs_maxbpg);
414 warnx("average file size: (-f) %d",
415 sblock.fs_avgfilesize);
416 warnx("average number of files in a directory: (-s) %d",
417 sblock.fs_avgfpdir);
418 warnx("minimum percentage of free space: (-m) %d%%",
419 sblock.fs_minfree);

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

424 warnx(OPTWARN, "time", ">=", MINFREE);
425 if (sblock.fs_minfree < MINFREE &&
426 sblock.fs_optim == FS_OPTTIME)
427 warnx(OPTWARN, "space", "<", MINFREE);
428}
429
430void
431bwrite(blk, buf, size)
410 warnx("maximum blocks per file in a cylinder group: (-e) %d",
411 sblock.fs_maxbpg);
412 warnx("average file size: (-f) %d",
413 sblock.fs_avgfilesize);
414 warnx("average number of files in a directory: (-s) %d",
415 sblock.fs_avgfpdir);
416 warnx("minimum percentage of free space: (-m) %d%%",
417 sblock.fs_minfree);

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

422 warnx(OPTWARN, "time", ">=", MINFREE);
423 if (sblock.fs_minfree < MINFREE &&
424 sblock.fs_optim == FS_OPTTIME)
425 warnx(OPTWARN, "space", "<", MINFREE);
426}
427
428void
429bwrite(blk, buf, size)
432 daddr_t blk;
430 ufs2_daddr_t blk;
433 const char *buf;
434 int size;
435{
436
437 if (lseek(fi, (off_t)blk * dev_bsize, SEEK_SET) < 0)
438 err(6, "FS SEEK");
439 if (write(fi, buf, size) != size)
440 err(7, "FS WRITE");
441}
442
443int
444bread(bno, buf, cnt)
431 const char *buf;
432 int size;
433{
434
435 if (lseek(fi, (off_t)blk * dev_bsize, SEEK_SET) < 0)
436 err(6, "FS SEEK");
437 if (write(fi, buf, size) != size)
438 err(7, "FS WRITE");
439}
440
441int
442bread(bno, buf, cnt)
445 daddr_t bno;
443 ufs2_daddr_t bno;
446 char *buf;
447 int cnt;
448{
449 int i;
450
451 if (lseek(fi, (off_t)bno * dev_bsize, SEEK_SET) < 0)
452 return(1);
453 if ((i = read(fi, buf, cnt)) != cnt) {
454 for(i=0; i<sblock.fs_bsize; i++)
455 buf[i] = 0;
456 return (1);
457 }
458 return (0);
459}
444 char *buf;
445 int cnt;
446{
447 int i;
448
449 if (lseek(fi, (off_t)bno * dev_bsize, SEEK_SET) < 0)
450 return(1);
451 if ((i = read(fi, buf, cnt)) != cnt) {
452 for(i=0; i<sblock.fs_bsize; i++)
453 buf[i] = 0;
454 return (1);
455 }
456 return (0);
457}