[linux-lvm] bug in liblvm 0.7 [added on 11/15/1998]
Ryan Murray
rmurray at cyberhqz.com
Sat Jul 31 20:58:59 UTC 1999
The following bit of code tries to "skip" partitions if the main drive
doesn't exist:
pv_read_all_pv.c:102
for ( n = 0; n < cache_size; n++) {
dev_name = dir_cache[n].dev_name;
#ifdef DEBUG
debug ( "pv_read_all_pv -- calling pv_read with \"%s\"\n",
dev_name);
if ( ( tst = open ( dev_name, O_RDONLY)) == -1) {
if ( MAJOR ( dir_cache[n].st_rdev) != MD_MAJOR &&
MINOR ( dir_cache[n].st_rdev) % 16 == 0) {
n += 15;
continue;
}
} else close ( tst);
this will work for SCSI disks (assuming all partition devices exist),
but fails for IDE disks. IDE disks can have up to 63 partitions, and a
quick survey shows debian potato creating devices for the first 20, and
slackware 4.0 creating devices for the first 16.
The only way I can see around it is to build a second directory cache as
you move through the dir_cache, listing strings that should be skipped.
ie (semi-pseudo code):
for ( i = 0 ; i < skip_cache_size ; i++ ) {
if ( !strcmp( dir_cache_skip[i].dev_name, dev_name ) ) {
skip = YES;
break;
}
}
if ( skip )
continue;
if ( ( tst = open ( dev_name, O_RDONLY)) == -1) {
if ( MAJOR ( dir_cache[n].st_rdev) != MD_MAJOR &&
(MAJOR_IS_SCSI && MINOR ( dir_cache[n].st_rdev) % 16 == 0)
|| (MAJOR_IS_IDE && MINOR ( dir_cache[n].st_rdev) % 64 == 0)) {
// realloc memory for "dir_skip_cache"
// allocate memory in dir_skip_cache[skip_cache_size]
// for strlen(dev_name)+1
strcpy( dir_cache_skip[skip_cache_size].dev_name, dev_name );
skip_cache_size++;
continue;
}
} else close ( tst);
This gets rather ugly -- I wonder if the building of the dir_cache and
the check for the partition existing shouldn't be combined instead,
leaving the dir_cache with entries that exist on this system only?
I put it up here for discussion on what the "best" way to do this is.
The reason I bring this up is that pvscan isn't finding /dev/sda,
because of the skipping. The % 16 check also isn't valid for IDE, it
needs to be % 64.
--
Ryan Murray (rmurray at cyberhqz.com, rmurray at glenayre.com)
Software Designer, Glenayre Technologies Inc.
The opinions expressed here are my own.
More information about the linux-lvm
mailing list