Commit Graph

65 Commits (4690e621acd4579dae60b6f55f58284ee805e86d)

Author SHA1 Message Date
Benno Schulenberg ad39bcd9e3 badblocks: Insert a missing "\n" in the usage string.
Take the opportunity to wrap the string to be more readable,
and sort the options somewhat alphabetically.

Signed-off-by: Benno Schulenberg <bensberg@justemail.net>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2008-07-18 21:14:21 -04:00
Theodore Ts'o c13ab4fa7a badblocks: If nanosleep() does not exist, try using usleep() instead
For portability on systems that don't have nanosleep().

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2008-07-13 16:38:56 -04:00
Theodore Ts'o f56f32b0a5 badblocks: Use standard terminology for first/last block
Use consistent and standard terminology for the starting and ending
blocks for the badblocks test in the man page and in the messages
printed by the program.

Addresses-Debian-Bug: #440983, #440981

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2008-07-10 10:11:23 -04:00
Theodore Ts'o 69d813520c badblocks: Fix crash when lots of -t patterns given
With more than 8 -t patterns given, badblocks will overwrite the
t_patts array boundary due to realloc not taking into account the size
of an int.  Oops.

Addresses-Debian-Bug: 487298

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2008-07-06 18:56:31 -04:00
Eric Sandeen 79e62409b3 Clean up some trivial build warnings
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2008-07-06 18:36:56 -04:00
Iustin Pop edf261f6f8 badblocks: fix a bug in the read throttling
The previous patch was missing an #include and thus the compiler didn't
catch the (now obvious) error.

Signed-off-by: Iustin Pop <iustin@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2008-06-21 14:43:25 -04:00
Iustin Pop 264f64a5a8 badblocks: implement read throttling
Currently, badblocks will read as fast as it can from the drive. While
this is what one wants usually, if badblocks is run in read-only mode on
a drive that is in use, it will greatly degrade the other users of this
disk.

This patch adds a throttling mode for reads where each read will be
delayed by a percentage of the time the previous read took; i.e., an
invocation of '-d 100' will cause the sleep to be the same as the read
took, a value of 200 will cause the sleep to be twice as high, and a
value of 50 will cause it to be half.  This will not be done if the
previous read had errors, since then the hardware will possibly have
timeouts and that would decrease the speed too much.

This algorithm helps when the disk is used by other processes as then,
due to the increased load, the time spent doing the reads will be
higher, and correspondingly badblocks will sleep even more and thus it
will use less of the drive's bandwidth. This is different from using
ionice, as it is a voluntary (and partial) throttling.

Signed-off-by: Iustin Pop <iustin@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2008-06-17 07:47:25 -04:00
Iustin Pop eb594251b6 badblocks: fix a possible bug in parse_uint
Currently, the parse_uint() function checks errno after the strtoul()
call. But, according to the man page of strtoul():
  Since strtoul() can legitimately return 0 or LONG_MAX (LLONG_MAX for
  strtoull()) on  both  success  and failure,  the  calling program
  should  set errno to 0 before the call, and then determine if an error
  occurred by checking whether errno has a nonzero value after the call.

When using locales, it can happen that looking for the locale files is
not successful, and therefore errno will have a nonzero value from this.
And since the argument parsing is one of the first things done after
startup, parse_uint() will wrongly report errors.

The fix is to simply reset errno to zero before calling strtoul().

Signed-off-by: Iustin Pop <iustin@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2008-06-17 07:33:44 -04:00
Iustin Pop 931b0289ee badblocks: add a max bad blocks count option
Currently, badblocks will continue scanning the device until it reaches
last_block, even though it might be that the drive is not responding
at all anymore.

This patch introduces a new parameter ('-e') that allows one to specify
the maximum bad block count; if badblocks sees more than this number, it
will abort the test.

