mirror of https://github.com/vitalif/e2fsprogs
Merge branch 'maint' into next
commit
0698ecc1e2
|
@ -65,6 +65,9 @@ extern int optind;
|
|||
#define O_LARGEFILE 0
|
||||
#endif
|
||||
|
||||
/* Maximum number of bad blocks we support */
|
||||
#define MAX_BAD_BLOCKS (INT_MAX/2)
|
||||
|
||||
static const char * program_name = "badblocks";
|
||||
static const char * done_string = N_("done \n");
|
||||
|
||||
|
@ -78,7 +81,9 @@ static int t_max; /* allocated test patterns */
|
|||
static unsigned int *t_patts; /* test patterns */
|
||||
static int use_buffered_io;
|
||||
static int exclusive_ok;
|
||||
static unsigned int max_bb; /* Abort test if more than this number of bad blocks has been encountered */
|
||||
static unsigned int max_bb = MAX_BAD_BLOCKS; /* Abort test if more than this
|
||||
* number of bad blocks has been
|
||||
* encountered */
|
||||
static unsigned int d_flag; /* delay factor between reads */
|
||||
static struct timeval time_start;
|
||||
|
||||
|
@ -526,7 +531,7 @@ static unsigned int test_ro (int dev, blk_t last_block,
|
|||
alarm_intr(SIGALRM);
|
||||
while (currently_testing < last_block)
|
||||
{
|
||||
if (max_bb && bb_count >= max_bb) {
|
||||
if (bb_count >= max_bb) {
|
||||
if (s_flag || v_flag) {
|
||||
fputs(_("Too many bad blocks, aborting test\n"), stderr);
|
||||
}
|
||||
|
@ -633,7 +638,7 @@ static unsigned int test_rw (int dev, blk_t last_block,
|
|||
|
||||
try = blocks_at_once;
|
||||
while (currently_testing < last_block) {
|
||||
if (max_bb && bb_count >= max_bb) {
|
||||
if (bb_count >= max_bb) {
|
||||
if (s_flag || v_flag) {
|
||||
fputs(_("Too many bad blocks, aborting test\n"), stderr);
|
||||
}
|
||||
|
@ -675,7 +680,7 @@ static unsigned int test_rw (int dev, blk_t last_block,
|
|||
|
||||
try = blocks_at_once;
|
||||
while (currently_testing < last_block) {
|
||||
if (max_bb && bb_count >= max_bb) {
|
||||
if (bb_count >= max_bb) {
|
||||
if (s_flag || v_flag) {
|
||||
fputs(_("Too many bad blocks, aborting test\n"), stderr);
|
||||
}
|
||||
|
@ -822,7 +827,7 @@ static unsigned int test_nd (int dev, blk_t last_block,
|
|||
alarm_intr(SIGALRM);
|
||||
|
||||
while (currently_testing < last_block) {
|
||||
if (max_bb && bb_count >= max_bb) {
|
||||
if (bb_count >= max_bb) {
|
||||
if (s_flag || v_flag) {
|
||||
fputs(_("Too many bad blocks, aborting test\n"), stderr);
|
||||
}
|
||||
|
@ -1117,6 +1122,16 @@ int main (int argc, char ** argv)
|
|||
break;
|
||||
case 'e':
|
||||
max_bb = parse_uint(optarg, "max bad block count");
|
||||
if (max_bb > MAX_BAD_BLOCKS) {
|
||||
com_err (program_name, 0,
|
||||
_("Too big max bad blocks count %u - "
|
||||
"maximum is %u"), max_bb,
|
||||
MAX_BAD_BLOCKS);
|
||||
exit (1);
|
||||
}
|
||||
/* 0 really means unlimited but we cannot do that much... */
|
||||
if (max_bb == 0)
|
||||
max_bb = MAX_BAD_BLOCKS;
|
||||
break;
|
||||
case 'd':
|
||||
d_flag = parse_uint(optarg, "read delay factor");
|
||||
|
|
|
@ -321,10 +321,30 @@ int main (int argc, char ** argv)
|
|||
}
|
||||
fs->default_bitmap_type = EXT2FS_BMAP64_RBTREE;
|
||||
|
||||
if (!(mount_flags & EXT2_MF_MOUNTED)) {
|
||||
if (!force && ((fs->super->s_lastcheck < fs->super->s_mtime) ||
|
||||
(fs->super->s_state & EXT2_ERROR_FS) ||
|
||||
((fs->super->s_state & EXT2_VALID_FS) == 0))) {
|
||||
/*
|
||||
* Before acting on an unmounted filesystem, make sure it's ok,
|
||||
* unless the user is forcing it.
|
||||
*
|
||||
* We do ERROR and VALID checks even if we're only printing the
|
||||
* minimimum size, because traversal of a badly damaged filesystem
|
||||
* can cause issues as well. We don't require it to be fscked after
|
||||
* the last mount time in this case, though, as this is a bit less
|
||||
* risky.
|
||||
*/
|
||||
if (!force && !(mount_flags & EXT2_MF_MOUNTED)) {
|
||||
int checkit = 0;
|
||||
|
||||
if (fs->super->s_state & EXT2_ERROR_FS)
|
||||
checkit = 1;
|
||||
|
||||
if ((fs->super->s_state & EXT2_VALID_FS) == 0)
|
||||
checkit = 1;
|
||||
|
||||
if ((fs->super->s_lastcheck < fs->super->s_mtime) &&
|
||||
!print_min_size)
|
||||
checkit = 1;
|
||||
|
||||
if (checkit) {
|
||||
fprintf(stderr,
|
||||
_("Please run 'e2fsck -f %s' first.\n\n"),
|
||||
device_name);
|
||||
|
|
Loading…
Reference in New Issue