From: Jeffrey Altman Date: Wed, 27 Aug 2008 23:03:19 +0000 (+0000) Subject: DEVEL15-windows-callback-lock-order-20080827 X-Git-Tag: openafs-devel-1_5_53~71 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=c96303577a17baa05fb7fd16e391ae2c913941cc;p=packages%2Fo%2Fopenafs.git DEVEL15-windows-callback-lock-order-20080827 LICENSE MIT do not hold cm_server_t mutex when calling cm_FindVolumeByID because the cm_volume_t lock must be obtained ahead of the cm_server_t mutex (cherry picked from commit 0affa4b86a08c3be9cb4edc4c9f680ae02a2fcd8) --- diff --git a/src/WINNT/afsd/cm_callback.c b/src/WINNT/afsd/cm_callback.c index 3d0941b6e..899c9b173 100644 --- a/src/WINNT/afsd/cm_callback.c +++ b/src/WINNT/afsd/cm_callback.c @@ -1963,13 +1963,14 @@ cm_GiveUpAllCallbacks(cm_server_t *tsp, afs_int32 markDown) cm_req_t req; cm_InitReq(&req); - + lock_ReleaseMutex(&tsp->mx); code = cm_FindVolumeByID(tsp->cellp, tsrvp->ids[i], cm_rootUserp, &req, CM_GETVOL_FLAG_NO_LRU_UPDATE | CM_GETVOL_FLAG_NO_RESET, &volp); + lock_ObtainMutex(&tsp->mx); if (code == 0) { cm_UpdateVolumeStatus(volp, tsrvp->ids[i]); cm_PutVolume(volp); - } + } } } }