b=17511
r=adilger,johann - removes deadlock possibility by disabling rehash in hash_del() operations and moving hash_add() out of spin_locks when calling. Hash table has own mechanisms for protecting its structures and it also has hash_add_unique() method for using in concurrent run contexts; - fixed missed lh_put() in hash_add_unique() which led to extra refs in some cases (extra ref to export) and inability to cleanup; - fixed __lustre_hash_set_theta() which set @max theta into ->lh_min_theta; - in lustre_hash_rehash_size() disable rehash also for the case when new and old hash sizes equal in corner cases (max_size or min_size). Before this fix it could be possible to do needless rehashes when size is actually did not change but we do this expensive operation; - disable rehash in hash_add_unique() if no actual add happened since entry with the same key is already found in the table; - some cleanups in hash table code;
Showing
- lustre/include/class_hash.h 3 additions, 3 deletionslustre/include/class_hash.h
- lustre/ldlm/ldlm_flock.c 1 addition, 2 deletionslustre/ldlm/ldlm_flock.c
- lustre/ldlm/ldlm_lib.c 5 additions, 8 deletionslustre/ldlm/ldlm_lib.c
- lustre/ldlm/ldlm_lock.c 2 additions, 1 deletionlustre/ldlm/ldlm_lock.c
- lustre/ldlm/ldlm_lockd.c 5 additions, 4 deletionslustre/ldlm/ldlm_lockd.c
- lustre/mds/handler.c 3 additions, 3 deletionslustre/mds/handler.c
- lustre/obdclass/class_hash.c 22 additions, 24 deletionslustre/obdclass/class_hash.c
Loading
Please register or sign in to comment