While this is not useful for testing a device that will need to be used
as a filesystem (because we don't get an exhaustive list of bad blocks),
it is useful for testing if a device has bad blocks at all: for example,
with a count of 1, it will finish after the first error thus not needing
to test the whole device if the only purpose of the test is to check for
any bad blocks.

Signed-off-by: Iustin Pop <iustin@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
2008-06-17 07:33:29 -04:00
Theodore Ts'o d4be9fad6e badblocks: Factor out calls to strtoul to a helper function
The strtoul() function has a lot of messy error checking that needs to
be done; by factoring it out into one place we can make sure it's done
right in all of the places where it is called.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2007-10-22 18:05:32 -04:00
Theodore Ts'o acd77415a9 badblocks: Change unsigned long to blk_t and unsigned int, as appropriate
This will make it easier for us to support 64-bit block numbers when
the time comes.  Not that running badblocks on a > 4TB machine is
anything I want to contemplate!

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2007-10-22 18:05:32 -04:00
Theodore Ts'o e9860ae966 badblocks: Use unsigned int instead of unsigned long for test patterns
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2007-10-22 18:05:32 -04:00
Theodore Ts'o d4e0b1c6f5 Fix gcc -Wall warnings
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2007-08-03 18:56:01 -04:00
Theodore Ts'o 5267a520bb Fix error checking of badblock's last-block and start-block arguments
Addresses Debian Bug: #416477

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2007-06-04 01:49:51 -04:00
Theodore Ts'o 017a76ee39 Adjust badblocks -n/-w exclusive usage message
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2006-11-17 23:00:19 -05:00
Theodore Ts'o d8b5f77743 Add explanatory message to badblocks that -n and -w are mutually exclusive
Addresses Debian Bug: #371869

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2006-11-12 23:09:03 -05:00
Theodore Ts'o 8938ce64dc Fix interpretation of the last_block command-line parameter to badblocks
Also update the display messages so they are accurate.

Addresses Debian Bug: #386475

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2006-10-03 23:35:57 -04:00
Theodore Ts'o f63978aff7 Fix read/write badblocks testing in mke2fs and e2fsck
The exlcusive device safety check that was added inadvertently broke
e2fsck -cc and mke2fs -cc since e2fsck and mke2fs hold the device 
in exclusive access when badblocks is run.  So we add a private option
to badblocks, -X, which is passed by e2fsck and mke2fs to badblocks
to indicate that it is OK to skip the EXT2_MF_BUSY checks.

Addresses Debian Bug: #366017

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2006-05-13 09:25:47 -04:00
Theodore Ts'o 5f51d1c1eb Fix display bug in badblocks -w
Add extra spaces when printing the "done" message to clear out the
block number to fix a display corruption when the -s option is used to
display the progress of the test.  (Addresses Debian Bug #322231)

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2005-09-24 18:28:00 -04:00
Theodore Ts'o bb145b01cf Fix e2fsprogs messages for grammar and consistency, based on suggestions
from Benno Schulenberg.

Add missing _() so all strings can be internationalized.
2005-06-20 08:35:27 -04:00
Theodore Ts'o 2fa8f37fff On Linux 2.6 systems, mke2fs and badblocks will check to see whether
the filesystem appears to be busy; if so, the programs will print an
error message and abort.   (Addresses Debian Bug #308594).
2005-06-05 16:05:22 -04:00
Theodore Ts'o f37ab68a26 Corrects a few mistakes in the fsck man page, wraps two overlong lines,
and changes "bad" to "invalid" in some messages to avoid confusion with
"bad blocks" in the e2fsck, mke2fs, and badblocks programs.  Thanks to 
Benno Schulenberg.  (Addresses Sourceforge Bug: #1189803)
2005-05-05 23:15:55 -04:00
Theodore Ts'o c76564a878 badblocks.c (alarm_intr): Increase the number of spaces reserved
for printing block numbers, so we can correctly display
	block numbers numbers greater than 999,999,999.
	(Addresses SourceForge bug #1016163)
2005-01-06 14:48:59 -05:00
Theodore Ts'o 3ef681c5db badblocks.c: Use _() around done_string, so that it gets
correctly translated.  (Addresses Debian Bug #252836)
2004-09-19 08:04:44 -04:00
Theodore Ts'o 167af997e3 badblocks.c (main): Change the default number of blocks tested
at once from 16 to 64.  (Addresses Debian bug #232240)
2004-02-28 08:20:41 -05:00
Theodore Ts'o 023cbb3029 badblocks.c (pattern_fill): Fix bug accidentally added when
fixing up gcc -Wall nits.  badblocks -t random was not
	getting handled properly because ~0 needed to be cast to
	an unsigned long instead of an unsigned char.  (Addresses
	Debian bug #234828)
2004-02-26 21:06:58 -05:00
Theodore Ts'o 544349270e Fix gcc -Wall nitpicks 2003-12-07 01:28:50 -05:00
Theodore Ts'o 1f9a60c251 badblocks.c (set_o_direct): Add check to make sure the file
offset of the device is page aligned.  (Addresses Debian
	Bug #203713)

badblocks.c (test_ro, test_rw): Add code to recover after an
	error so that we continue reading on page-aligned
	boundaries.  (Thanks to Philippe Troin <phil@fifi.org> for
	the patch.)
2003-08-01 00:58:00 -04:00
Theodore Ts'o dc058719df badblocks.c (set_o_direct): Remove debugging printf. (Addresses
Debian bug #201499)
2003-07-25 07:39:33 -04:00
Theodore Ts'o 1c29b0979a badblocks.c (do_read, do_write, test_rw): Change the read/write
test to honor the -c option (number of blocks at a time).
	do_read and do_write will try to turn on the O_DIRECT flag
	if it appears that it is possible to use it.  (Addresses
	Debian bug #198006)
2003-07-12 16:01:45 -04:00
Theodore Ts'o 48e6e81362 Fixx gcc -Wall nitpicks. 2003-07-06 00:36:48 -04:00
Theodore Ts'o 84c054577f badblocks.c: Use an unsigned integer to support 4-byte test
patterns with the high bit set.  Let the user explicitly
	specify a random pattern with the argument "random".
2003-05-18 01:11:52 -04:00
Theodore Ts'o 849b6bc8ec badblocks.c, badblocks.8.in: Functional enhancements contributed
by Thayne Harbaugh.  These patches allow the -t option to
	control the test pattern(s) used when checking the disk.
	Test patterns may be specified in all modes (r/w, r/o and
	non-destructive).
2003-05-07 09:52:14 -04:00
Theodore Ts'o 6d40f568cd badblocks.c (test_rw): Fix minor memory leak with test_rw() is
called for multiple passes.
	(test_nd): Fix bug in chosing randomness for the
	non-destructive test.  We were only using 1 bit of
	randomness per byte instead of 8 due to a bit-shift bug.
	Also, initialize the random number generator from the time
	in main().  Thanks to Thayne Harbaugh for pointing out
	these bugs.
2003-05-07 08:35:38 -04:00
Theodore Ts'o ddc32a045b Add Czech translation.
Remove "NYC" translation.  Add Czech translation from Miloslav 
Trmac <mitr@volny.cz>

Random NLS and other display fixes from Miloslav.
2003-05-03 18:45:55 -04:00
Theodore Ts'o cc4f98ed2d badblocks.c (bb_output): Flush output to the badblocks
output file as bad blocks are discovered.
2003-04-03 11:37:46 -05:00
Theodore Ts'o 3e69906495 Fix gcc -Wall nits.
Fix format bug if NLS is in use.

Add extra so that the info directory looks OK on OpenWall.
2002-10-13 23:56:28 -04:00
Theodore Ts'o 41ec7bb61f badblocks.c (main): Appled sourceforge patch #600451, which
addresses sourceforge bug #600388, by AEF.  This allows
	badblocks to work correctly on read-only devices such as
	CD-ROM's, DVD's, etc.
2002-09-29 22:37:40 -04:00
Theodore Ts'o 14308a5398 Newer libintl needs LC_CTYPE to be set in addition to LC_MESSAGES. 2002-03-05 03:26:52 -05:00
Theodore Ts'o 5493a27dc1 badblocks.c (main): Open the device as O_RDWR if possible, since
fsync() isn't guaranteed to work if the filesystem is
	opened read-only.
2002-01-02 14:15:35 -05:00
Theodore Ts'o 54c637d4d2 Many files:
badblocks.c, chattr.c, dumpe2fs.c, e2image.c, findsuper.c, lsattr.c,
  	mke2fs.c, mklost+found.c, tune2fs.c, util.c: Change location of
  	ext2_fs.h to be ext2fs/ext2_fs.h
ChangeLog, Makefile.in, resize2fs.h:
  resize2fs.h: Change location of ext2_fs.h to be ext2fs/ext2_fs.h
ChangeLog, Makefile.in, debugfs.h:
  debugfs.h: Change location of ext2_fs.h to be ext2fs/ext2_fs.h
ChangeLog, Makefile.in, e2fsck.h, scantest.c:
  e2fsck.h, scantest.c: Change location of ext2_fs.h to be
  	ext2fs/ext2_fs.h
ChangeLog, Makefile.in, tst_uuid.c, uuid_time.c:
  tst_uuid.c, uuid_time.c: Remove unneeded #include of ext2_fs.h
ChangeLog, Makefile.in, e2p.h:
  e2p.h: Change location of ext2_fs.h to be ext2fs/ext2_fs.h
ChangeLog, Makefile.in, test_icount.c, test_rel.c:
  test_icount.c, test_rel.c: Change location of ext2_fs.h to be
  	ext2fs/ext2_fs.h
2001-05-14 11:45:38 +00:00
Theodore Ts'o cd130a0887 ChangeLog, badblocks.8.in, badblocks.c:
badblocks.8.in: Fixed man page to describe the first optional
  	parameter to badblocks as last_block, instead of num_blocks.  (Debian
  	nbug #87216)
  badblocks.c: Change the blocks_count variable to be last_count, which
  	is a more accurate description of the variable.
2001-05-05 05:43:23 +00:00
Theodore Ts'o 4d4045475f ChangeLog, badblocks.c:
badblocks.c (flush_bufs): Use ext2fs_sync_device() to sync and flush
  	the device.
2001-01-11 16:04:59 +00:00
Theodore Ts'o 8820c79f75 Many files:
get_device_by_label.h (get_volume_label_by_spec): Add function prototype.
  get_device_by_label.c: Use string_copy() instead of strdup() for
  	portability's sake.  Fix a few other gcc -Wall complaints.
  fsck.h, fsck.c (string_copy): Export string_copy() extern.
  badblocks.c: Fix various gcc -Wall complaints, including an incorrect
  	reference to sync in flush_bufs().
ChangeLog, configure, configure.in:
  configure.in: Add checks for the header files sys/mkdev.h and
  	sys/sysmacros.h.
2001-01-06 04:20:03 +00:00
Theodore Ts'o a551b78347 ChangeLog, badblocks.8.in, badblocks.c:
badblocks.8.in: Added text explaining that the -n and -w options are
  	mutually exclusive.
  badblocks.c (usage): Fix usage message to make it clear that the block
  	count must be specified if the starting block is to be specified.
  	(The starting block should be a option, in the long run.)
  badblocks.c (test_nd): Save and restore the currently_testing variable
  	before going into the write verification loop.  This avoids a loop
  	termination problem if the last block on the disk is bad.  Also, turn
  	off the SIGALRM signal while restoring blocks after the user types ^C.
  	The num_saved variable is now static so that it won't get clobbered by
  	a longjmp.  buf_used and bb_count are no longer static, since they
  	aren't used by the cleanup routines anymore.
  badblocks.c (main): Removed an unsued varaible (buf_size).  Fixed bad
  	getopt argument that didn't allow the 'b' option to take an argument.
  	Added error checking when parsing the starting block number.  Fixed
  	lint warning in fscanf format string.
2000-07-13 22:05:31 +00:00
Theodore Ts'o 981dc56ae3 ChangeLog, badblocks.8.in, badblocks.c:
badblocks.c (check_mount, main): Check to see if the filesystem is
  	mounted before doing a read/write or non-destructive test.  This can
  	be overriden using the new -f option.
  badblocks.8.in: Added documentation for the -f option.
2000-07-06 14:13:29 +00:00
Theodore Ts'o 35964b5c4a ChangeLog, badblocks.8.in, badblocks.c:
badblocks.8.in: Update manual page to reflect that the blocks-count
  	parameter is now optional.  Also properly document the start-block
  	parameter.
  badblocks.c (main): Allow the blocks-count parameter to be optional.
  	If it's not specified, use the size of the device as a default.
2000-07-06 13:19:43 +00:00
Theodore Ts'o d49a22b734 ChangeLog, badblocks.c:
badblocks.c (test_nd): Significantly simplify the logic so that it's
  	more obviously what's going on.  Fixed a few potential cases which
  	weren't handled correctly in the old, overly complicated logic.
  	(flush_bufs): Now doesn't take a second argument, and always forces a
  	sync; this is required before it's really safe to call BLKFLSBUF, at
  	least for some kernels.
2000-07-06 00:31:27 +00:00
Theodore Ts'o e2207ce595 ChangeLog, Makefile.in, jump.funcs, jump.import, jump.params:
Makefile.in (uuid_time): Compile uuid_time in two steps (first create
  	.o, then link it against the libraries) to work around bug in a.out
  	linker.
  dll/jump.funcs, dll/jump.import, dll/jump.params: Update a.out shared
  	library control files to reflect new added files.
ChangeLog, feature.c, jump.funcs:
  feature.c: Make feature_list static; it shouldn't be exported.
  dll/jump.funcs: Update a.out shared library control file.
ChangeLog, badblocks.c:
  badblocks.c (flush_bufs): Use fsync() if the system doesn't support
  	fdatasync().
2000-04-06 21:51:18 +00:00
Theodore Ts'o 373b8337c7 Many files:
badblocks.c, dumpe2fs.c, e2label.c, mke2fs.c, tune2fs.c, uuidgen.c:
  	For platforms that don't define optarg.h, manually define optarg and
  	optind.
ChangeLog, main.c:
  main.c: For platforms that don't define optarg.h, manually define
  	optarg and optind.
ChangeLog, unix.c:
  unix.c: For platforms that don't define optarg.h, manually define
  	optarg and optind.
2000-04-03 16:22:35 +00:00