Show
Ignore:
Timestamp:
06/02/10 17:35:05 (3 years ago)
Author:
pcarns
Message:

merge final precreate race fixes from trunk to 2-8 branch

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/pvfs-2-8-branch/src/io/job/job.c

    r8320 r8357  
    44274427 
    44284428    trove_pending_count--; 
    4429     assert(trove_pending_count >= 0); 
     4429 
     4430    /* don't overwrite error codes from other trove ops */ 
     4431    if(tmp_trove->jd->u.precreate_pool.error_code == 0) 
     4432    { 
     4433        tmp_trove->jd->u.precreate_pool.error_code = error_code; 
     4434    } 
     4435 
     4436    /* acquiring this mutex a little early so that it can also serve to 
     4437     * prevent multiple trove operations from racing between decrementing  
     4438     * and then reading the pool.trove_pending counter 
     4439     */ 
     4440    gen_mutex_lock(&completion_mutex); 
    44304441 
    44314442    tmp_trove->jd->u.precreate_pool.trove_pending--; 
    44324443    assert(tmp_trove->jd->u.precreate_pool.trove_pending >= 0); 
    44334444 
    4434     /* don't overwrite error codes from other trove ops */ 
    4435     if(tmp_trove->jd->u.precreate_pool.error_code == 0) 
    4436     { 
    4437         tmp_trove->jd->u.precreate_pool.error_code = error_code; 
    4438     } 
    4439  
    44404445    /* is this job done? */ 
    44414446    if(tmp_trove->jd->u.precreate_pool.trove_pending == 0) 
    44424447    { 
    4443         gen_mutex_lock(&completion_mutex); 
    4444  
    44454448        /* set job descriptor fields and put into completion queue */ 
    44464449        tmp_trove->jd->u.precreate_pool.error_code = 0; 
     
    44594462    } 
    44604463 
     4464    gen_mutex_unlock(&completion_mutex); 
    44614465    return; 
    44624466} 
     
    57055709    jd->u.precreate_pool.fsid = fsid; 
    57065710    jd->u.precreate_pool.servers = servers; 
     5711    jd->u.precreate_pool.flags = flags; 
    57075712    jd->u.precreate_pool.trove_pending = 0; 
    5708     jd->u.precreate_pool.flags = flags; 
    57095713 
    57105714    /* rotate to use a different starting server in the pool next time */ 
     
    58615865    } 
    58625866 
     5867    /* pre-increment pending count before posting any trove operations */ 
     5868    jd->u.precreate_pool.trove_pending = jd->u.precreate_pool.precreate_handle_count; 
     5869 
    58635870    /* post all trove operations at once */ 
    58645871    for(i=0; i<jd->u.precreate_pool.precreate_handle_count; i++) 
     
    59015908        } 
    59025909 
    5903         /* pre-increment pending count before posting trove operation */ 
    5904         trove_pending_count++; 
    5905         jd->u.precreate_pool.trove_pending++; 
    59065910 
    59075911        /* post trove operation to pull out a handle */ 
     
    59335937        else 
    59345938        { 
     5939            trove_pending_count++; 
    59355940            /* callback will be triggered later */ 
    59365941        }