コード例 #1
0
/******************************************************************
 * NAME: 	main	
 *
 */
main( int32  argc,  char  **argv )
{
    int32 main_rc = 0;

    main_rc = clrbblks( argc, argv );

    return( main_rc );
}
コード例 #2
0
/*****************************************************************************
 * 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()  */