Changeset 9019

Show
Ignore:
Timestamp:
08/19/11 18:52:27 (21 months ago)
Author:
shuangy
Message:

fix pvfs2-validate

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/Orange-Elaine-Distr-Dir-Branch/src/common/misc/fsck-utils.c

    r9015 r9019  
    895895    PVFS_ds_position token = PVFS_READDIR_START; 
    896896    PVFS_sysresp_readdir readdir_resp; 
    897     PVFS_handle dirdata_handle; 
     897    int dirdata_count; 
     898    PVFS_handle *dirdata_handles; 
    898899 
    899900    if (fsck_options->check_stranded_objects) 
     
    915916    set_return_code(&ret, err); 
    916917 
    917     /* get the dirdata handle and validate */ 
    918     err = PVFS_mgmt_get_dirdata_handle 
    919         (*obj_ref, &dirdata_handle, (PVFS_credentials *) creds, NULL); 
     918    /* get the dirdata handles and validate */ 
     919    dirdata_count = attributes->attr.dirdata_count; 
     920    dirdata_handles = (PVFS_handle *) malloc(dirdata_count * sizeof(PVFS_handle)); 
     921    if(!dirdata_handles) 
     922    { 
     923        gossip_err("Error: no memory for dirdata array\n"); 
     924        return -PVFS_ENOMEM; 
     925    } 
     926 
     927    err = PVFS_mgmt_get_dirdata_array(*obj_ref, (PVFS_credentials *) creds,  
     928            dirdata_handles, dirdata_count, NULL); 
    920929    if(err < 0) 
    921930    { 
    922         gossip_err("Error: unable to get dirdata handle\n"); 
     931        gossip_err("Error: unable to get dirdata array\n"); 
     932        free(dirdata_handles); 
    923933        return(err); 
    924934    } 
    925935 
    926     err = PVFS_fsck_validate_dirdata 
    927         (fsck_options, &dirdata_handle, &obj_ref->fs_id, creds); 
    928     if(err < 0) 
    929     { 
    930         gossip_err("Error: directory dirdata is invalid\n"); 
    931         return(err); 
    932     } 
    933     set_return_code(&ret, err); 
     936    for (i = 0; i < dirdata_count; i++) 
     937    { 
     938        err = PVFS_fsck_validate_dirdata 
     939            (fsck_options, &dirdata_handles[i], &obj_ref->fs_id, creds); 
     940        if(err < 0) 
     941        { 
     942            gossip_err("Error: directory dirdata is invalid\n"); 
     943            free(dirdata_handles); 
     944            return(err); 
     945        } 
     946        set_return_code(&ret, err); 
     947    } 
     948 
     949    free(dirdata_handles); 
    934950 
    935951    /* get and validate all directory entries */