From: Kevin C. <kc...@us...> - 2004-04-29 18:52:16
|
Update of /cvsroot/evms/evms2/engine/plugins/s390 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24997 Modified Files: 390segmgr.c 390segmgr.h helpers.c helpers.h Log Message: Remove all the out-dated multipath code from the 390 segment manager. Multipath is handled by other plugins in EVMS. Index: helpers.h =================================================================== RCS file: /cvsroot/evms/evms2/engine/plugins/s390/helpers.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- helpers.h 11 Dec 2003 17:48:11 -0000 1.9 +++ helpers.h 29 Apr 2004 18:52:06 -0000 1.10 @@ -45,8 +45,6 @@ void * insert_s390_segment_into_list( list_anchor_t seglist, storage_object_t *seg ); void * insert_s390_segment_into_ordered_list( list_anchor_t seglist, storage_object_t *seg ); -LOGICALDISK * get_s390_multipath_disk( LOGICALDISK *ld1, volume_label_t *vlabel ); - DISKSEG * get_s390_segment_from_minor( LOGICALDISK *ld, int minor ); int get_next_s390_minor( LOGICALDISK *ld ); Index: 390segmgr.c =================================================================== RCS file: /cvsroot/evms/evms2/engine/plugins/s390/390segmgr.c,v retrieving revision 1.48 retrieving revision 1.49 diff -u -d -r1.48 -r1.49 --- 390segmgr.c 24 Mar 2004 21:28:30 -0000 1.48 +++ 390segmgr.c 29 Apr 2004 18:52:06 -0000 1.49 @@ -679,7 +679,7 @@ * Called to create a DATA segment on the specified disk. */ static DISKSEG * create_data_segment( list_anchor_t output_list, - storage_object_t *object, + storage_object_t *disk, u_int64_t offset, u_int64_t size, data_type_t type, @@ -692,7 +692,7 @@ LOG_ENTRY(); - segment = allocate_s390_disk_segment( object ); + segment = allocate_s390_disk_segment( disk ); if (segment) { @@ -702,7 +702,7 @@ ((SEG_PRIVATE_DATA *)segment->private_data)->minor = index; - if ( insert_s390_segment_into_list( object->parent_objects, segment ) == NULL ) { + if ( insert_s390_segment_into_list( disk->parent_objects, segment ) == NULL ) { free_s390_disk_segment(segment); segment = NULL; } @@ -789,11 +789,9 @@ char volume_label_sector[EVMS_VSECTOR_SIZE]; volume_label_t *vlabel = (volume_label_t *) volume_label_sector; - list_element_t e; struct hd_geometry geo; DISK_PRIVATE_DATA *disk_pdata = NULL; - LOGICALDISK *mp_disk=NULL; DISKSEG *md=NULL; DISKSEG *seg; @@ -921,57 +919,6 @@ /* - * Test if this is a multipath device and we already know about - * the physical disk. - */ - mp_disk = get_s390_multipath_disk(ld, vlabel); // look through existing DISK objects - // for one with a volume id that - // matches our test pattern - - - if (mp_disk) { // if we have multiple paths to the - // same physical disk then consume - // this disk storage object and return. - - LOG_DEBUG("input disk %s is actually a multipath to existing disk %s\n", ld->name, mp_disk->name ); - - e=EngFncs->insert_thing( mp_disk->child_objects, - ld, - INSERT_AFTER, - NULL); - if (e!=NULL) { - rc = 0; - } - else { - rc = EPERM; - } - - if (rc == 0) { - e=EngFncs->insert_thing( ld->parent_objects, - mp_disk, - INSERT_AFTER, - NULL); - if (e!=NULL) { - rc = 0; - } - else { - rc = EPERM; - EngFncs->remove_thing(mp_disk->child_objects, ld); - } - - } - - if (rc) { - LOG_ERROR("error, unable to consume multipath disk due to list error\n" ); - } - - LOG_EXIT_INT(rc); - return rc; - - } - - - /* * Create private data area for this new DASD object */ create_s390_disk_private_data(ld); @@ -2322,54 +2269,13 @@ } - -static int S390_MP_IO( LOGICALDISK *ld, - lsn_t offset, - sector_count_t count, - void *buffer, - boolean reading ) -{ - int rc; - LOGICALDISK *mp_disk; - list_element_t iter; - - LOG_ENTRY(); - - if (reading) { - rc = READ(ld, offset, count, buffer); - } - else { - rc = WRITE(ld, offset, count, buffer); - } - - if (rc) { // if I/O failure then look for multipath devices and try them - - LIST_FOR_EACH( ld->child_objects, iter, mp_disk ) { - - if (reading) { - rc = READ(mp_disk, offset, count, buffer); - } - else { - rc = WRITE(mp_disk, offset, count, buffer); - } - - } - - } - - - LOG_EXIT_INT(rc); - return rc; -} - - static int S390_Read( storage_object_t *seg, lsn_t offset, sector_count_t count, void *buffer ) { int rc; - storage_object_t * object = get_logical_disk( seg ); + storage_object_t * ld = get_logical_disk( seg ); LOG_ENTRY(); @@ -2379,7 +2285,7 @@ rc = EINVAL; } else { - rc = S390_MP_IO(object, offset + seg->start, count, buffer, TRUE); + rc = READ(ld, offset + seg->start, count, buffer); } LOG_EXIT_INT(rc); @@ -2394,7 +2300,7 @@ void *buffer ) { int rc; - storage_object_t * object = get_logical_disk( seg ); + storage_object_t * ld = get_logical_disk( seg ); LOG_ENTRY(); @@ -2404,7 +2310,7 @@ rc = EINVAL; } else { - rc = S390_MP_IO( object, offset + seg->start, count, buffer, FALSE); + rc = WRITE(ld, offset + seg->start, count, buffer); } LOG_EXIT_INT(rc); Index: 390segmgr.h =================================================================== RCS file: /cvsroot/evms/evms2/engine/plugins/s390/390segmgr.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- 390segmgr.h 11 Dec 2003 17:48:11 -0000 1.12 +++ 390segmgr.h 29 Apr 2004 18:52:06 -0000 1.13 @@ -55,9 +55,6 @@ -// multipath test pattern ... consists only of invalid ascii and ebcdic characters -#define EVMS_MP_TEST_PATTERN (&(char []) {0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF}) - #define MAX_S390_PARTITIONS 24 /* arbitrary number of partitions we can create on a disk */ #define S390_SEG_MGR_PDATA_SIGNATURE 0x73333930 /* s390 */ Index: helpers.c =================================================================== RCS file: /cvsroot/evms/evms2/engine/plugins/s390/helpers.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- helpers.c 24 Mar 2004 21:02:27 -0000 1.20 +++ helpers.c 29 Apr 2004 18:52:06 -0000 1.21 @@ -513,168 +513,7 @@ } - LOG_ERROR("error: get_disk_private_data(%s) returning NULL\n", ld->name); - return NULL; -} - - - -/* - * Called to see if the two disks LD1 and LD2 are the same - * physical disks by comapring geometry and volume labels. - * - * Returns: TRUE if they are the same physical disk - * FALSE if not - */ -static boolean same_physical_disk( LOGICALDISK *ld1, LOGICALDISK *ld2 ) -{ - int rc=0,blocksize; - - boolean same_disk_result=FALSE; - lba_t lba; - - char volume_label_sector1[EVMS_VSECTOR_SIZE]; - volume_label_t *vlabel = (volume_label_t *) volume_label_sector1; - - char volume_label_sector2[EVMS_VSECTOR_SIZE]; - volume_label_t *vlabel2 = (volume_label_t *) volume_label_sector2; - - char saved_volid[VOLSER_LENGTH]; - - struct hd_geometry geo1; - struct hd_geometry geo2; - - - - LOG_ENTRY(); - - /* - * test for same geometry - */ - geo1.cylinders = ld1->geometry.cylinders; - geo1.heads = ld1->geometry.heads; - geo1.sectors = ld1->geometry.sectors_per_track; - geo1.start = 0; - - geo2.cylinders = ld2->geometry.cylinders; - geo2.heads = ld2->geometry.heads; - geo2.sectors = ld2->geometry.sectors_per_track; - geo2.start = 0; - - blocksize = ld1->geometry.bytes_per_sector >> EVMS_VSECTOR_SIZE_SHIFT; - - if ( memcmp( &geo1, &geo2, sizeof(struct hd_geometry) )!=0 ) { - LOG_DEBUG("disk geometry is not the same for both disks\n"); - LOG_EXIT_BOOL(FALSE); - return FALSE; - } - - /* - * read the volume label record off disk 1 - */ - lba = VOLUME_LABEL_BLOCK_NUMBER * blocksize; - - rc = READ( ld1, lba, 1, (void *) vlabel); - if (rc) { - LOG_DEBUG("error(%d) reading volume label off %s.\n",rc, ld1->name); - ld1->flags |= SOFLAG_CORRUPT; - LOG_EXIT_BOOL(FALSE); - return FALSE; - } - - /* - * set test pattern in volid field - */ - memcpy( saved_volid, vlabel->volid, 6 ); - memcpy( vlabel->volid, EVMS_MP_TEST_PATTERN, 6 ); - - rc = WRITE( ld1, lba, 1, (void *) vlabel); - if (rc) { - LOG_ERROR("error, io error writing multipath test pattern to disk\n"); - ld1->flags |= SOFLAG_CORRUPT; - LOG_EXIT_BOOL(FALSE); - return FALSE; - } - - /* - * read volume label off disk 2 and see if we get a match on - * our test pattern. - */ - rc = READ( ld2, lba, 1, (void *) vlabel2); - if (rc == 0) { - - if ( memcmp(vlabel2->volid, EVMS_MP_TEST_PATTERN, 6) == 0 ) { - same_disk_result = TRUE; - } - - } - - /* - * restore the original volume label on disk 1 - */ - memcpy( vlabel->volid, saved_volid, 6 ); - rc = WRITE( ld1, lba, 1, (void *) vlabel); - if (rc) { - rc = WRITE( ld1, lba, 1, (void *) vlabel); - if (rc) { - LOG_ERROR("error, io error restoring multipath test pattern to disk\n"); - ld1->flags |= SOFLAG_CORRUPT; - } - } - - - LOG_EXIT_BOOL(same_disk_result); - return same_disk_result; -} - - - -/* - * Called to see if the specified disk (LD1) is actually - * a multipath to an existing disk storage object (LD2). - * - * Proceedure: - * - * Pick first LD2 from our private logical disk list - * - * IF ... volume id of LD1 matches the volume id of LD2 - * THEN ... { - * modify volume label on disk LD1 using predetermined test pattern - * read volume label off disk LD2 - * IF ... the volume id from disk LD2 is our test pattern - * THEN ... LD1 and LD2 are the same disk, return LD2 to caller - * ELSE ... try another LD2 by continuing to next list item - * } - * ELSE ... try another LD2 by continuing to next list item - * - */ -LOGICALDISK * get_s390_multipath_disk( LOGICALDISK *ld1, volume_label_t *vlabel ) -{ - LOGICALDISK *ld2=NULL; - DISK_PRIVATE_DATA *disk_pdata=NULL; - list_element_t iter; - - LOG_ENTRY(); - - if ( Disk_PrivateData_List ) { - - LIST_FOR_EACH( Disk_PrivateData_List, iter, disk_pdata ) { - - ld2 = (LOGICALDISK *)disk_pdata->key; - - if ( memcmp( &vlabel->volid, &disk_pdata->vlabel.volid, 6) == 0) { - - if ( same_physical_disk( ld1, ld2 ) == TRUE) { - LOG_EXIT_PTR(ld2); - return ld2; - } - - } - } - - } - - LOG_EXIT_PTR(NULL); + LOG_EXIT_PTR(NULL); return NULL; } |