/****************************************************************** * NAME: main * */ main( int32 argc, char **argv ) { int32 main_rc = 0; main_rc = clrbblks( argc, argv ); return( main_rc ); }
/***************************************************************************** * NAME: ClrBdBlkLst_processing * * FUNCTION: Invoke the JFS processing to clear the LVM's bad block list. * * PARAMETERS: none * * NOTES: Starts a child process for the utility. * * RETURNS: * success: FSCK_OK * failure: something else */ retcode_t ClrBdBlkLst_processing ( ) { retcode_t kcbbl_rc = FSCK_OK; retcode_t intermed_rc = FSCK_OK; retcode_t redeterm_rc = FSCK_OK; //PS21032004 struct fsckcbbl_record *cbblrecptr; int I_am_logredo = 0; cbblrecptr = &(agg_recptr->blkmp_ctlptr->cbblrec); if( cbblrecptr == NULL ) { if( agg_recptr->blkmp_ctlptr == NULL ) { intermed_rc = alloc_wrksp( sizeof(fsck_blk_map_hdr_t), dynstg_blkmap_hdr, I_am_logredo, (void **) &(agg_recptr->blkmp_ctlptr) ); if( intermed_rc == FSCK_OK ) { strncpy( agg_recptr->blkmp_ctlptr->hdr.eyecatcher, fbmh_eyecatcher_string, strlen(fbmh_eyecatcher_string)); /* fill eyecatcher */ } } intermed_rc = blkmap_get_ctl_page ( agg_recptr->blkmp_ctlptr ); if( intermed_rc == FSCK_OK ) { cbblrecptr = &(agg_recptr->blkmp_ctlptr->cbblrec); } } if( cbblrecptr != NULL ) { memcpy( (void *) &(cbblrecptr->eyecatcher), (void *) "*unset**", 8 ); intermed_rc = blkmap_put_ctl_page ( agg_recptr->blkmp_ctlptr ); } fsck_send_msg( fsck_LVMFSNOWAVAIL, 0, 0 ); fsck_send_msg( fsck_LVMTRNSBBLKSTOJFS, 0, 0 ); /* * close the file system so clrbblks can get it */ //PS24072004 close_volume(); //PS21032004 kcbbl_rc = exec_clrbdblks( ); //PS21032004 Begin redeterm_rc = ujfs_redeterminemedia( Dev_IOPort ); sprintf( message_parm_0, "%ld", redeterm_rc ); msgprms[0] = message_parm_0; msgprmidx[0] = 0; fsck_send_msg( fsck_DEVREDETERMRC, 0, 1 ); kcbbl_rc = clrbblks( 0, 0, Dev_IOPort, Vol_Label); if(( !agg_recptr->parm_options[UFS_CHKDSK_AUTOCHECK] ) && ( !agg_recptr->parm_options[UFS_CHKDSK_CLRBDBLKLST] )) { // beginformat called unmount -> flush the JFS cache. redeterm_rc = ujfs_beginformat( Dev_IOPort ); sprintf( message_parm_0, "%ld", redeterm_rc ); msgprms[0] = message_parm_0; msgprmidx[0] = 0; fsck_send_msg( fsck_DEVBEGINFMTRC, 0, 1 ); } /* * open the file system and get the clrbblks * communication area */ //PS21032004 End //PS21032004 open_volume( Vol_Label ); intermed_rc = blkmap_get_ctl_page ( agg_recptr->blkmp_ctlptr ); if( intermed_rc == FSCK_OK ) { if( memcmp((void *)&(cbblrecptr->eyecatcher),(void *)"*unset**", 8) != 0 ) { /* * The eyecatcher field was reset. there is good reason to * believe that clrbblks processing did actually write to the * record. */ sprintf( message_parm_0, "%ld", cbblrecptr->cbbl_retcode ); msgprms[0] = message_parm_0; msgprmidx[0] = 0; fsck_send_msg( fsck_CLRBBLKSRC, 0, 1 ); sprintf( message_parm_0, "%ld", cbblrecptr->LVM_lists ); msgprms[0] = message_parm_0; msgprmidx[0] = 0; fsck_send_msg( fsck_CLRBBLVMNUMLISTS, 0, 1 ); sprintf( message_parm_0, "%lld", (cbblrecptr->fs_last_metablk+1) ); msgprms[0] = message_parm_0; msgprmidx[0] = 0; sprintf( message_parm_1, "%lld", (cbblrecptr->fs_first_wspblk-1) ); msgprms[1] = message_parm_1; msgprmidx[1] = 0; fsck_send_msg( fsck_CLRBBRANGE, 0, 2 ); sprintf( message_parm_0, "%ld", cbblrecptr->reloc_extents ); msgprms[0] = message_parm_0; msgprmidx[0] = 0; sprintf( message_parm_1, "%ld", cbblrecptr->reloc_blocks ); msgprms[1] = message_parm_1; msgprmidx[1] = 0; fsck_send_msg( fsck_CLRBBACTIVITY, 0, 2 ); sprintf( message_parm_0, "%ld", cbblrecptr->total_bad_blocks ); msgprms[0] = message_parm_0; msgprmidx[0] = 0; sprintf( message_parm_1, "%ld", cbblrecptr->resolved_blocks ); msgprms[1] = message_parm_1; msgprmidx[1] = 0; fsck_send_msg( fsck_CLRBBRESULTS, 0, 2 ); } } return( kcbbl_rc ); } /* end of ClrBdBlkLst_processing() */