Index: openafs/src/WINNT/afsapplib/afsapplib.cpp diff -c openafs/src/WINNT/afsapplib/afsapplib.cpp:1.3 openafs/src/WINNT/afsapplib/afsapplib.cpp:1.3.4.1 *** openafs/src/WINNT/afsapplib/afsapplib.cpp:1.3 Sat Nov 5 01:47:44 2005 --- openafs/src/WINNT/afsapplib/afsapplib.cpp Fri Feb 2 23:53:04 2007 *************** *** 33,39 **** extern void OnExpiredCredentials (WPARAM wp, LPARAM lp); extern void OnCreateErrorDialog (WPARAM wp, LPARAM lp); ! BOOL CALLBACK AfsAppLib_MainHook (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); /* --- 33,39 ---- extern void OnExpiredCredentials (WPARAM wp, LPARAM lp); extern void OnCreateErrorDialog (WPARAM wp, LPARAM lp); ! HRESULT CALLBACK AfsAppLib_MainHook (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); /* *************** *** 69,75 **** } ! BOOL CALLBACK AfsAppLib_MainHook (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hWnd, AfsAppLib_MainHook); --- 69,75 ---- } ! HRESULT CALLBACK AfsAppLib_MainHook (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hWnd, AfsAppLib_MainHook); *************** *** 93,100 **** } if (oldProc) ! return (CallWindowProc ((WNDPROC)oldProc, hWnd, msg, wp, lp)==NULL?FALSE:TRUE); else ! return (DefWindowProc (hWnd, msg, wp, lp)==NULL?FALSE:TRUE); } --- 93,100 ---- } if (oldProc) ! return (CallWindowProc ((WNDPROC)oldProc, hWnd, msg, wp, lp)); else ! return (DefWindowProc (hWnd, msg, wp, lp)); } Index: openafs/src/WINNT/afsapplib/al_browse.cpp diff -c openafs/src/WINNT/afsapplib/al_browse.cpp:1.3 openafs/src/WINNT/afsapplib/al_browse.cpp:1.3.4.1 *** openafs/src/WINNT/afsapplib/al_browse.cpp:1.3 Sat Nov 5 01:47:44 2005 --- openafs/src/WINNT/afsapplib/al_browse.cpp Fri Feb 2 23:53:04 2007 *************** *** 58,64 **** } BROWSEDIALOGPARAMS, *LPBROWSEDIALOGPARAMS; ! BOOL CALLBACK DlgProc_Browse (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void DlgProc_Browse_OnInitDialog (HWND hDlg, BROWSEDIALOGPARAMS *pbdp); void DlgProc_Browse_OnNone (HWND hDlg, BROWSEDIALOGPARAMS *pbdp); void DlgProc_Browse_SelectedEntry (HWND hDlg, BROWSEDIALOGPARAMS *pbdp); --- 58,64 ---- } BROWSEDIALOGPARAMS, *LPBROWSEDIALOGPARAMS; ! HRESULT CALLBACK DlgProc_Browse (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void DlgProc_Browse_OnInitDialog (HWND hDlg, BROWSEDIALOGPARAMS *pbdp); void DlgProc_Browse_OnNone (HWND hDlg, BROWSEDIALOGPARAMS *pbdp); void DlgProc_Browse_SelectedEntry (HWND hDlg, BROWSEDIALOGPARAMS *pbdp); *************** *** 135,141 **** #define WM_THREADSTART (WM_USER +101) #define WM_THREADDONE (WM_USER +102) ! BOOL CALLBACK DlgProc_Browse (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { BROWSEDIALOGPARAMS *pbdp; --- 135,141 ---- #define WM_THREADSTART (WM_USER +101) #define WM_THREADDONE (WM_USER +102) ! HRESULT CALLBACK DlgProc_Browse (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { BROWSEDIALOGPARAMS *pbdp; Index: openafs/src/WINNT/afsapplib/al_browseset.cpp diff -c openafs/src/WINNT/afsapplib/al_browseset.cpp:1.3 openafs/src/WINNT/afsapplib/al_browseset.cpp:1.3.4.1 *** openafs/src/WINNT/afsapplib/al_browseset.cpp:1.3 Sat Nov 5 01:47:44 2005 --- openafs/src/WINNT/afsapplib/al_browseset.cpp Fri Feb 2 23:53:04 2007 *************** *** 30,36 **** * */ ! BOOL CALLBACK BrowseSet_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void BrowseSet_OnInitDialog (HWND hDlg, LPBROWSESETDLG_PARAMS pszFilename); void BrowseSet_OnDestroy (HWND hDlg); void BrowseSet_OnAddString (HWND hDlg, LPTSTR pszString); --- 30,36 ---- * */ ! HRESULT CALLBACK BrowseSet_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void BrowseSet_OnInitDialog (HWND hDlg, LPBROWSESETDLG_PARAMS pszFilename); void BrowseSet_OnDestroy (HWND hDlg); void BrowseSet_OnAddString (HWND hDlg, LPTSTR pszString); *************** *** 54,60 **** } ! BOOL CALLBACK BrowseSet_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { if (AfsAppLib_HandleHelp (IDD_APPLIB_BROWSE_FILESET, hDlg, msg, wp, lp)) return TRUE; --- 54,60 ---- } ! HRESULT CALLBACK BrowseSet_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { if (AfsAppLib_HandleHelp (IDD_APPLIB_BROWSE_FILESET, hDlg, msg, wp, lp)) return TRUE; Index: openafs/src/WINNT/afsapplib/al_cover.cpp diff -c openafs/src/WINNT/afsapplib/al_cover.cpp:1.4 openafs/src/WINNT/afsapplib/al_cover.cpp:1.4.4.1 *** openafs/src/WINNT/afsapplib/al_cover.cpp:1.4 Sat Nov 5 01:47:44 2005 --- openafs/src/WINNT/afsapplib/al_cover.cpp Fri Feb 2 23:53:04 2007 *************** *** 53,59 **** void OnCoverWindow (WPARAM wp, LPARAM lp); ! BOOL CALLBACK Cover_DialogProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); /* --- 53,59 ---- void OnCoverWindow (WPARAM wp, LPARAM lp); ! HRESULT CALLBACK Cover_DialogProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); /* *************** *** 156,162 **** } ! BOOL CALLBACK Cover_DialogProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { --- 156,162 ---- } ! HRESULT CALLBACK Cover_DialogProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { Index: openafs/src/WINNT/afsapplib/al_creds.cpp diff -c openafs/src/WINNT/afsapplib/al_creds.cpp:1.6.4.1 openafs/src/WINNT/afsapplib/al_creds.cpp:1.6.4.2 *** openafs/src/WINNT/afsapplib/al_creds.cpp:1.6.4.1 Sun Jun 25 13:54:47 2006 --- openafs/src/WINNT/afsapplib/al_creds.cpp Fri Feb 2 23:53:04 2007 *************** *** 36,56 **** void OnExpiredCredentials (WPARAM wp, LPARAM lp); ! BOOL CALLBACK OpenCell_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void OpenCell_OnInitDialog (HWND hDlg, LPOPENCELLDLG_PARAMS lpp); BOOL OpenCell_OnOK (HWND hDlg, LPOPENCELLDLG_PARAMS lpp); void OpenCell_OnCell (HWND hDlg); void OpenCell_Enable (HWND hDlg, BOOL fEnable); void OpenCell_OnGotCreds (HWND hDlg, LPARAM lp); ! BOOL CALLBACK NewCreds_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void NewCreds_OnInitDialog (HWND hDlg, LPCREDENTIALSDLG_PARAMS lpp); BOOL NewCreds_OnOK (HWND hDlg, LPCREDENTIALSDLG_PARAMS lpp); void NewCreds_OnLogin (HWND hDlg); void NewCreds_Enable (HWND hDlg, BOOL fEnable); void NewCreds_GetOutParams (HWND hDlg, LPCREDENTIALSDLG_PARAMS lpp); ! BOOL CALLBACK BadCreds_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); /* --- 36,56 ---- void OnExpiredCredentials (WPARAM wp, LPARAM lp); ! HRESULT CALLBACK OpenCell_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void OpenCell_OnInitDialog (HWND hDlg, LPOPENCELLDLG_PARAMS lpp); BOOL OpenCell_OnOK (HWND hDlg, LPOPENCELLDLG_PARAMS lpp); void OpenCell_OnCell (HWND hDlg); void OpenCell_Enable (HWND hDlg, BOOL fEnable); void OpenCell_OnGotCreds (HWND hDlg, LPARAM lp); ! HRESULT CALLBACK NewCreds_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void NewCreds_OnInitDialog (HWND hDlg, LPCREDENTIALSDLG_PARAMS lpp); BOOL NewCreds_OnOK (HWND hDlg, LPCREDENTIALSDLG_PARAMS lpp); void NewCreds_OnLogin (HWND hDlg); void NewCreds_Enable (HWND hDlg, BOOL fEnable); void NewCreds_GetOutParams (HWND hDlg, LPCREDENTIALSDLG_PARAMS lpp); ! HRESULT CALLBACK BadCreds_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); /* *************** *** 183,189 **** } ! BOOL CALLBACK OpenCell_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { LPOPENCELLDLG_PARAMS lpp; if (msg == WM_INITDIALOG) --- 183,189 ---- } ! HRESULT CALLBACK OpenCell_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { LPOPENCELLDLG_PARAMS lpp; if (msg == WM_INITDIALOG) *************** *** 486,492 **** } ! BOOL CALLBACK NewCreds_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { LPCREDENTIALSDLG_PARAMS lpp; if (msg == WM_INITDIALOG) --- 486,492 ---- } ! HRESULT CALLBACK NewCreds_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { LPCREDENTIALSDLG_PARAMS lpp; if (msg == WM_INITDIALOG) *************** *** 848,854 **** } ! BOOL CALLBACK BadCreds_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { LPREALBADCREDSDLG_PARAMS lpp; if (msg == WM_INITDIALOG) --- 848,854 ---- } ! HRESULT CALLBACK BadCreds_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { LPREALBADCREDSDLG_PARAMS lpp; if (msg == WM_INITDIALOG) Index: openafs/src/WINNT/afsapplib/al_error.cpp diff -c openafs/src/WINNT/afsapplib/al_error.cpp:1.2.32.1 openafs/src/WINNT/afsapplib/al_error.cpp:1.2.32.2 *** openafs/src/WINNT/afsapplib/al_error.cpp:1.2.32.1 Sun Jun 25 13:54:47 2006 --- openafs/src/WINNT/afsapplib/al_error.cpp Fri Feb 2 23:53:04 2007 *************** *** 21,27 **** void cdecl vErrorDialog (BOOL fFatal, DWORD dwStatus, LONG idError, LPTSTR pszFmt, va_list arg); ! BOOL CALLBACK Error_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void OnCreateErrorDialog (WPARAM wp, LPARAM lp); --- 21,27 ---- void cdecl vErrorDialog (BOOL fFatal, DWORD dwStatus, LONG idError, LPTSTR pszFmt, va_list arg); ! HRESULT CALLBACK Error_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void OnCreateErrorDialog (WPARAM wp, LPARAM lp); *************** *** 134,140 **** } ! BOOL CALLBACK Error_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { --- 134,140 ---- } ! HRESULT CALLBACK Error_DlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { Index: openafs/src/WINNT/afsapplib/al_misc.cpp diff -c openafs/src/WINNT/afsapplib/al_misc.cpp:1.5.4.1 openafs/src/WINNT/afsapplib/al_misc.cpp:1.5.4.2 *** openafs/src/WINNT/afsapplib/al_misc.cpp:1.5.4.1 Sun Jun 25 13:54:47 2006 --- openafs/src/WINNT/afsapplib/al_misc.cpp Fri Feb 2 23:53:04 2007 *************** *** 30,36 **** * */ ! BOOL CALLBACK AfsAppLib_TranslateErrorFunc (LPTSTR pszText, ULONG code, LANGID idLanguage); /* --- 30,36 ---- * */ ! HRESULT CALLBACK AfsAppLib_TranslateErrorFunc (LPTSTR pszText, ULONG code, LANGID idLanguage); /* *************** *** 159,165 **** } ! BOOL CALLBACK AnimationHook (HWND hIcon, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hIcon, AnimationHook); --- 159,165 ---- } ! HRESULT CALLBACK AnimationHook (HWND hIcon, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hIcon, AnimationHook); *************** *** 178,186 **** } if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hIcon, msg, wp, lp); else ! return (BOOL)DefWindowProc (hIcon, msg, wp, lp); } --- 178,186 ---- } if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hIcon, msg, wp, lp); else ! return DefWindowProc (hIcon, msg, wp, lp); } *************** *** 205,211 **** * */ ! BOOL CALLBACK AfsAppLib_TranslateErrorFunc (LPTSTR pszText, ULONG code, LANGID idLanguage) { DWORD idClient; if ((idClient = (DWORD)AfsAppLib_GetAdminServerClientID()) != 0) --- 205,211 ---- * */ ! HRESULT CALLBACK AfsAppLib_TranslateErrorFunc (LPTSTR pszText, ULONG code, LANGID idLanguage) { DWORD idClient; if ((idClient = (DWORD)AfsAppLib_GetAdminServerClientID()) != 0) Index: openafs/src/WINNT/afsapplib/al_progress.cpp diff -c openafs/src/WINNT/afsapplib/al_progress.cpp:1.3.4.1 openafs/src/WINNT/afsapplib/al_progress.cpp:1.3.4.2 *** openafs/src/WINNT/afsapplib/al_progress.cpp:1.3.4.1 Sun Jun 25 13:54:47 2006 --- openafs/src/WINNT/afsapplib/al_progress.cpp Fri Feb 2 23:53:04 2007 *************** *** 176,188 **** } ! BOOL CALLBACK PROGRESSDISPLAY::ProgressDisplay_StubProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { return FALSE; } ! BOOL CALLBACK PROGRESSDISPLAY::ProgressDisplay_HookProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldproc = Subclass_FindNextHook (hWnd, PROGRESSDISPLAY::ProgressDisplay_HookProc); --- 176,188 ---- } ! HRESULT CALLBACK PROGRESSDISPLAY::ProgressDisplay_StubProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { return FALSE; } ! HRESULT CALLBACK PROGRESSDISPLAY::ProgressDisplay_HookProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldproc = Subclass_FindNextHook (hWnd, PROGRESSDISPLAY::ProgressDisplay_HookProc); *************** *** 204,212 **** } if (oldproc) ! return (BOOL)CallWindowProc ((WNDPROC)oldproc, hWnd, msg, wp, lp); else ! return (BOOL)DefWindowProc (hWnd, msg, wp, lp); } --- 204,212 ---- } if (oldproc) ! return CallWindowProc ((WNDPROC)oldproc, hWnd, msg, wp, lp); else ! return DefWindowProc (hWnd, msg, wp, lp); } Index: openafs/src/WINNT/afsapplib/al_progress.h diff -c openafs/src/WINNT/afsapplib/al_progress.h:1.2 openafs/src/WINNT/afsapplib/al_progress.h:1.2.32.1 *** openafs/src/WINNT/afsapplib/al_progress.h:1.2 Sat Nov 4 05:01:20 2000 --- openafs/src/WINNT/afsapplib/al_progress.h Fri Feb 2 23:53:04 2007 *************** *** 115,122 **** void Finish (DWORD dwStatus = 0); void PROGRESSDISPLAY::OnUpdate (void); ! static BOOL CALLBACK ProgressDisplay_StubProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); ! static BOOL CALLBACK ProgressDisplay_HookProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); static DWORD WINAPI PROGRESSDISPLAY::ThreadProc (PVOID lp); BOOL m_fFinished; --- 115,122 ---- void Finish (DWORD dwStatus = 0); void PROGRESSDISPLAY::OnUpdate (void); ! static HRESULT CALLBACK ProgressDisplay_StubProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); ! static HRESULT CALLBACK ProgressDisplay_HookProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); static DWORD WINAPI PROGRESSDISPLAY::ThreadProc (PVOID lp); BOOL m_fFinished; Index: openafs/src/WINNT/afsapplib/al_pump.cpp diff -c openafs/src/WINNT/afsapplib/al_pump.cpp:1.4.4.1 openafs/src/WINNT/afsapplib/al_pump.cpp:1.4.4.2 *** openafs/src/WINNT/afsapplib/al_pump.cpp:1.4.4.1 Sun Jun 25 13:54:47 2006 --- openafs/src/WINNT/afsapplib/al_pump.cpp Fri Feb 2 23:53:04 2007 *************** *** 64,70 **** * */ ! BOOL CALLBACK Modeless_HookProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, Modeless_HookProc); --- 64,70 ---- * */ ! HRESULT CALLBACK Modeless_HookProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, Modeless_HookProc); *************** *** 81,89 **** } if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else ! return (BOOL)DefWindowProc (hDlg, msg, wp, lp); } --- 81,89 ---- } if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else ! return DefWindowProc (hDlg, msg, wp, lp); } *************** *** 190,196 **** * */ ! BOOL CALLBACK WindowData_HookProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hWnd, WindowData_HookProc); --- 190,196 ---- * */ ! HRESULT CALLBACK WindowData_HookProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hWnd, WindowData_HookProc); *************** *** 211,219 **** } if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hWnd, msg, wp, lp); else ! return (BOOL)DefWindowProc (hWnd, msg, wp, lp); } --- 211,219 ---- } if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hWnd, msg, wp, lp); else ! return DefWindowProc (hWnd, msg, wp, lp); } Index: openafs/src/WINNT/afsapplib/al_wizard.cpp diff -c openafs/src/WINNT/afsapplib/al_wizard.cpp:1.5.4.1 openafs/src/WINNT/afsapplib/al_wizard.cpp:1.5.4.2 *** openafs/src/WINNT/afsapplib/al_wizard.cpp:1.5.4.1 Sun Jun 25 13:54:47 2006 --- openafs/src/WINNT/afsapplib/al_wizard.cpp Fri Feb 2 23:53:04 2007 *************** *** 646,652 **** } ! BOOL CALLBACK WIZARD::Template_DlgProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { if (msg == WM_INITDIALOG) SetWindowLongPtr (hWnd, DWLP_USER, lp); --- 646,652 ---- } ! HRESULT CALLBACK WIZARD::Template_DlgProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { if (msg == WM_INITDIALOG) SetWindowLongPtr (hWnd, DWLP_USER, lp); *************** *** 673,679 **** } ! BOOL CALLBACK WIZARD::Template_LeftPaneHook (HWND hLHS, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hLHS, WIZARD::Template_LeftPaneHook); --- 673,679 ---- } ! HRESULT CALLBACK WIZARD::Template_LeftPaneHook (HWND hLHS, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hLHS, WIZARD::Template_LeftPaneHook); *************** *** 925,931 **** } ! BOOL CALLBACK WIZARD::Background_DlgProc (HWND hBkg, UINT msg, WPARAM wp, LPARAM lp) { if (msg == WM_INITDIALOG) SetWindowLongPtr (hBkg, DWLP_USER, lp); --- 925,931 ---- } ! HRESULT CALLBACK WIZARD::Background_DlgProc (HWND hBkg, UINT msg, WPARAM wp, LPARAM lp) { if (msg == WM_INITDIALOG) SetWindowLongPtr (hBkg, DWLP_USER, lp); *************** *** 972,978 **** } ! BOOL CALLBACK WIZARD::Background_PaintHook (HWND hBkg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hBkg, WIZARD::Background_PaintHook); --- 972,978 ---- } ! HRESULT CALLBACK WIZARD::Background_PaintHook (HWND hBkg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hBkg, WIZARD::Background_PaintHook); *************** *** 993,1001 **** } if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hBkg, msg, wp, lp); else ! return (BOOL)DefWindowProc (hBkg, msg, wp, lp); } --- 993,1001 ---- } if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hBkg, msg, wp, lp); else ! return DefWindowProc (hBkg, msg, wp, lp); } Index: openafs/src/WINNT/afsapplib/al_wizard.h diff -c openafs/src/WINNT/afsapplib/al_wizard.h:1.3 openafs/src/WINNT/afsapplib/al_wizard.h:1.3.30.1 *** openafs/src/WINNT/afsapplib/al_wizard.h:1.3 Thu Jan 11 01:41:23 2001 --- openafs/src/WINNT/afsapplib/al_wizard.h Fri Feb 2 23:53:04 2007 *************** *** 96,111 **** void GeneratePalette (RGBQUAD *pargb = NULL); LPWIZARD_STATE FindState (int stFind); ! static BOOL CALLBACK Background_DlgProc (HWND hBkg, UINT msg, WPARAM wp, LPARAM lp); ! static BOOL CALLBACK Background_PaintHook (HWND hBkg, UINT msg, WPARAM wp, LPARAM lp); void Background_OnInitDialog (HWND hBkg); void Background_OnSize (void); void Background_OnDestroy (void); void Background_OnClose (void); BOOL Background_OnPaint (void); ! static BOOL CALLBACK Template_DlgProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); ! static BOOL CALLBACK Template_LeftPaneHook (HWND hLHS, UINT msg, WPARAM wp, LPARAM lp); BOOL Template_ForwardMessage (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); void Template_OnInitDialog (HWND hWnd); BOOL Template_OnPaintLHS (HWND hLHS); --- 96,111 ---- void GeneratePalette (RGBQUAD *pargb = NULL); LPWIZARD_STATE FindState (int stFind); ! static HRESULT CALLBACK Background_DlgProc (HWND hBkg, UINT msg, WPARAM wp, LPARAM lp); ! static HRESULT CALLBACK Background_PaintHook (HWND hBkg, UINT msg, WPARAM wp, LPARAM lp); void Background_OnInitDialog (HWND hBkg); void Background_OnSize (void); void Background_OnDestroy (void); void Background_OnClose (void); BOOL Background_OnPaint (void); ! static HRESULT CALLBACK Template_DlgProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); ! static HRESULT CALLBACK Template_LeftPaneHook (HWND hLHS, UINT msg, WPARAM wp, LPARAM lp); BOOL Template_ForwardMessage (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); void Template_OnInitDialog (HWND hWnd); BOOL Template_OnPaintLHS (HWND hLHS); Index: openafs/src/WINNT/afsapplib/checklist.cpp diff -c openafs/src/WINNT/afsapplib/checklist.cpp:1.3.4.2 openafs/src/WINNT/afsapplib/checklist.cpp:1.3.4.3 *** openafs/src/WINNT/afsapplib/checklist.cpp:1.3.4.2 Tue Dec 12 15:40:52 2006 --- openafs/src/WINNT/afsapplib/checklist.cpp Fri Feb 2 23:53:04 2007 *************** *** 57,65 **** * */ ! BOOL CALLBACK CheckListProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp); ! BOOL CALLBACK CheckList_DialogProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void CheckList_OnDrawItem (HWND hList, int id, LPDRAWITEMSTRUCT lpds); void CheckList_OnDrawCheckbox (HWND hList, int id, LPDRAWITEMSTRUCT lpds); --- 57,65 ---- * */ ! HRESULT CALLBACK CheckListProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp); ! HRESULT CALLBACK CheckList_DialogProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void CheckList_OnDrawItem (HWND hList, int id, LPDRAWITEMSTRUCT lpds); void CheckList_OnDrawCheckbox (HWND hList, int id, LPDRAWITEMSTRUCT lpds); *************** *** 158,164 **** } ! BOOL CALLBACK CheckListProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp) { HRESULT hResult; --- 158,164 ---- } ! HRESULT CALLBACK CheckListProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp) { HRESULT hResult; *************** *** 225,235 **** else hResult = (BOOL)DefWindowProc (hList, msg, wp, lp); ! return (hResult?TRUE:FALSE); } ! BOOL CALLBACK CheckList_DialogProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID procOld = Subclass_FindNextHook (hDlg, CheckList_DialogProc); --- 225,235 ---- else hResult = (BOOL)DefWindowProc (hList, msg, wp, lp); ! return (hResult); } ! HRESULT CALLBACK CheckList_DialogProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID procOld = Subclass_FindNextHook (hDlg, CheckList_DialogProc); *************** *** 272,278 **** } if (procOld) ! return (BOOL)CallWindowProc ((WNDPROC)procOld, hDlg, msg, wp, lp); else return FALSE; } --- 272,278 ---- } if (procOld) ! return CallWindowProc ((WNDPROC)procOld, hDlg, msg, wp, lp); else return FALSE; } Index: openafs/src/WINNT/afsapplib/ctl_date.cpp diff -c openafs/src/WINNT/afsapplib/ctl_date.cpp:1.3.4.1 openafs/src/WINNT/afsapplib/ctl_date.cpp:1.3.4.2 *** openafs/src/WINNT/afsapplib/ctl_date.cpp:1.3.4.1 Sun Jun 25 13:54:47 2006 --- openafs/src/WINNT/afsapplib/ctl_date.cpp Fri Feb 2 23:53:04 2007 *************** *** 96,104 **** #define cszDATECLASS TEXT("Date") ! BOOL CALLBACK DateProc (HWND hDate, UINT msg, WPARAM wp, LPARAM lp); ! BOOL CALLBACK DateEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp); ! BOOL CALLBACK DateDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void Date_SendCallback (DateInfo *pdi, WORD eln, LPARAM lp); --- 96,104 ---- #define cszDATECLASS TEXT("Date") ! HRESULT CALLBACK DateProc (HWND hDate, UINT msg, WPARAM wp, LPARAM lp); ! HRESULT CALLBACK DateEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp); ! HRESULT CALLBACK DateDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void Date_SendCallback (DateInfo *pdi, WORD eln, LPARAM lp); *************** *** 154,160 **** } ! BOOL CALLBACK DateProc (HWND hDate, UINT msg, WPARAM wp, LPARAM lp) { DateInfo *pdi = NULL; --- 154,160 ---- } ! HRESULT CALLBACK DateProc (HWND hDate, UINT msg, WPARAM wp, LPARAM lp) { DateInfo *pdi = NULL; *************** *** 262,268 **** } } ! return (BOOL)DefWindowProc (hDate, msg, wp, lp); } --- 262,268 ---- } } ! return DefWindowProc (hDate, msg, wp, lp); } *************** *** 532,538 **** } ! BOOL CALLBACK DateDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, DateDlgProc); size_t iDate; --- 532,538 ---- } ! HRESULT CALLBACK DateDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, DateDlgProc); size_t iDate; *************** *** 582,594 **** } if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else ! return (BOOL)DefWindowProc (hDlg, msg, wp, lp); } ! BOOL CALLBACK DateEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp) { DateInfo *pdi = NULL; --- 582,594 ---- } if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else ! return DefWindowProc (hDlg, msg, wp, lp); } ! HRESULT CALLBACK DateEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp) { DateInfo *pdi = NULL; *************** *** 618,626 **** PVOID oldProc = Subclass_FindNextHook (hEdit, DateEditProc); if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hEdit, msg, wp, lp); else ! return (BOOL)DefWindowProc (hEdit, msg, wp, lp); } --- 618,626 ---- PVOID oldProc = Subclass_FindNextHook (hEdit, DateEditProc); if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hEdit, msg, wp, lp); else ! return DefWindowProc (hEdit, msg, wp, lp); } Index: openafs/src/WINNT/afsapplib/ctl_elapsed.cpp diff -c openafs/src/WINNT/afsapplib/ctl_elapsed.cpp:1.3.4.1 openafs/src/WINNT/afsapplib/ctl_elapsed.cpp:1.3.4.2 *** openafs/src/WINNT/afsapplib/ctl_elapsed.cpp:1.3.4.1 Sun Jun 25 13:54:47 2006 --- openafs/src/WINNT/afsapplib/ctl_elapsed.cpp Fri Feb 2 23:53:04 2007 *************** *** 97,105 **** #define cszELAPSEDCLASS TEXT("Elapsed") ! BOOL CALLBACK ElapsedProc (HWND hElapsed, UINT msg, WPARAM wp, LPARAM lp); ! BOOL CALLBACK ElapsedEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp); ! BOOL CALLBACK ElapsedDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void Elapsed_SendCallback (ElapsedInfo *pei, WORD eln, LPARAM lp); --- 97,105 ---- #define cszELAPSEDCLASS TEXT("Elapsed") ! HRESULT CALLBACK ElapsedProc (HWND hElapsed, UINT msg, WPARAM wp, LPARAM lp); ! HRESULT CALLBACK ElapsedEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp); ! HRESULT CALLBACK ElapsedDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void Elapsed_SendCallback (ElapsedInfo *pei, WORD eln, LPARAM lp); *************** *** 159,165 **** } ! BOOL CALLBACK ElapsedProc (HWND hElapsed, UINT msg, WPARAM wp, LPARAM lp) { ElapsedInfo *pei = NULL; --- 159,165 ---- } ! HRESULT CALLBACK ElapsedProc (HWND hElapsed, UINT msg, WPARAM wp, LPARAM lp) { ElapsedInfo *pei = NULL; *************** *** 274,280 **** } } ! return (BOOL)DefWindowProc (hElapsed, msg, wp, lp); } --- 274,280 ---- } } ! return DefWindowProc (hElapsed, msg, wp, lp); } *************** *** 490,496 **** } ! BOOL CALLBACK ElapsedDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, ElapsedDlgProc); size_t iElapsed; --- 490,496 ---- } ! HRESULT CALLBACK ElapsedDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, ElapsedDlgProc); size_t iElapsed; *************** *** 515,521 **** else clr = GetSysColor (COLOR_BTNFACE); SetBkColor ((HDC)wp, clr); ! return (BOOL)(INT_PTR)CreateSolidBrush (clr); } } break; --- 515,521 ---- else clr = GetSysColor (COLOR_BTNFACE); SetBkColor ((HDC)wp, clr); ! return (HRESULT)(INT_PTR)CreateSolidBrush (clr); } } break; *************** *** 540,552 **** } if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else ! return (BOOL)DefWindowProc (hDlg, msg, wp, lp); } ! BOOL CALLBACK ElapsedEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp) { ElapsedInfo *pei = NULL; --- 540,552 ---- } if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else ! return DefWindowProc (hDlg, msg, wp, lp); } ! HRESULT CALLBACK ElapsedEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp) { ElapsedInfo *pei = NULL; *************** *** 576,584 **** PVOID oldProc = Subclass_FindNextHook (hEdit, ElapsedEditProc); if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hEdit, msg, wp, lp); else ! return (BOOL)DefWindowProc (hEdit, msg, wp, lp); } --- 576,584 ---- PVOID oldProc = Subclass_FindNextHook (hEdit, ElapsedEditProc); if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hEdit, msg, wp, lp); else ! return DefWindowProc (hEdit, msg, wp, lp); } Index: openafs/src/WINNT/afsapplib/ctl_sockaddr.cpp diff -c openafs/src/WINNT/afsapplib/ctl_sockaddr.cpp:1.3.4.1 openafs/src/WINNT/afsapplib/ctl_sockaddr.cpp:1.3.4.2 *** openafs/src/WINNT/afsapplib/ctl_sockaddr.cpp:1.3.4.1 Sun Jun 25 13:54:47 2006 --- openafs/src/WINNT/afsapplib/ctl_sockaddr.cpp Fri Feb 2 23:53:04 2007 *************** *** 97,105 **** #define cszSOCKADDRCLASS TEXT("SockAddr") ! BOOL CALLBACK SockAddrProc (HWND hSockAddr, UINT msg, WPARAM wp, LPARAM lp); ! BOOL CALLBACK SockAddrEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp); ! BOOL CALLBACK SockAddrDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void SockAddr_SendCallback (SockAddrInfo *psai, WORD eln, LPARAM lp); --- 97,105 ---- #define cszSOCKADDRCLASS TEXT("SockAddr") ! HRESULT CALLBACK SockAddrProc (HWND hSockAddr, UINT msg, WPARAM wp, LPARAM lp); ! HRESULT CALLBACK SockAddrEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp); ! HRESULT CALLBACK SockAddrDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void SockAddr_SendCallback (SockAddrInfo *psai, WORD eln, LPARAM lp); *************** *** 156,162 **** } ! BOOL CALLBACK SockAddrProc (HWND hSockAddr, UINT msg, WPARAM wp, LPARAM lp) { SockAddrInfo *psai = NULL; --- 156,162 ---- } ! HRESULT CALLBACK SockAddrProc (HWND hSockAddr, UINT msg, WPARAM wp, LPARAM lp) { SockAddrInfo *psai = NULL; *************** *** 236,242 **** } } ! return (BOOL)DefWindowProc (hSockAddr, msg, wp, lp); } --- 236,242 ---- } } ! return DefWindowProc (hSockAddr, msg, wp, lp); } *************** *** 445,451 **** } ! BOOL CALLBACK SockAddrDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, SockAddrDlgProc); size_t iSockAddr; --- 445,451 ---- } ! HRESULT CALLBACK SockAddrDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, SockAddrDlgProc); size_t iSockAddr; *************** *** 472,478 **** else clr = GetSysColor (COLOR_BTNFACE); SetBkColor ((HDC)wp, clr); ! return (BOOL)(INT_PTR)CreateSolidBrush (clr); } } break; --- 472,478 ---- else clr = GetSysColor (COLOR_BTNFACE); SetBkColor ((HDC)wp, clr); ! return (HRESULT)(INT_PTR)CreateSolidBrush (clr); } } break; *************** *** 510,522 **** } if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else ! return (BOOL)DefWindowProc (hDlg, msg, wp, lp); } ! BOOL CALLBACK SockAddrEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp) { SockAddrInfo *psai = NULL; --- 510,522 ---- } if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else ! return DefWindowProc (hDlg, msg, wp, lp); } ! HRESULT CALLBACK SockAddrEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp) { SockAddrInfo *psai = NULL; *************** *** 556,564 **** PVOID oldProc = Subclass_FindNextHook (hEdit, SockAddrEditProc); if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hEdit, msg, wp, lp); else ! return (BOOL)DefWindowProc (hEdit, msg, wp, lp); } --- 556,564 ---- PVOID oldProc = Subclass_FindNextHook (hEdit, SockAddrEditProc); if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hEdit, msg, wp, lp); else ! return DefWindowProc (hEdit, msg, wp, lp); } Index: openafs/src/WINNT/afsapplib/ctl_spinner.cpp diff -c openafs/src/WINNT/afsapplib/ctl_spinner.cpp:1.3.4.1 openafs/src/WINNT/afsapplib/ctl_spinner.cpp:1.3.4.2 *** openafs/src/WINNT/afsapplib/ctl_spinner.cpp:1.3.4.1 Sun Jun 25 13:54:47 2006 --- openafs/src/WINNT/afsapplib/ctl_spinner.cpp Fri Feb 2 23:53:04 2007 *************** *** 101,109 **** #define cszSPINNERCLASS TEXT("Spinner") ! BOOL CALLBACK SpinnerProc (HWND hSpin, UINT msg, WPARAM wp, LPARAM lp); ! BOOL CALLBACK SpinnerDialogProc (HWND hSpin, UINT msg, WPARAM wp, LPARAM lp); ! BOOL CALLBACK SpinnerBuddyProc (HWND hBuddy, UINT msg, WPARAM wp, LPARAM lp); void SpinnerSendCallback (SpinnerInfo *psi, WORD spm, LPARAM lp); --- 101,109 ---- #define cszSPINNERCLASS TEXT("Spinner") ! HRESULT CALLBACK SpinnerProc (HWND hSpin, UINT msg, WPARAM wp, LPARAM lp); ! HRESULT CALLBACK SpinnerDialogProc (HWND hSpin, UINT msg, WPARAM wp, LPARAM lp); ! HRESULT CALLBACK SpinnerBuddyProc (HWND hBuddy, UINT msg, WPARAM wp, LPARAM lp); void SpinnerSendCallback (SpinnerInfo *psi, WORD spm, LPARAM lp); *************** *** 259,265 **** } ! BOOL CALLBACK SpinnerProc (HWND hSpinner, UINT msg, WPARAM wp, LPARAM lp) { EnterCriticalSection (&csSpinners); --- 259,265 ---- } ! HRESULT CALLBACK SpinnerProc (HWND hSpinner, UINT msg, WPARAM wp, LPARAM lp) { EnterCriticalSection (&csSpinners); *************** *** 321,333 **** } if (oldSpinnerProc == 0) ! return (BOOL)DefWindowProc (hSpinner, msg, wp, lp); else ! return (BOOL)CallWindowProc ((WNDPROC)(LONG_PTR)oldSpinnerProc, hSpinner, msg, wp, lp); } ! BOOL CALLBACK SpinnerDialogProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, SpinnerDialogProc); SpinnerInfo *psi; --- 321,333 ---- } if (oldSpinnerProc == 0) ! return DefWindowProc (hSpinner, msg, wp, lp); else ! return CallWindowProc ((WNDPROC)(LONG_PTR)oldSpinnerProc, hSpinner, msg, wp, lp); } ! HRESULT CALLBACK SpinnerDialogProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, SpinnerDialogProc); SpinnerInfo *psi; *************** *** 416,429 **** } if (oldProc == 0) ! return (BOOL)DefWindowProc (hDlg, msg, wp, lp); else ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); } ! BOOL CALLBACK SpinnerBuddyProc (HWND hBuddy, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hBuddy, SpinnerBuddyProc); --- 416,429 ---- } if (oldProc == 0) ! return DefWindowProc (hDlg, msg, wp, lp); else ! return CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); } ! HRESULT CALLBACK SpinnerBuddyProc (HWND hBuddy, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hBuddy, SpinnerBuddyProc); *************** *** 501,509 **** } if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hBuddy, msg, wp, lp); else ! return (BOOL)DefWindowProc (hBuddy, msg, wp, lp); } --- 501,509 ---- } if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hBuddy, msg, wp, lp); else ! return DefWindowProc (hBuddy, msg, wp, lp); } Index: openafs/src/WINNT/afsapplib/ctl_time.cpp diff -c openafs/src/WINNT/afsapplib/ctl_time.cpp:1.3.4.1 openafs/src/WINNT/afsapplib/ctl_time.cpp:1.3.4.2 *** openafs/src/WINNT/afsapplib/ctl_time.cpp:1.3.4.1 Sun Jun 25 13:54:47 2006 --- openafs/src/WINNT/afsapplib/ctl_time.cpp Fri Feb 2 23:53:04 2007 *************** *** 98,106 **** #define cszTIMECLASS TEXT("Time") ! BOOL CALLBACK TimeProc (HWND hTime, UINT msg, WPARAM wp, LPARAM lp); ! BOOL CALLBACK TimeEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp); ! BOOL CALLBACK TimeDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void Time_SendCallback (TimeInfo *pti, WORD eln, LPARAM lp); --- 98,106 ---- #define cszTIMECLASS TEXT("Time") ! HRESULT CALLBACK TimeProc (HWND hTime, UINT msg, WPARAM wp, LPARAM lp); ! HRESULT CALLBACK TimeEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp); ! HRESULT CALLBACK TimeDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void Time_SendCallback (TimeInfo *pti, WORD eln, LPARAM lp); *************** *** 158,164 **** } ! BOOL CALLBACK TimeProc (HWND hTime, UINT msg, WPARAM wp, LPARAM lp) { TimeInfo *pti = NULL; --- 158,164 ---- } ! HRESULT CALLBACK TimeProc (HWND hTime, UINT msg, WPARAM wp, LPARAM lp) { TimeInfo *pti = NULL; *************** *** 271,277 **** } } ! return (BOOL)DefWindowProc (hTime, msg, wp, lp); } --- 271,277 ---- } } ! return DefWindowProc (hTime, msg, wp, lp); } *************** *** 513,519 **** } ! BOOL CALLBACK TimeDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, TimeDlgProc); size_t iTime; --- 513,519 ---- } ! HRESULT CALLBACK TimeDlgProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, TimeDlgProc); size_t iTime; *************** *** 539,545 **** else clr = GetSysColor (COLOR_BTNFACE); SetBkColor ((HDC)wp, clr); ! return (BOOL)(INT_PTR)CreateSolidBrush (clr); } } break; --- 539,545 ---- else clr = GetSysColor (COLOR_BTNFACE); SetBkColor ((HDC)wp, clr); ! return (HRESULT)(INT_PTR)CreateSolidBrush (clr); } } break; *************** *** 606,618 **** } if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else ! return (BOOL)DefWindowProc (hDlg, msg, wp, lp); } ! BOOL CALLBACK TimeEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp) { TimeInfo *pti = NULL; --- 606,618 ---- } if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hDlg, msg, wp, lp); else ! return DefWindowProc (hDlg, msg, wp, lp); } ! HRESULT CALLBACK TimeEditProc (HWND hEdit, UINT msg, WPARAM wp, LPARAM lp) { TimeInfo *pti = NULL; *************** *** 642,650 **** PVOID oldProc = Subclass_FindNextHook (hEdit, TimeEditProc); if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hEdit, msg, wp, lp); else ! return (BOOL)DefWindowProc (hEdit, msg, wp, lp); } --- 642,650 ---- PVOID oldProc = Subclass_FindNextHook (hEdit, TimeEditProc); if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hEdit, msg, wp, lp); else ! return DefWindowProc (hEdit, msg, wp, lp); } Index: openafs/src/WINNT/afsapplib/dialog.cpp diff -c openafs/src/WINNT/afsapplib/dialog.cpp:1.5.4.1 openafs/src/WINNT/afsapplib/dialog.cpp:1.5.4.2 *** openafs/src/WINNT/afsapplib/dialog.cpp:1.5.4.1 Sun Jun 25 13:54:47 2006 --- openafs/src/WINNT/afsapplib/dialog.cpp Fri Feb 2 23:53:04 2007 *************** *** 130,136 **** static size_t cPropSheets = 0; ! BOOL CALLBACK PropTab_HookProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { if (PropSheet_HandleNotify (hDlg, msg, wp, lp)) return TRUE; --- 130,136 ---- static size_t cPropSheets = 0; ! HRESULT CALLBACK PropTab_HookProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { if (PropSheet_HandleNotify (hDlg, msg, wp, lp)) return TRUE; *************** *** 194,200 **** } } ! return (BOOL)DefWindowProc (hDlg, msg, wp, lp); } --- 194,200 ---- } } ! return DefWindowProc (hDlg, msg, wp, lp); } *************** *** 300,314 **** } ! BOOL CALLBACK PropSheet_HookProc (HWND hSheet, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldproc = Subclass_FindNextHook (hSheet, PropSheet_HookProc); - BOOL rc; if (oldproc) ! rc = (BOOL)CallWindowProc ((WNDPROC)oldproc, hSheet, msg, wp, lp); else ! rc = (BOOL)DefWindowProc (hSheet, msg, wp, lp); switch (msg) { --- 300,314 ---- } ! HRESULT CALLBACK PropSheet_HookProc (HWND hSheet, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldproc = Subclass_FindNextHook (hSheet, PropSheet_HookProc); + HRESULT rc; if (oldproc) ! rc = CallWindowProc ((WNDPROC)oldproc, hSheet, msg, wp, lp); else ! rc = DefWindowProc (hSheet, msg, wp, lp); switch (msg) { *************** *** 1127,1133 **** BOOL fAscending; } VIEWSORTINFO, *LPVIEWSORTINFO; ! BOOL CALLBACK LV_SortView_Numeric (LPARAM lp1, LPARAM lp2, LPARAM lpSort) { LPVIEWSORTINFO lpvsi = (LPVIEWSORTINFO)lpSort; TCHAR szText[ cchRESOURCE ]; --- 1127,1133 ---- BOOL fAscending; } VIEWSORTINFO, *LPVIEWSORTINFO; ! HRESULT CALLBACK LV_SortView_Numeric (LPARAM lp1, LPARAM lp2, LPARAM lpSort) { LPVIEWSORTINFO lpvsi = (LPVIEWSORTINFO)lpSort; TCHAR szText[ cchRESOURCE ]; *************** *** 1144,1156 **** d2 = atof (szText); if (lpvsi->fAscending) ! return (d2 < d1) ? ((BOOL)-1) : (d2 == d1) ? ((BOOL)0) : (BOOL)1; else ! return (d1 < d2) ? ((BOOL)-1) : (d1 == d2) ? ((BOOL)0) : (BOOL)1; } ! BOOL CALLBACK LV_SortView_Alphabetic (LPARAM lp1, LPARAM lp2, LPARAM lpSort) { LPVIEWSORTINFO lpvsi = (LPVIEWSORTINFO)lpSort; TCHAR szText1[ cchRESOURCE ]; --- 1144,1156 ---- d2 = atof (szText); if (lpvsi->fAscending) ! return (HRESULT)((d2 < d1) ? -1 : (d2 == d1) ? 0 : 1); else ! return (HRESULT)((d1 < d2) ? -1 : (d1 == d2) ? 0 : 1); } ! HRESULT CALLBACK LV_SortView_Alphabetic (LPARAM lp1, LPARAM lp2, LPARAM lpSort) { LPVIEWSORTINFO lpvsi = (LPVIEWSORTINFO)lpSort; TCHAR szText1[ cchRESOURCE ]; *************** *** 1532,1538 **** } ! BOOL CALLBACK ListBox_HScrollHook (HWND hList, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hList, ListBox_HScrollHook); --- 1532,1538 ---- } ! HRESULT CALLBACK ListBox_HScrollHook (HWND hList, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hList, ListBox_HScrollHook); *************** *** 1587,1595 **** } if (oldProc) ! return (BOOL)CallWindowProc ((WNDPROC)oldProc, hList, msg, wp, lp); else ! return (BOOL)DefWindowProc (hList, msg, wp, lp); } --- 1587,1595 ---- } if (oldProc) ! return CallWindowProc ((WNDPROC)oldProc, hList, msg, wp, lp); else ! return DefWindowProc (hList, msg, wp, lp); } Index: openafs/src/WINNT/afsapplib/fastlist.cpp diff -c openafs/src/WINNT/afsapplib/fastlist.cpp:1.5 openafs/src/WINNT/afsapplib/fastlist.cpp:1.5.4.1 *** openafs/src/WINNT/afsapplib/fastlist.cpp:1.5 Wed Jul 6 20:23:21 2005 --- openafs/src/WINNT/afsapplib/fastlist.cpp Fri Feb 2 23:53:04 2007 *************** *** 220,227 **** BOOL OpenGlobalArray (size_t cObjects); void CloseGlobalArray (void); ! BOOL CALLBACK FastList_ControlProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp); ! BOOL CALLBACK FastList_ParentProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void FastList_OnCreate (HWND hList); void FastList_OnDestroy (HWND hList); --- 220,227 ---- BOOL OpenGlobalArray (size_t cObjects); void CloseGlobalArray (void); ! HRESULT CALLBACK FastList_ControlProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp); ! HRESULT CALLBACK FastList_ParentProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp); void FastList_OnCreate (HWND hList); void FastList_OnDestroy (HWND hList); *************** *** 447,453 **** } ! BOOL CALLBACK FastList_ControlProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { --- 447,453 ---- } ! HRESULT CALLBACK FastList_ControlProc (HWND hList, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { *************** *** 681,687 **** } ! BOOL CALLBACK FastList_ParentProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, FastList_ParentProc); --- 681,687 ---- } ! HRESULT CALLBACK FastList_ParentProc (HWND hDlg, UINT msg, WPARAM wp, LPARAM lp) { PVOID oldProc = Subclass_FindNextHook (hDlg, FastList_ParentProc); Index: openafs/src/WINNT/afsapplib/resize.cpp diff -c openafs/src/WINNT/afsapplib/resize.cpp:1.4 openafs/src/WINNT/afsapplib/resize.cpp:1.4.4.1 *** openafs/src/WINNT/afsapplib/resize.cpp:1.4 Sat Nov 5 01:47:44 2005 --- openafs/src/WINNT/afsapplib/resize.cpp Fri Feb 2 23:53:04 2007 *************** *** 96,102 **** void FindResizeLimits (HWND hWnd, LONG *pcxMin, LONG *pcxMax, LONG *pcyMin, LONG *pcyMax, rwWindowData * = 0); ! BOOL CALLBACK Resize_DialogProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); /* --- 96,102 ---- void FindResizeLimits (HWND hWnd, LONG *pcxMin, LONG *pcxMax, LONG *pcyMin, LONG *pcyMax, rwWindowData * = 0); ! HRESULT CALLBACK Resize_DialogProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); /* *************** *** 894,900 **** } ! BOOL CALLBACK Resize_DialogProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PVOID fnNext = Subclass_FindNextHook (hWnd, Resize_DialogProc); --- 894,900 ---- } ! HRESULT CALLBACK Resize_DialogProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PVOID fnNext = Subclass_FindNextHook (hWnd, Resize_DialogProc); Index: openafs/src/WINNT/afsapplib/subclass.cpp diff -c openafs/src/WINNT/afsapplib/subclass.cpp:1.6 openafs/src/WINNT/afsapplib/subclass.cpp:1.6.4.1 *** openafs/src/WINNT/afsapplib/subclass.cpp:1.6 Sat Nov 5 01:47:44 2005 --- openafs/src/WINNT/afsapplib/subclass.cpp Fri Feb 2 23:53:04 2007 *************** *** 21,27 **** * */ ! LONG CALLBACK Subclass_WndProc (HWND hTarget, UINT msg, WPARAM wp, LPARAM lp); /* --- 21,27 ---- * */ ! HRESULT CALLBACK Subclass_WndProc (HWND hTarget, UINT msg, WPARAM wp, LPARAM lp); /* *************** *** 214,220 **** } ! LONG CALLBACK Subclass_WndProc (HWND hTarget, UINT msg, WPARAM wp, LPARAM lp) { size_t iTarget; for (iTarget = 0; iTarget < nTargets; ++iTarget) --- 214,220 ---- } ! HRESULT CALLBACK Subclass_WndProc (HWND hTarget, UINT msg, WPARAM wp, LPARAM lp) { size_t iTarget; for (iTarget = 0; iTarget < nTargets; ++iTarget) Index: openafs/src/WINNT/afsd/afsd_init.c diff -c openafs/src/WINNT/afsd/afsd_init.c:1.79.2.9 openafs/src/WINNT/afsd/afsd_init.c:1.79.2.10 *** openafs/src/WINNT/afsd/afsd_init.c:1.79.2.9 Fri Jan 5 12:14:52 2007 --- openafs/src/WINNT/afsd/afsd_init.c Sat Feb 3 12:49:33 2007 *************** *** 180,187 **** SetFilePointer(afsi_file, 0, NULL, FILE_END); GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, NULL, u, sizeof(u)); ! StringCbCatA(t, sizeof(t), ": Create log file\n"); ! StringCbCatA(u, sizeof(u), ": Created log file\n"); WriteFile(afsi_file, t, (DWORD)strlen(t), &zilch, NULL); WriteFile(afsi_file, u, (DWORD)strlen(u), &zilch, NULL); p = "PATH="; --- 180,187 ---- SetFilePointer(afsi_file, 0, NULL, FILE_END); GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, NULL, NULL, u, sizeof(u)); ! StringCbCatA(t, sizeof(t), ": Create log file\r\n"); ! StringCbCatA(u, sizeof(u), ": Created log file\r\n"); WriteFile(afsi_file, t, (DWORD)strlen(t), &zilch, NULL); WriteFile(afsi_file, u, (DWORD)strlen(u), &zilch, NULL); p = "PATH="; *************** *** 190,196 **** code = GetEnvironmentVariable("PATH", path, code); WriteFile(afsi_file, p, (DWORD)strlen(p), &zilch, NULL); WriteFile(afsi_file, path, (DWORD)strlen(path), &zilch, NULL); ! WriteFile(afsi_file, "\n", (DWORD)1, &zilch, NULL); free(path); /* Initialize C RTL Code Page conversion functions */ --- 190,196 ---- code = GetEnvironmentVariable("PATH", path, code); WriteFile(afsi_file, p, (DWORD)strlen(p), &zilch, NULL); WriteFile(afsi_file, path, (DWORD)strlen(path), &zilch, NULL); ! WriteFile(afsi_file, "\r\n", (DWORD)1, &zilch, NULL); free(path); /* Initialize C RTL Code Page conversion functions */ Index: openafs/src/WINNT/afsd/cm_access.c diff -c openafs/src/WINNT/afsd/cm_access.c:1.7.2.9 openafs/src/WINNT/afsd/cm_access.c:1.7.2.14 *** openafs/src/WINNT/afsd/cm_access.c:1.7.2.9 Fri Jan 5 12:14:52 2007 --- openafs/src/WINNT/afsd/cm_access.c Fri Feb 9 18:54:31 2007 *************** *** 42,48 **** cm_fid_t tfid; int didLock; long trights; ! didLock = 0; if (scp->fileType == CM_SCACHETYPE_DIRECTORY) { aclScp = scp; --- 42,54 ---- cm_fid_t tfid; int didLock; long trights; ! ! #if 0 ! if (scp->flags & CM_SCACHEFLAG_EACCESS) { ! *outRightsp = 0; ! return 1; ! } ! #endif didLock = 0; if (scp->fileType == CM_SCACHETYPE_DIRECTORY) { aclScp = scp; *************** *** 63,69 **** return 0; } ! /* check that we have a callback, too */ if (!cm_HaveCallback(aclScp)) { /* can't use it */ lock_ReleaseMutex(&aclScp->mx); --- 69,75 ---- return 0; } ! /* check that we have a callback, too */ if (!cm_HaveCallback(aclScp)) { /* can't use it */ lock_ReleaseMutex(&aclScp->mx); *************** *** 80,85 **** --- 86,97 ---- * Otherwise, if we an explicit acl entry, we're also in good shape, * and can definitively answer. */ + #ifdef AFS_FREELANCE_CLIENT + if (cm_freelanceEnabled && aclScp == cm_data.rootSCachep) + { + *outRightsp = aclScp->anyAccess; + } else + #endif if ((~aclScp->anyAccess & rights) == 0) { *outRightsp = rights; } else { *************** *** 92,104 **** *outRightsp = trights; } ! /* check mode bits */ ! if (!(scp->unixModeBits & 0400)) ! *outRightsp &= ~PRSFS_READ; ! if (!(scp->unixModeBits & 0200) && !(rights == (PRSFS_WRITE | PRSFS_LOCK))) ! *outRightsp &= ~PRSFS_WRITE; ! if (!(scp->unixModeBits & 0200) && !cm_deleteReadOnly) ! *outRightsp &= ~PRSFS_DELETE; /* if the user can obtain a write-lock, read-locks are implied */ if (*outRightsp & PRSFS_WRITE) --- 104,127 ---- *outRightsp = trights; } ! if (scp->fileType > 0 && scp->fileType != CM_SCACHETYPE_DIRECTORY) { ! /* check mode bits */ ! if ((scp->unixModeBits & 0400) == 0) { ! osi_Log2(afsd_logp,"cm_HaveAccessRights UnixMode removing READ scp 0x%p unix 0x%x", ! scp, scp->unixModeBits); ! *outRightsp &= ~PRSFS_READ; ! } ! if ((scp->unixModeBits & 0200) == 0 && (rights != (PRSFS_WRITE | PRSFS_LOCK))) { ! osi_Log2(afsd_logp,"cm_HaveAccessRights UnixMode removing WRITE scp 0x%p unix 0%o", ! scp, scp->unixModeBits); ! *outRightsp &= ~PRSFS_WRITE; ! } ! if ((scp->unixModeBits & 0200) == 0 && !cm_deleteReadOnly) { ! osi_Log2(afsd_logp,"cm_HaveAccessRights UnixMode removing DELETE scp 0x%p unix 0%o", ! scp, scp->unixModeBits); ! *outRightsp &= ~PRSFS_DELETE; ! } ! } /* if the user can obtain a write-lock, read-locks are implied */ if (*outRightsp & PRSFS_WRITE) Index: openafs/src/WINNT/afsd/cm_buf.c diff -c openafs/src/WINNT/afsd/cm_buf.c:1.31.2.11 openafs/src/WINNT/afsd/cm_buf.c:1.31.2.15 *** openafs/src/WINNT/afsd/cm_buf.c:1.31.2.11 Tue Dec 12 12:04:41 2006 --- openafs/src/WINNT/afsd/cm_buf.c Sun Feb 4 22:41:41 2007 *************** *** 313,319 **** cm_data.buf_nOrigBuffers = cm_data.buf_nbuffers; /* lower hash size to a prime number */ ! cm_data.buf_hashSize = osi_PrimeLessThan(CM_BUF_HASHSIZE); /* create hash table */ memset((void *)cm_data.buf_hashTablepp, 0, cm_data.buf_hashSize * sizeof(cm_buf_t *)); --- 313,319 ---- cm_data.buf_nOrigBuffers = cm_data.buf_nbuffers; /* lower hash size to a prime number */ ! cm_data.buf_hashSize = osi_PrimeLessThan((afs_uint32)(cm_data.buf_nbuffers/7 + 1)); /* create hash table */ memset((void *)cm_data.buf_hashTablepp, 0, cm_data.buf_hashSize * sizeof(cm_buf_t *)); *************** *** 548,554 **** */ cm_buf_t *buf_FindLocked(struct cm_scache *scp, osi_hyper_t *offsetp) { ! long i; cm_buf_t *bp; i = BUF_HASH(&scp->fid, offsetp); --- 548,554 ---- */ cm_buf_t *buf_FindLocked(struct cm_scache *scp, osi_hyper_t *offsetp) { ! afs_uint32 i; cm_buf_t *bp; i = BUF_HASH(&scp->fid, offsetp); *************** *** 680,687 **** * have any lock conflicts, so we can grab the buffer lock out of * order in the locking hierarchy. */ ! osi_Log2( buf_logp, "buf_Recycle recycles 0x%p, off 0x%x", ! bp, bp->offset.LowPart); osi_assert(bp->refCount == 0); osi_assert(!(bp->flags & (CM_BUF_READING | CM_BUF_WRITING | CM_BUF_DIRTY))); --- 680,687 ---- * have any lock conflicts, so we can grab the buffer lock out of * order in the locking hierarchy. */ ! osi_Log3( buf_logp, "buf_Recycle recycles 0x%p, off 0x%x:%08x", ! bp, bp->offset.HighPart, bp->offset.LowPart); osi_assert(bp->refCount == 0); osi_assert(!(bp->flags & (CM_BUF_READING | CM_BUF_WRITING | CM_BUF_DIRTY))); *************** *** 768,778 **** /* does this fix the problem below? it's a simple solution. */ if (!cm_data.buf_freeListEndp) ! { lock_ReleaseWrite(&buf_globalLock); Sleep(200); goto retry; ! } /* for debugging, assert free list isn't empty, although we * really should try waiting for a running tranasction to finish --- 768,779 ---- /* does this fix the problem below? it's a simple solution. */ if (!cm_data.buf_freeListEndp) ! { lock_ReleaseWrite(&buf_globalLock); + osi_Log0(afsd_logp, "buf_GetNewLocked: Free Buffer List is empty - sleeping 200ms"); Sleep(200); goto retry; ! } /* for debugging, assert free list isn't empty, although we * really should try waiting for a running tranasction to finish *************** *** 874,890 **** cm_data.buf_fileHashTablepp[i] = bp; } ! /* prepare to return it. Start by giving it a good ! * refcount */ ! bp->refCount = 1; ! ! /* and since it has a non-zero ref count, we should move ! * it from the lru queue. It better be still there, ! * since we've held the global (big) lock since we found ! * it there. */ osi_assertx(bp->flags & CM_BUF_INLRU, "buf_GetNewLocked: LRU screwup"); if (cm_data.buf_freeListEndp == bp) { /* we're the last guy in this queue, so maintain it */ cm_data.buf_freeListEndp = (cm_buf_t *) osi_QPrev(&bp->q); --- 875,886 ---- cm_data.buf_fileHashTablepp[i] = bp; } ! /* we should move it from the lru queue. It better still be there, ! * since we've held the global (big) lock since we found it there. */ osi_assertx(bp->flags & CM_BUF_INLRU, "buf_GetNewLocked: LRU screwup"); + if (cm_data.buf_freeListEndp == bp) { /* we're the last guy in this queue, so maintain it */ cm_data.buf_freeListEndp = (cm_buf_t *) osi_QPrev(&bp->q); *************** *** 892,904 **** osi_QRemove((osi_queue_t **) &cm_data.buf_freeListp, &bp->q); bp->flags &= ~CM_BUF_INLRU; ! /* finally, grab the mutex so that people don't use it * before the caller fills it with data. Again, no one * should have been able to get to this dude to lock it. */ ! osi_assertx(lock_TryMutex(&bp->mx), ! "buf_GetNewLocked: TryMutex failed"); lock_ReleaseWrite(&buf_globalLock); *bufpp = bp; --- 888,906 ---- osi_QRemove((osi_queue_t **) &cm_data.buf_freeListp, &bp->q); bp->flags &= ~CM_BUF_INLRU; ! /* grab the mutex so that people don't use it * before the caller fills it with data. Again, no one * should have been able to get to this dude to lock it. */ ! if (!lock_TryMutex(&bp->mx)) { ! osi_Log2(afsd_logp, "buf_GetNewLocked bp 0x%p cannot be mutex locked. refCount %d should be 0", ! bp, bp->refCount); ! osi_panic("buf_GetNewLocked: TryMutex failed",__FILE__,__LINE__); ! } + /* prepare to return it. Give it a refcount */ + bp->refCount = 1; + lock_ReleaseWrite(&buf_globalLock); *bufpp = bp; *************** *** 908,914 **** return 0; } /* for all buffers in lru queue */ lock_ReleaseWrite(&buf_globalLock); ! Sleep(100); /* give some time for a buffer to be freed */ } /* while loop over everything */ /* not reached */ } /* the proc */ --- 910,917 ---- return 0; } /* for all buffers in lru queue */ lock_ReleaseWrite(&buf_globalLock); ! osi_Log0(afsd_logp, "buf_GetNewLocked: Free Buffer List has no buffers with a zero refcount - sleeping 100ms"); ! Sleep(100); /* give some time for a buffer to be freed */ } /* while loop over everything */ /* not reached */ } /* the proc */ *************** *** 961,968 **** */ lock_ReleaseMutex(&bp->mx); *bufpp = bp; ! osi_Log3(buf_logp, "buf_GetNew returning bp 0x%p for scp 0x%p, offset 0x%x", ! bp, scp, offsetp->LowPart); return 0; } --- 964,971 ---- */ lock_ReleaseMutex(&bp->mx); *bufpp = bp; ! osi_Log4(buf_logp, "buf_GetNew returning bp 0x%p for scp 0x%p, offset 0x%x:%08x", ! bp, scp, offsetp->HighPart, offsetp->LowPart); return 0; } *************** *** 1109,1116 **** } lock_ReleaseWrite(&buf_globalLock); ! osi_Log3(buf_logp, "buf_Get returning bp 0x%p for scp 0x%p, offset 0x%x", ! bp, scp, offsetp->LowPart); #ifdef TESTING buf_ValidateBufQueues(); #endif /* TESTING */ --- 1112,1119 ---- } lock_ReleaseWrite(&buf_globalLock); ! osi_Log4(buf_logp, "buf_Get returning bp 0x%p for scp 0x%p, offset 0x%x:%08x", ! bp, scp, offsetp->HighPart, offsetp->LowPart); #ifdef TESTING buf_ValidateBufQueues(); #endif /* TESTING */ *************** *** 1233,1239 **** */ long buf_CleanAndReset(void) { ! long i; cm_buf_t *bp; cm_req_t req; --- 1236,1242 ---- */ long buf_CleanAndReset(void) { ! afs_uint32 i; cm_buf_t *bp; cm_req_t req; *************** *** 1349,1355 **** buf_HoldLocked(bufp); lock_ReleaseWrite(&buf_globalLock); ! for(; bufp; bufp = nbufp) { lock_ObtainMutex(&bufp->mx); bufEnd.HighPart = 0; --- 1352,1358 ---- buf_HoldLocked(bufp); lock_ReleaseWrite(&buf_globalLock); ! while (bufp) { lock_ObtainMutex(&bufp->mx); bufEnd.HighPart = 0; *************** *** 1426,1431 **** --- 1429,1435 ---- } buf_ReleaseLocked(bufp); lock_ReleaseWrite(&buf_globalLock); + bufp = nbufp; } #ifdef TESTING *************** *** 1604,1610 **** int zilch; cm_buf_t *bp; char output[1024]; ! int i; if (cm_data.buf_hashTablepp == NULL) return -1; --- 1608,1614 ---- int zilch; cm_buf_t *bp; char output[1024]; ! afs_uint32 i; if (cm_data.buf_hashTablepp == NULL) return -1; *************** *** 1612,1618 **** if (lock) lock_ObtainRead(&buf_globalLock); ! StringCbPrintfA(output, sizeof(output), "%s - dumping buf_HashTable - buf_hashSize=%d\n", cookie, cm_data.buf_hashSize); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); --- 1616,1622 ---- if (lock) lock_ObtainRead(&buf_globalLock); ! StringCbPrintfA(output, sizeof(output), "%s - dumping buf_HashTable - buf_hashSize=%d\r\n", cookie, cm_data.buf_hashSize); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); *************** *** 1620,1636 **** { for (bp = cm_data.buf_hashTablepp[i]; bp; bp=bp->hashp) { ! if (bp->refCount) ! { ! StringCbPrintfA(output, sizeof(output), "vnode=%d, unique=%d), size=%d refCount=%d\n", ! cookie, (void *)bp, i, bp->fid.cell, bp->fid.volume, ! bp->fid.vnode, bp->fid.unique, bp->size, bp->refCount); ! WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); ! } } } ! StringCbPrintfA(output, sizeof(output), "%s - Done dumping buf_HashTable.\n", cookie); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); if (lock) --- 1624,1674 ---- { for (bp = cm_data.buf_hashTablepp[i]; bp; bp=bp->hashp) { ! StringCbPrintfA(output, sizeof(output), ! "%s bp=0x%08X, hash=%d, fid (cell=%d, volume=%d, " ! "vnode=%d, unique=%d), offset=%x:%08x, dv=%d, " ! "flags=0x%x, cmFlags=0x%x, refCount=%d\r\n", ! cookie, (void *)bp, i, bp->fid.cell, bp->fid.volume, ! bp->fid.vnode, bp->fid.unique, bp->offset.HighPart, ! bp->offset.LowPart, bp->dataVersion, bp->flags, ! bp->cmFlags, bp->refCount); ! WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); } } ! StringCbPrintfA(output, sizeof(output), "%s - Done dumping buf_HashTable.\r\n", cookie); ! WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); ! ! StringCbPrintfA(output, sizeof(output), "%s - dumping buf_freeListEndp\r\n", cookie); ! WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); ! for(bp = cm_data.buf_freeListEndp; bp; bp=(cm_buf_t *) osi_QPrev(&bp->q)) { ! StringCbPrintfA(output, sizeof(output), ! "%s bp=0x%08X, fid (cell=%d, volume=%d, " ! "vnode=%d, unique=%d), offset=%x:%08x, dv=%d, " ! "flags=0x%x, cmFlags=0x%x, refCount=%d\r\n", ! cookie, (void *)bp, bp->fid.cell, bp->fid.volume, ! bp->fid.vnode, bp->fid.unique, bp->offset.HighPart, ! bp->offset.LowPart, bp->dataVersion, bp->flags, ! bp->cmFlags, bp->refCount); ! WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); ! } ! StringCbPrintfA(output, sizeof(output), "%s - Done dumping buf_FreeListEndp.\r\n", cookie); ! WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); ! ! StringCbPrintfA(output, sizeof(output), "%s - dumping buf_dirtyListEndp\r\n", cookie); ! WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); ! for(bp = cm_data.buf_dirtyListEndp; bp; bp=(cm_buf_t *) osi_QPrev(&bp->q)) { ! StringCbPrintfA(output, sizeof(output), ! "%s bp=0x%08X, fid (cell=%d, volume=%d, " ! "vnode=%d, unique=%d), offset=%x:%08x, dv=%d, " ! "flags=0x%x, cmFlags=0x%x, refCount=%d\r\n", ! cookie, (void *)bp, bp->fid.cell, bp->fid.volume, ! bp->fid.vnode, bp->fid.unique, bp->offset.HighPart, ! bp->offset.LowPart, bp->dataVersion, bp->flags, ! bp->cmFlags, bp->refCount); ! WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); ! } ! StringCbPrintfA(output, sizeof(output), "%s - Done dumping buf_dirtyListEndp.\r\n", cookie); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); if (lock) Index: openafs/src/WINNT/afsd/cm_buf.h diff -c openafs/src/WINNT/afsd/cm_buf.h:1.12.4.3 openafs/src/WINNT/afsd/cm_buf.h:1.12.4.4 *** openafs/src/WINNT/afsd/cm_buf.h:1.12.4.3 Wed Nov 29 01:23:44 2006 --- openafs/src/WINNT/afsd/cm_buf.h Sun Feb 4 22:41:41 2007 *************** *** 47,57 **** /* backup over pointer to the buffer */ #define BUF_OVERTOBUF(op) ((cm_buf_t *)(((char *)op) - ((long)(&((cm_buf_t *)0)->over)))) - #ifdef notdef - /* pretend we have logs, too */ - typedef char cm_log_t; - #endif - #define CM_BUF_MAGIC ('B' | 'U' <<8 | 'F'<<16 | 'F'<<24) /* represents a single buffer */ --- 47,52 ---- *************** *** 75,84 **** unsigned long refCount; /* reference count (buf_globalLock) */ long idCounter; /* counter for softrefs; bumped at each recycle */ long dirtyCounter; /* bumped at each dirty->clean transition */ - #ifdef notdef - cm_log_t *logp; /* log for this buffer, if any */ - osi_hyper_t lsn; /* lsn to force to (last LSN changing this buffer) */ - #endif /* notdef */ osi_hyper_t offset; /* offset */ cm_fid_t fid; /* file ID */ #ifdef DEBUG --- 70,75 ---- *************** *** 86,92 **** /* the fid at the time of fid assignment. */ #endif long flags; /* flags we're using */ - long size; /* size in bytes of this buffer */ char *datap; /* data in this buffer */ unsigned long error; /* last error code, if CM_BUF_ERROR is set */ cm_user_t *userp; /* user who wrote to the buffer last */ --- 77,82 ---- *************** *** 159,168 **** extern cm_buf_t *buf_Find(struct cm_scache *, osi_hyper_t *); - #ifndef DJGPP - extern HANDLE buf_GetFileHandle(long); - #endif /* !DJGPP */ - extern long buf_GetNewLocked(struct cm_scache *, osi_hyper_t *, cm_buf_t **); extern long buf_Get(struct cm_scache *, osi_hyper_t *, cm_buf_t **); --- 149,154 ---- Index: openafs/src/WINNT/afsd/cm_callback.c diff -c openafs/src/WINNT/afsd/cm_callback.c:1.41.4.10 openafs/src/WINNT/afsd/cm_callback.c:1.41.4.11 *** openafs/src/WINNT/afsd/cm_callback.c:1.41.4.10 Mon Dec 11 23:01:26 2006 --- openafs/src/WINNT/afsd/cm_callback.c Wed Feb 7 12:35:16 2007 *************** *** 1651,1657 **** lock_ReleaseMutex(&cm_Freelance_Lock); // Fetch the status info ! cm_MergeStatus(scp, &afsStatus, &volSync, userp, 0); // Indicate that the callback is not done lock_ObtainMutex(&cm_Freelance_Lock); --- 1651,1657 ---- lock_ReleaseMutex(&cm_Freelance_Lock); // Fetch the status info ! cm_MergeStatus(NULL, scp, &afsStatus, &volSync, userp, 0); // Indicate that the callback is not done lock_ObtainMutex(&cm_Freelance_Lock); *************** *** 1719,1725 **** lock_ObtainMutex(&scp->mx); if (code == 0) { cm_EndCallbackGrantingCall(scp, &cbr, &callback, 0); ! cm_MergeStatus(scp, &afsStatus, &volSync, userp, 0); } else { cm_EndCallbackGrantingCall(NULL, &cbr, NULL, 0); } --- 1719,1725 ---- lock_ObtainMutex(&scp->mx); if (code == 0) { cm_EndCallbackGrantingCall(scp, &cbr, &callback, 0); ! cm_MergeStatus(NULL, scp, &afsStatus, &volSync, userp, 0); } else { cm_EndCallbackGrantingCall(NULL, &cbr, NULL, 0); } Index: openafs/src/WINNT/afsd/cm_conn.c diff -c openafs/src/WINNT/afsd/cm_conn.c:1.49.2.10 openafs/src/WINNT/afsd/cm_conn.c:1.49.2.11 *** openafs/src/WINNT/afsd/cm_conn.c:1.49.2.10 Sun Dec 17 16:07:22 2006 --- openafs/src/WINNT/afsd/cm_conn.c Sat Feb 3 21:46:25 2007 *************** *** 844,854 **** return 0; } long cm_Conn(struct cm_fid *fidp, struct cm_user *userp, cm_req_t *reqp, cm_conn_t **connpp) { long code; - cm_serverRef_t **serverspp; code = cm_GetServerList(fidp, userp, reqp, &serverspp); --- 844,900 ---- return 0; } + long cm_ServerAvailable(struct cm_fid *fidp, struct cm_user *userp) + { + long code; + cm_req_t req; + cm_serverRef_t **serverspp; + cm_serverRef_t *tsrp; + cm_server_t *tsp; + int someBusy = 0, someOffline = 0, allOffline = 1, allBusy = 1, allDown = 1; + + cm_InitReq(&req); + + code = cm_GetServerList(fidp, userp, &req, &serverspp); + if (code) + return 0; + + lock_ObtainWrite(&cm_serverLock); + for (tsrp = *serverspp; tsrp; tsrp=tsrp->next) { + tsp = tsrp->server; + cm_GetServerNoLock(tsp); + if (!(tsp->flags & CM_SERVERFLAG_DOWN)) { + allDown = 0; + if (tsrp->status == busy) { + allOffline = 0; + someBusy = 1; + } else if (tsrp->status == offline) { + allBusy = 0; + someOffline = 1; + } else { + allOffline = 0; + allBusy = 0; + } + } + cm_PutServerNoLock(tsp); + } + lock_ReleaseWrite(&cm_serverLock); + cm_FreeServerList(serverspp); + + if (allDown) + return 0; + else if (allBusy) + return 0; + else if (allOffline || (someBusy && someOffline)) + return 0; + else + return 1; + } + long cm_Conn(struct cm_fid *fidp, struct cm_user *userp, cm_req_t *reqp, cm_conn_t **connpp) { long code; cm_serverRef_t **serverspp; code = cm_GetServerList(fidp, userp, reqp, &serverspp); Index: openafs/src/WINNT/afsd/cm_conn.h diff -c openafs/src/WINNT/afsd/cm_conn.h:1.13.4.5 openafs/src/WINNT/afsd/cm_conn.h:1.13.4.6 *** openafs/src/WINNT/afsd/cm_conn.h:1.13.4.5 Sun Dec 17 16:07:22 2006 --- openafs/src/WINNT/afsd/cm_conn.h Sat Feb 3 21:46:25 2007 *************** *** 123,126 **** --- 123,128 ---- extern void cm_ForceNewConnections(cm_server_t *serverp); + extern long cm_ServerAvailable(struct cm_fid *fidp, struct cm_user *userp); + #endif /* __CM_CONN_H_ENV__ */ Index: openafs/src/WINNT/afsd/cm_daemon.c diff -c openafs/src/WINNT/afsd/cm_daemon.c:1.16.4.8 openafs/src/WINNT/afsd/cm_daemon.c:1.16.4.10 *** openafs/src/WINNT/afsd/cm_daemon.c:1.16.4.8 Mon Dec 11 23:01:26 2006 --- openafs/src/WINNT/afsd/cm_daemon.c Sun Feb 4 10:39:14 2007 *************** *** 71,76 **** --- 71,77 ---- void cm_BkgDaemon(long parm) { cm_bkgRequest_t *rp; + afs_int32 code; rx_StartClientThread(); *************** *** 83,106 **** } /* we found a request */ ! rp = cm_bkgListEndp; ! cm_bkgListEndp = (cm_bkgRequest_t *) osi_QPrev(&rp->q); ! osi_QRemove((osi_queue_t **) &cm_bkgListp, &rp->q); osi_assert(cm_bkgQueueCount-- > 0); lock_ReleaseWrite(&cm_daemonLock); #ifdef DEBUG_REFCOUNT osi_Log2(afsd_logp,"cm_BkgDaemon (before) scp 0x%x ref %d",rp->scp, rp->scp->refCount); #endif ! (*rp->procp)(rp->scp, rp->p1, rp->p2, rp->p3, rp->p4, rp->userp); #ifdef DEBUG_REFCOUNT osi_Log2(afsd_logp,"cm_BkgDaemon (after) scp 0x%x ref %d",rp->scp, rp->scp->refCount); #endif ! cm_ReleaseUser(rp->userp); ! cm_ReleaseSCache(rp->scp); ! free(rp); lock_ObtainWrite(&cm_daemonLock); } lock_ReleaseWrite(&cm_daemonLock); } --- 84,143 ---- } /* we found a request */ ! for (rp = cm_bkgListEndp; rp; rp = (cm_bkgRequest_t *) osi_QPrev(&rp->q)) ! { ! if (cm_ServerAvailable(&rp->scp->fid, rp->userp)) ! break; ! } ! if (rp == NULL) { ! /* we couldn't find a request that we could process at the current time */ ! lock_ReleaseWrite(&cm_daemonLock); ! Sleep(1000); ! lock_ObtainWrite(&cm_daemonLock); ! continue; ! } ! ! osi_QRemoveHT((osi_queue_t **) &cm_bkgListp, (osi_queue_t **) &cm_bkgListEndp, &rp->q); osi_assert(cm_bkgQueueCount-- > 0); lock_ReleaseWrite(&cm_daemonLock); + osi_Log1(afsd_logp,"cm_BkgDaemon processing request 0x%p", rp); + #ifdef DEBUG_REFCOUNT osi_Log2(afsd_logp,"cm_BkgDaemon (before) scp 0x%x ref %d",rp->scp, rp->scp->refCount); #endif ! code = (*rp->procp)(rp->scp, rp->p1, rp->p2, rp->p3, rp->p4, rp->userp); #ifdef DEBUG_REFCOUNT osi_Log2(afsd_logp,"cm_BkgDaemon (after) scp 0x%x ref %d",rp->scp, rp->scp->refCount); #endif ! if (code == 0) { ! cm_ReleaseUser(rp->userp); ! cm_ReleaseSCache(rp->scp); ! free(rp); ! } lock_ObtainWrite(&cm_daemonLock); + + switch ( code ) { + case 0: /* success */ + osi_Log1(afsd_logp,"cm_BkgDaemon SUCCESS: request 0x%p", rp); + break; + case CM_ERROR_TIMEDOUT: /* or server restarting */ + case CM_ERROR_RETRY: + case CM_ERROR_WOULDBLOCK: + case CM_ERROR_ALLBUSY: + case CM_ERROR_ALLDOWN: + case CM_ERROR_ALLOFFLINE: + case CM_ERROR_PARTIALWRITE: + osi_Log2(afsd_logp,"cm_BkgDaemon re-queueing failed request 0x%p code 0x%x", + rp, code); + cm_bkgQueueCount++; + osi_QAddT((osi_queue_t **) &cm_bkgListp, (osi_queue_t **)&cm_bkgListEndp, &rp->q); + break; + default: + osi_Log2(afsd_logp,"cm_BkgDaemon FAILED: request dropped 0x%p code 0x%x", + rp, code); + } } lock_ReleaseWrite(&cm_daemonLock); } *************** *** 343,349 **** if (now > lastVolCheck + cm_daemonCheckVolInterval) { lastVolCheck = now; ! cm_CheckVolumes(); now = osi_Time(); } --- 380,386 ---- if (now > lastVolCheck + cm_daemonCheckVolInterval) { lastVolCheck = now; ! cm_RefreshVolumes(); now = osi_Time(); } Index: openafs/src/WINNT/afsd/cm_daemon.h diff -c openafs/src/WINNT/afsd/cm_daemon.h:1.4.4.1 openafs/src/WINNT/afsd/cm_daemon.h:1.4.4.2 *** openafs/src/WINNT/afsd/cm_daemon.h:1.4.4.1 Mon Oct 2 23:23:21 2006 --- openafs/src/WINNT/afsd/cm_daemon.h Sat Feb 3 21:46:25 2007 *************** *** 24,30 **** void cm_InitDaemon(int nDaemons); ! typedef void (cm_bkgProc_t)(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, afs_uint32 p4, struct cm_user *up); typedef struct cm_bkgRequest { --- 24,30 ---- void cm_InitDaemon(int nDaemons); ! typedef afs_int32 (cm_bkgProc_t)(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, afs_uint32 p4, struct cm_user *up); typedef struct cm_bkgRequest { Index: openafs/src/WINNT/afsd/cm_dcache.c diff -c openafs/src/WINNT/afsd/cm_dcache.c:1.30.2.8 openafs/src/WINNT/afsd/cm_dcache.c:1.30.2.14 *** openafs/src/WINNT/afsd/cm_dcache.c:1.30.2.8 Fri Oct 6 12:32:43 2006 --- openafs/src/WINNT/afsd/cm_dcache.c Wed Feb 7 12:35:16 2007 *************** *** 101,107 **** if (biod.length == 0) { osi_Log0(afsd_logp, "cm_SetupStoreBIOD length 0"); lock_ReleaseMutex(&scp->mx); ! cm_ReleaseBIOD(&biod, 1); /* should be a NOOP */ return 0; } --- 101,107 ---- if (biod.length == 0) { osi_Log0(afsd_logp, "cm_SetupStoreBIOD length 0"); lock_ReleaseMutex(&scp->mx); ! cm_ReleaseBIOD(&biod, 1, 0); /* should be a NOOP */ return 0; } *************** *** 160,191 **** #ifdef AFS_LARGEFILES if (SERVERHAS64BIT(connp)) { ! osi_Log4(afsd_logp, "CALL StoreData64 scp 0x%p, offset 0x%x:%08x, length 0x%x", scp, biod.offset.HighPart, biod.offset.LowPart, nbytes); code = StartRXAFS_StoreData64(callp, &tfid, &inStatus, biod.offset.QuadPart, nbytes, truncPos.QuadPart); } else { - if (require_64bit_ops) { ! osi_Log0(afsd_logp, "Skipping StoreData. The operation requires StoreData64"); code = CM_ERROR_TOOBIG; } else { ! osi_Log4(afsd_logp, "CALL StoreData scp 0x%p, offset 0x%x:%08x, length 0x%x", scp, biod.offset.HighPart, biod.offset.LowPart, nbytes); code = StartRXAFS_StoreData(callp, &tfid, &inStatus, biod.offset.LowPart, nbytes, truncPos.LowPart); } } #else ! osi_Log4(afsd_logp, "CALL StoreData scp 0x%p, offset 0x%x:%08x, length 0x%x", scp, biod.offset.HighPart, biod.offset.LowPart, nbytes); code = StartRXAFS_StoreData(callp, &tfid, &inStatus, biod.offset.LowPart, nbytes, truncPos.LowPart); #endif if (code == 0) { --- 160,202 ---- #ifdef AFS_LARGEFILES if (SERVERHAS64BIT(connp)) { ! osi_Log4(afsd_logp, "CALL StartRXAFS_StoreData64 scp 0x%p, offset 0x%x:%08x, length 0x%x", scp, biod.offset.HighPart, biod.offset.LowPart, nbytes); code = StartRXAFS_StoreData64(callp, &tfid, &inStatus, biod.offset.QuadPart, nbytes, truncPos.QuadPart); + if (code) + osi_Log1(afsd_logp, "CALL StartRXAFS_StoreData64 FAILURE, code 0x%x", code); + else + osi_Log0(afsd_logp, "CALL StartRXAFS_StoreData64 SUCCESS"); } else { if (require_64bit_ops) { ! osi_Log0(afsd_logp, "Skipping StartRXAFS_StoreData. The operation requires large file support in the server."); code = CM_ERROR_TOOBIG; } else { ! osi_Log4(afsd_logp, "CALL StartRXAFS_StoreData scp 0x%p, offset 0x%x:%08x, length 0x%x", scp, biod.offset.HighPart, biod.offset.LowPart, nbytes); code = StartRXAFS_StoreData(callp, &tfid, &inStatus, biod.offset.LowPart, nbytes, truncPos.LowPart); + if (code) + osi_Log1(afsd_logp, "CALL StartRXAFS_StoreData FAILURE, code 0x%x", code); + else + osi_Log0(afsd_logp, "CALL StartRXAFS_StoreData SUCCESS"); } } #else ! osi_Log4(afsd_logp, "CALL StartRXAFS_StoreData scp 0x%p, offset 0x%x:%08x, length 0x%x", scp, biod.offset.HighPart, biod.offset.LowPart, nbytes); code = StartRXAFS_StoreData(callp, &tfid, &inStatus, biod.offset.LowPart, nbytes, truncPos.LowPart); + if (code) + osi_Log1(afsd_logp, "CALL StartRXAFS_StoreData FAILURE, code 0x%x", code); + else + osi_Log0(afsd_logp, "CALL StartRXAFS_StoreData SUCCESS"); #endif if (code == 0) { *************** *** 214,233 **** } nbytes -= wbytes; } /* while more bytes to write */ ! } /* if RPC started successfully */ ! else { ! osi_Log2(afsd_logp, "StartRXAFS_StoreData?? scp 0x%p failed (%lX)",scp,code); ! } if (code == 0) { if (SERVERHAS64BIT(connp)) { code = EndRXAFS_StoreData64(callp, &outStatus, &volSync); if (code) ! osi_Log2(afsd_logp, "EndRXAFS_StoreData64 scp 0x%p failed (%lX)", scp, code); } else { code = EndRXAFS_StoreData(callp, &outStatus, &volSync); if (code) ! osi_Log2(afsd_logp, "EndRXAFS_StoreData scp 0x%p failed (%lX)",scp,code); } } --- 225,245 ---- } nbytes -= wbytes; } /* while more bytes to write */ ! } /* if RPC started successfully */ if (code == 0) { if (SERVERHAS64BIT(connp)) { code = EndRXAFS_StoreData64(callp, &outStatus, &volSync); if (code) ! osi_Log2(afsd_logp, "EndRXAFS_StoreData64 FAILURE scp 0x%p code %lX", scp, code); ! else ! osi_Log0(afsd_logp, "EndRXAFS_StoreData64 SUCCESS"); } else { code = EndRXAFS_StoreData(callp, &outStatus, &volSync); if (code) ! osi_Log2(afsd_logp, "EndRXAFS_StoreData FAILURE scp 0x%p code %lX",scp,code); ! else ! osi_Log0(afsd_logp, "EndRXAFS_StoreData SUCCESS"); } } *************** *** 285,291 **** if (LargeIntegerGreaterThanOrEqualTo(t, scp->length)) scp->mask &= ~CM_SCACHEMASK_LENGTH; ! cm_MergeStatus(scp, &outStatus, &volSync, userp, 0); } else { if (code == CM_ERROR_SPACE) scp->flags |= CM_SCACHEFLAG_OUTOFSPACE; --- 297,303 ---- if (LargeIntegerGreaterThanOrEqualTo(t, scp->length)) scp->mask &= ~CM_SCACHEMASK_LENGTH; ! cm_MergeStatus(NULL, scp, &outStatus, &volSync, userp, CM_MERGEFLAG_STOREDATA); } else { if (code == CM_ERROR_SPACE) scp->flags |= CM_SCACHEFLAG_OUTOFSPACE; *************** *** 293,299 **** scp->flags |= CM_SCACHEFLAG_OVERQUOTA; } lock_ReleaseMutex(&scp->mx); ! cm_ReleaseBIOD(&biod, 1); return code; } --- 305,311 ---- scp->flags |= CM_SCACHEFLAG_OVERQUOTA; } lock_ReleaseMutex(&scp->mx); ! cm_ReleaseBIOD(&biod, 1, code); return code; } *************** *** 408,414 **** if (LargeIntegerGreaterThanOrEqualTo(t, scp->length)) scp->mask &= ~CM_SCACHEMASK_LENGTH; ! cm_MergeStatus(scp, &outStatus, &volSync, userp, 0); } return code; --- 420,426 ---- if (LargeIntegerGreaterThanOrEqualTo(t, scp->length)) scp->mask &= ~CM_SCACHEMASK_LENGTH; ! cm_MergeStatus(NULL, scp, &outStatus, &volSync, userp, CM_MERGEFLAG_STOREDATA); } return code; *************** *** 591,611 **** return code; } ! void cm_BkgStore(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, afs_uint32 p4, ! cm_user_t *userp) { osi_hyper_t toffset; long length; cm_req_t req; ! long code; if (scp->flags & CM_SCACHEFLAG_DELETED) { osi_Log4(afsd_logp, "Skipping BKG store - Deleted scp 0x%p, offset 0x%x:%08x, length 0x%x", scp, p2, p1, p3); } else { cm_InitReq(&req); ! #ifdef NO_BKG_RETRIES req.flags |= CM_REQ_NORETRY; - #endif toffset.LowPart = p1; toffset.HighPart = p2; --- 603,624 ---- return code; } ! afs_int32 ! cm_BkgStore(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, afs_uint32 p4, ! cm_user_t *userp) { osi_hyper_t toffset; long length; cm_req_t req; ! long code = 0; if (scp->flags & CM_SCACHEFLAG_DELETED) { osi_Log4(afsd_logp, "Skipping BKG store - Deleted scp 0x%p, offset 0x%x:%08x, length 0x%x", scp, p2, p1, p3); } else { cm_InitReq(&req); ! ! /* Retries will be performed by the BkgDaemon thread if appropriate */ req.flags |= CM_REQ_NORETRY; toffset.LowPart = p1; toffset.HighPart = p2; *************** *** 614,624 **** --- 627,641 ---- osi_Log4(afsd_logp, "Starting BKG store scp 0x%p, offset 0x%x:%08x, length 0x%x", scp, p2, p1, p3); code = cm_BufWrite(scp, &toffset, length, /* flags */ 0, userp, &req); + + osi_Log4(afsd_logp, "Finished BKG store scp 0x%p, offset 0x%x:%08x, code 0x%x", scp, p2, p1, code); } lock_ObtainMutex(&scp->mx); cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_ASYNCSTORE); lock_ReleaseMutex(&scp->mx); + + return code; } /* Called with scp locked */ *************** *** 639,656 **** scp->flags &= ~CM_SCACHEFLAG_PREFETCHING; } ! /* do the prefetch */ ! void cm_BkgPrefetch(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, afs_uint32 p4, ! cm_user_t *userp) { long length; osi_hyper_t base; long code; ! cm_buf_t *bp; int cpff = 0; /* cleared prefetch flag */ cm_req_t req; cm_InitReq(&req); req.flags |= CM_REQ_NORETRY; base.LowPart = p1; --- 656,677 ---- scp->flags &= ~CM_SCACHEFLAG_PREFETCHING; } ! /* do the prefetch. if the prefetch fails, return 0 (success) ! * because there is no harm done. */ ! afs_int32 ! cm_BkgPrefetch(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, afs_uint32 p4, ! cm_user_t *userp) { long length; osi_hyper_t base; long code; ! cm_buf_t *bp = NULL; int cpff = 0; /* cleared prefetch flag */ cm_req_t req; cm_InitReq(&req); + + /* Retries will be performed by the BkgDaemon thread if appropriate */ req.flags |= CM_REQ_NORETRY; base.LowPart = p1; *************** *** 666,672 **** if (code || (bp->cmFlags & CM_BUF_CMFETCHING)) { scp->flags &= ~CM_SCACHEFLAG_PREFETCHING; lock_ReleaseMutex(&scp->mx); ! return; } code = cm_GetBuffer(scp, bp, &cpff, userp, &req); --- 687,695 ---- if (code || (bp->cmFlags & CM_BUF_CMFETCHING)) { scp->flags &= ~CM_SCACHEFLAG_PREFETCHING; lock_ReleaseMutex(&scp->mx); ! if (bp) ! buf_Release(bp); ! return 0; } code = cm_GetBuffer(scp, bp, &cpff, userp, &req); *************** *** 674,680 **** cm_ClearPrefetchFlag(code, scp, &base); lock_ReleaseMutex(&scp->mx); buf_Release(bp); ! return; } /* a read was issued to offsetp, and we have to determine whether we should --- 697,703 ---- cm_ClearPrefetchFlag(code, scp, &base); lock_ReleaseMutex(&scp->mx); buf_Release(bp); ! return code; } /* a read was issued to offsetp, and we have to determine whether we should *************** *** 1188,1194 **** /* release a bulk I/O structure that was setup by cm_SetupFetchBIOD or by * cm_SetupStoreBIOD */ ! void cm_ReleaseBIOD(cm_bulkIO_t *biop, int isStore) { cm_scache_t *scp; /* do not release; not held in biop */ cm_buf_t *bufp; --- 1211,1217 ---- /* release a bulk I/O structure that was setup by cm_SetupFetchBIOD or by * cm_SetupStoreBIOD */ ! void cm_ReleaseBIOD(cm_bulkIO_t *biop, int isStore, int failed) { cm_scache_t *scp; /* do not release; not held in biop */ cm_buf_t *bufp; *************** *** 1229,1235 **** osi_Log2(afsd_logp, "cm_ReleaseBIOD Waking [scp 0x%p] bp 0x%p", scp, bufp); osi_Wakeup((LONG_PTR) bufp); } ! bufp->flags &= ~(CM_BUF_WRITING | CM_BUF_DIRTY); } lock_ReleaseMutex(&scp->mx); --- 1252,1261 ---- osi_Log2(afsd_logp, "cm_ReleaseBIOD Waking [scp 0x%p] bp 0x%p", scp, bufp); osi_Wakeup((LONG_PTR) bufp); } ! if (failed) ! bufp->flags &= ~CM_BUF_WRITING; ! else ! bufp->flags &= ~(CM_BUF_WRITING | CM_BUF_DIRTY); } lock_ReleaseMutex(&scp->mx); *************** *** 1319,1325 **** bufp->dataVersion = scp->dataVersion; } lock_ReleaseMutex(&scp->mx); ! cm_ReleaseBIOD(&biod, 0); lock_ObtainMutex(&scp->mx); return 0; } --- 1345,1351 ---- bufp->dataVersion = scp->dataVersion; } lock_ReleaseMutex(&scp->mx); ! cm_ReleaseBIOD(&biod, 0, 0); lock_ObtainMutex(&scp->mx); return 0; } *************** *** 1626,1636 **** /* release scatter/gather I/O structure (buffers, locks) */ lock_ReleaseMutex(&scp->mx); ! cm_ReleaseBIOD(&biod, 0); lock_ObtainMutex(&scp->mx); if (code == 0) ! cm_MergeStatus(scp, &afsStatus, &volSync, up, 0); return code; } --- 1652,1662 ---- /* release scatter/gather I/O structure (buffers, locks) */ lock_ReleaseMutex(&scp->mx); ! cm_ReleaseBIOD(&biod, 0, code); lock_ObtainMutex(&scp->mx); if (code == 0) ! cm_MergeStatus(NULL, scp, &afsStatus, &volSync, up, 0); return code; } Index: openafs/src/WINNT/afsd/cm_dcache.h diff -c openafs/src/WINNT/afsd/cm_dcache.h:1.4.4.1 openafs/src/WINNT/afsd/cm_dcache.h:1.4.4.3 *** openafs/src/WINNT/afsd/cm_dcache.h:1.4.4.1 Mon Oct 2 23:23:21 2006 --- openafs/src/WINNT/afsd/cm_dcache.h Sun Feb 4 10:39:14 2007 *************** *** 37,51 **** extern long cm_SetupFetchBIOD(cm_scache_t *scp, osi_hyper_t *offsetp, cm_bulkIO_t *biop, cm_user_t *up, cm_req_t *reqp); ! extern void cm_ReleaseBIOD(cm_bulkIO_t *biop, int isStore); extern long cm_SetupStoreBIOD(cm_scache_t *scp, osi_hyper_t *inOffsetp, long inSize, cm_bulkIO_t *biop, cm_user_t *userp, cm_req_t *reqp); ! extern void cm_BkgPrefetch(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, afs_uint32 p4, struct cm_user *userp); ! extern void cm_BkgStore(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, afs_uint32 p4, struct cm_user *userp); extern void cm_ConsiderPrefetch(cm_scache_t *scp, osi_hyper_t *offsetp, --- 37,51 ---- extern long cm_SetupFetchBIOD(cm_scache_t *scp, osi_hyper_t *offsetp, cm_bulkIO_t *biop, cm_user_t *up, cm_req_t *reqp); ! extern void cm_ReleaseBIOD(cm_bulkIO_t *biop, int isStore, int failed); extern long cm_SetupStoreBIOD(cm_scache_t *scp, osi_hyper_t *inOffsetp, long inSize, cm_bulkIO_t *biop, cm_user_t *userp, cm_req_t *reqp); ! extern afs_int32 cm_BkgPrefetch(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, afs_uint32 p4, struct cm_user *userp); ! extern afs_int32 cm_BkgStore(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3, afs_uint32 p4, struct cm_user *userp); extern void cm_ConsiderPrefetch(cm_scache_t *scp, osi_hyper_t *offsetp, Index: openafs/src/WINNT/afsd/cm_ioctl.c diff -c openafs/src/WINNT/afsd/cm_ioctl.c:1.73.2.8 openafs/src/WINNT/afsd/cm_ioctl.c:1.73.2.10 *** openafs/src/WINNT/afsd/cm_ioctl.c:1.73.2.8 Mon Oct 16 20:21:36 2006 --- openafs/src/WINNT/afsd/cm_ioctl.c Sat Feb 3 21:46:25 2007 *************** *** 746,751 **** --- 746,752 ---- cm_ReleaseSCache(scp); return code; } + cm_PutVolume(tvp); /* Copy the junk out, using cp as a roving pointer. */ cp = ioctlp->inDatap; *************** *** 1154,1160 **** long cm_IoctlCheckVolumes(struct smb_ioctl *ioctlp, struct cm_user *userp) { ! cm_CheckVolumes(); return 0; } --- 1155,1161 ---- long cm_IoctlCheckVolumes(struct smb_ioctl *ioctlp, struct cm_user *userp) { ! cm_RefreshVolumes(); return 0; } *************** *** 2753,2763 **** --- 2754,2766 ---- /* dump all interesting data */ cm_DumpSCache(hLogFile, cookie, 1); + cm_DumpVolumes(hLogFile, cookie, 1); cm_DumpBufHashTable(hLogFile, cookie, 1); smb_DumpVCP(hLogFile, cookie, 1); CloseHandle(hLogFile); + inValue = 0; /* success */ memcpy(ioctlp->outDatap, &inValue, sizeof(long)); ioctlp->outDatap += sizeof(long); Index: openafs/src/WINNT/afsd/cm_memmap.c diff -c openafs/src/WINNT/afsd/cm_memmap.c:1.7.2.2 openafs/src/WINNT/afsd/cm_memmap.c:1.7.2.4 *** openafs/src/WINNT/afsd/cm_memmap.c:1.7.2.2 Wed Nov 29 01:23:44 2006 --- openafs/src/WINNT/afsd/cm_memmap.c Sun Feb 4 22:41:41 2007 *************** *** 87,96 **** } afs_uint64 ! ComputeSizeOfDataHT(void) { afs_uint64 size; ! size = osi_PrimeLessThan(CM_BUF_HASHSIZE) * sizeof(cm_buf_t *); return size; } --- 87,96 ---- } afs_uint64 ! ComputeSizeOfDataHT(afs_uint64 cacheBlocks) { afs_uint64 size; ! size = osi_PrimeLessThan((afs_uint32)(cacheBlocks/7 + 1)) * sizeof(cm_buf_t *); return size; } *************** *** 115,121 **** + ComputeSizeOfSCacheHT(stats) + ComputeSizeOfDNLCache() + ComputeSizeOfDataBuffers(cacheBlocks, blockSize) ! + 2 * ComputeSizeOfDataHT() + ComputeSizeOfDataHeaders(cacheBlocks); return size; } --- 115,121 ---- + ComputeSizeOfSCacheHT(stats) + ComputeSizeOfDNLCache() + ComputeSizeOfDataBuffers(cacheBlocks, blockSize) ! + 2 * ComputeSizeOfDataHT(cacheBlocks) + ComputeSizeOfDataHeaders(cacheBlocks); return size; } *************** *** 214,219 **** --- 214,234 ---- cm_config_data_t * config_data_p = (cm_config_data_t *)cm_data.baseAddress; int dirty = 0; + afsi_log("Closing AFS Cache:"); + afsi_log(" Base Address = %p", config_data_p); + afsi_log(" stats = %d", cm_data.stats); + afsi_log(" chunkSize = %d", cm_data.chunkSize); + afsi_log(" blockSize = %d", cm_data.blockSize); + afsi_log(" bufferSize = %d", cm_data.bufferSize); + afsi_log(" cacheType = %d", cm_data.cacheType); + afsi_log(" currentVolumes = %d", cm_data.currentVolumes); + afsi_log(" maxVolumes = %d", cm_data.maxVolumes); + afsi_log(" currentCells = %d", cm_data.currentCells); + afsi_log(" maxCells = %d", cm_data.maxCells); + afsi_log(" hashTableSize = %d", cm_data.hashTableSize); + afsi_log(" currentSCaches = %d", cm_data.currentSCaches); + afsi_log(" maxSCaches = %d", cm_data.maxSCaches); + cm_ShutdownDCache(); cm_ShutdownSCache(); cm_ShutdownACLCache(); *************** *** 393,399 **** fprintf(stderr," maxVolumes = %d\n", config_data_p->maxVolumes); fprintf(stderr," currentCells = %d\n", config_data_p->currentCells); fprintf(stderr," maxCells = %d\n", config_data_p->maxCells); ! fprintf(stderr," hashTableSize = %d\n", config_data_p->hashTableSize ); fprintf(stderr," currentSCaches = %d\n", config_data_p->currentSCaches); fprintf(stderr," maxSCaches = %d\n", config_data_p->maxSCaches); cm_data = *config_data_p; --- 408,414 ---- fprintf(stderr," maxVolumes = %d\n", config_data_p->maxVolumes); fprintf(stderr," currentCells = %d\n", config_data_p->currentCells); fprintf(stderr," maxCells = %d\n", config_data_p->maxCells); ! fprintf(stderr," hashTableSize = %d\n", config_data_p->hashTableSize); fprintf(stderr," currentSCaches = %d\n", config_data_p->currentSCaches); fprintf(stderr," maxSCaches = %d\n", config_data_p->maxSCaches); cm_data = *config_data_p; *************** *** 778,786 **** config_data_p = (cm_config_data_t *) baseAddress; if (!newFile) { ! afsi_log("Reusing existing AFS Cache data: Base Address = %lX",baseAddress); cm_data = *config_data_p; // perform validation of persisted data structures // if there is a failure, start from scratch if (cm_ValidateCache && !cm_IsCacheValid()) { --- 793,815 ---- config_data_p = (cm_config_data_t *) baseAddress; if (!newFile) { ! afsi_log("Reusing existing AFS Cache data:"); cm_data = *config_data_p; + afsi_log(" Base Address = %p",baseAddress); + afsi_log(" stats = %d", config_data_p->stats); + afsi_log(" chunkSize = %d", config_data_p->chunkSize); + afsi_log(" blockSize = %d", config_data_p->blockSize); + afsi_log(" bufferSize = %d", config_data_p->bufferSize); + afsi_log(" cacheType = %d", config_data_p->cacheType); + afsi_log(" currentVolumes = %d", config_data_p->currentVolumes); + afsi_log(" maxVolumes = %d", config_data_p->maxVolumes); + afsi_log(" currentCells = %d", config_data_p->currentCells); + afsi_log(" maxCells = %d", config_data_p->maxCells); + afsi_log(" hashTableSize = %d", config_data_p->hashTableSize); + afsi_log(" currentSCaches = %d", config_data_p->currentSCaches); + afsi_log(" maxSCaches = %d", config_data_p->maxSCaches); + // perform validation of persisted data structures // if there is a failure, start from scratch if (cm_ValidateCache && !cm_IsCacheValid()) { *************** *** 808,814 **** cm_data.buf_nbuffers = cacheBlocks; cm_data.buf_nOrigBuffers = 0; cm_data.buf_blockSize = CM_BUF_BLOCKSIZE; ! cm_data.buf_hashSize = CM_BUF_HASHSIZE; cm_data.mountRootGen = time(NULL); --- 837,843 ---- cm_data.buf_nbuffers = cacheBlocks; cm_data.buf_nOrigBuffers = 0; cm_data.buf_blockSize = CM_BUF_BLOCKSIZE; ! cm_data.buf_hashSize = osi_PrimeLessThan((afs_uint32)(cacheBlocks/7 + 1)); cm_data.mountRootGen = time(NULL); *************** *** 826,834 **** cm_data.dnlcBaseAddress = (cm_nc_t *) baseAddress; baseAddress += ComputeSizeOfDNLCache(); cm_data.buf_hashTablepp = (cm_buf_t **) baseAddress; ! baseAddress += ComputeSizeOfDataHT(); cm_data.buf_fileHashTablepp = (cm_buf_t **) baseAddress; ! baseAddress += ComputeSizeOfDataHT(); cm_data.bufHeaderBaseAddress = (cm_buf_t *) baseAddress; baseAddress += ComputeSizeOfDataHeaders(cacheBlocks); cm_data.bufDataBaseAddress = (char *) baseAddress; --- 855,863 ---- cm_data.dnlcBaseAddress = (cm_nc_t *) baseAddress; baseAddress += ComputeSizeOfDNLCache(); cm_data.buf_hashTablepp = (cm_buf_t **) baseAddress; ! baseAddress += ComputeSizeOfDataHT(cacheBlocks); cm_data.buf_fileHashTablepp = (cm_buf_t **) baseAddress; ! baseAddress += ComputeSizeOfDataHT(cacheBlocks); cm_data.bufHeaderBaseAddress = (cm_buf_t *) baseAddress; baseAddress += ComputeSizeOfDataHeaders(cacheBlocks); cm_data.bufDataBaseAddress = (char *) baseAddress; Index: openafs/src/WINNT/afsd/cm_memmap.h diff -c openafs/src/WINNT/afsd/cm_memmap.h:1.3.4.1 openafs/src/WINNT/afsd/cm_memmap.h:1.3.4.2 *** openafs/src/WINNT/afsd/cm_memmap.h:1.3.4.1 Wed Nov 29 01:23:44 2006 --- openafs/src/WINNT/afsd/cm_memmap.h Sun Feb 4 22:41:41 2007 *************** *** 95,101 **** afs_uint64 ComputeSizeOfSCacheHT(DWORD stats); afs_uint64 ComputeSizeOfDNLCache(void); afs_uint64 ComputeSizeOfDataBuffers(afs_uint64 cacheBlocks, DWORD blockSize); ! afs_uint64 ComputeSizeOfDataHT(void); afs_uint64 ComputeSizeOfDataHeaders(afs_uint64 cacheBlocks); afs_uint64 ComputeSizeOfMappingFile(DWORD stats, DWORD maxVols, DWORD maxCells, DWORD chunkSize, afs_uint64 cacheBlocks, DWORD blockSize); PSECURITY_ATTRIBUTES CreateCacheFileSA(); --- 95,101 ---- afs_uint64 ComputeSizeOfSCacheHT(DWORD stats); afs_uint64 ComputeSizeOfDNLCache(void); afs_uint64 ComputeSizeOfDataBuffers(afs_uint64 cacheBlocks, DWORD blockSize); ! afs_uint64 ComputeSizeOfDataHT(afs_uint64 cacheBlocks); afs_uint64 ComputeSizeOfDataHeaders(afs_uint64 cacheBlocks); afs_uint64 ComputeSizeOfMappingFile(DWORD stats, DWORD maxVols, DWORD maxCells, DWORD chunkSize, afs_uint64 cacheBlocks, DWORD blockSize); PSECURITY_ATTRIBUTES CreateCacheFileSA(); Index: openafs/src/WINNT/afsd/cm_scache.c diff -c openafs/src/WINNT/afsd/cm_scache.c:1.35.2.22 openafs/src/WINNT/afsd/cm_scache.c:1.35.2.32 *** openafs/src/WINNT/afsd/cm_scache.c:1.35.2.22 Mon Oct 16 20:32:57 2006 --- openafs/src/WINNT/afsd/cm_scache.c Thu Feb 8 08:51:40 2007 *************** *** 149,154 **** --- 149,155 ---- /* invalidate so next merge works fine; * also initialize some flags */ + scp->fileType = 0; scp->flags &= ~(CM_SCACHEFLAG_STATD | CM_SCACHEFLAG_DELETED | CM_SCACHEFLAG_RO *************** *** 545,553 **** long hash; cm_scache_t *scp; long code; ! cm_volume_t *volp = 0; cm_cell_t *cellp; ! char* mp = 0; int special; // yj: boolean variable to test if file is on root.afs int isRoot; extern cm_fid_t cm_rootFid; --- 546,554 ---- long hash; cm_scache_t *scp; long code; ! cm_volume_t *volp = NULL; cm_cell_t *cellp; ! char* mp = NULL; int special; // yj: boolean variable to test if file is on root.afs int isRoot; extern cm_fid_t cm_rootFid; *************** *** 579,585 **** return 0; } } ! // yj: when we get here, it means we don't have an scp // so we need to either load it or fake it, depending // on whether the file is "special", see below. --- 580,586 ---- return 0; } } ! // yj: when we get here, it means we don't have an scp // so we need to either load it or fake it, depending // on whether the file is "special", see below. *************** *** 631,636 **** --- 632,638 ---- #endif scp->fid = *fidp; scp->volp = cm_data.rootSCachep->volp; + cm_GetVolume(scp->volp); /* grab an additional reference */ scp->dotdotFid.cell=AFS_FAKE_ROOT_CELL_ID; scp->dotdotFid.volume=AFS_FAKE_ROOT_VOL_ID; scp->dotdotFid.unique=1; *************** *** 654,660 **** lock_ReleaseMutex(&cm_Freelance_Lock); scp->owner=0x0; ! scp->unixModeBits=0x1ff; scp->clientModTime=FakeFreelanceModTime; scp->serverModTime=FakeFreelanceModTime; scp->parentUnique = 0x1; --- 656,662 ---- lock_ReleaseMutex(&cm_Freelance_Lock); scp->owner=0x0; ! scp->unixModeBits=0777; scp->clientModTime=FakeFreelanceModTime; scp->serverModTime=FakeFreelanceModTime; scp->parentUnique = 0x1; *************** *** 714,719 **** --- 716,723 ---- if (scp == NULL) { osi_Log0(afsd_logp,"cm_GetNewSCache unable to obtain *new* scache entry"); lock_ReleaseWrite(&cm_scacheLock); + if (volp) + cm_PutVolume(volp); return CM_ERROR_WOULDBLOCK; } osi_Log2(afsd_logp,"cm_GetNewSCache returns scp 0x%x flags 0x%x", scp, scp->flags); *************** *** 1209,1215 **** /* now update the buffer pointer */ if (flags & CM_SCACHESYNC_FETCHDATA) { ! /* ensure that the buffer isn't already in the I/O list */ for(qdp = scp->bufReadsp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) { tbufp = osi_GetQData(qdp); if (tbufp == bufp) --- 1213,1221 ---- /* now update the buffer pointer */ if (flags & CM_SCACHESYNC_FETCHDATA) { ! int release = 0; ! ! /* ensure that the buffer isn't already in the I/O list */ for(qdp = scp->bufReadsp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) { tbufp = osi_GetQData(qdp); if (tbufp == bufp) *************** *** 1218,1228 **** if (qdp) { osi_QRemove((osi_queue_t **) &scp->bufReadsp, &qdp->q); osi_QDFree(qdp); } if (bufp) { - int release = 0; - if (bufp->cmFlags & CM_BUF_CMFETCHING) - release = 1; bufp->cmFlags &= ~(CM_BUF_CMFETCHING | CM_BUF_CMFULLYFETCHED); if (bufp->flags & CM_BUF_WAITING) { osi_Log2(afsd_logp, "CM SyncOpDone Waking [scp 0x%p] bufp 0x%p", scp, bufp); --- 1224,1232 ---- if (qdp) { osi_QRemove((osi_queue_t **) &scp->bufReadsp, &qdp->q); osi_QDFree(qdp); + release = 1; } if (bufp) { bufp->cmFlags &= ~(CM_BUF_CMFETCHING | CM_BUF_CMFULLYFETCHED); if (bufp->flags & CM_BUF_WAITING) { osi_Log2(afsd_logp, "CM SyncOpDone Waking [scp 0x%p] bufp 0x%p", scp, bufp); *************** *** 1235,1240 **** --- 1239,1245 ---- /* now update the buffer pointer */ if (flags & CM_SCACHESYNC_STOREDATA) { + int release = 0; /* ensure that the buffer isn't already in the I/O list */ for(qdp = scp->bufWritesp; qdp; qdp = (osi_queueData_t *) osi_QNext(&qdp->q)) { tbufp = osi_GetQData(qdp); *************** *** 1244,1254 **** if (qdp) { osi_QRemove((osi_queue_t **) &scp->bufWritesp, &qdp->q); osi_QDFree(qdp); } if (bufp) { - int release = 0; - if (bufp->cmFlags & CM_BUF_CMSTORING) - release = 1; bufp->cmFlags &= ~CM_BUF_CMSTORING; if (bufp->flags & CM_BUF_WAITING) { osi_Log2(afsd_logp, "CM SyncOpDone Waking [scp 0x%p] bufp 0x%p", scp, bufp); --- 1249,1257 ---- if (qdp) { osi_QRemove((osi_queue_t **) &scp->bufWritesp, &qdp->q); osi_QDFree(qdp); + release = 1; } if (bufp) { bufp->cmFlags &= ~CM_BUF_CMSTORING; if (bufp->flags & CM_BUF_WAITING) { osi_Log2(afsd_logp, "CM SyncOpDone Waking [scp 0x%p] bufp 0x%p", scp, bufp); *************** *** 1279,1285 **** * handled after the callback breaking is done, but only one of whose calls * started before that, can cause old info to be merged from the first call. */ ! void cm_MergeStatus(cm_scache_t *scp, AFSFetchStatus *statusp, AFSVolSync *volp, cm_user_t *userp, afs_uint32 flags) { // yj: i want to create some fake status for the /afs directory and the --- 1282,1290 ---- * handled after the callback breaking is done, but only one of whose calls * started before that, can cause old info to be merged from the first call. */ ! void cm_MergeStatus(cm_scache_t *dscp, ! cm_scache_t *scp, AFSFetchStatus *statusp, ! AFSVolSync *volsyncp, cm_user_t *userp, afs_uint32 flags) { // yj: i want to create some fake status for the /afs directory and the *************** *** 1297,1303 **** statusp->Owner = 0x0; statusp->CallerAccess = 0x9; statusp->AnonymousAccess = 0x9; ! statusp->UnixModeBits = 0x1ff; statusp->ParentVnode = 0x1; statusp->ParentUnique = 0x1; statusp->ResidencyMask = 0; --- 1302,1308 ---- statusp->Owner = 0x0; statusp->CallerAccess = 0x9; statusp->AnonymousAccess = 0x9; ! statusp->UnixModeBits = 0777; statusp->ParentVnode = 0x1; statusp->ParentUnique = 0x1; statusp->ResidencyMask = 0; *************** *** 1313,1318 **** --- 1318,1342 ---- if (statusp->errorCode != 0) { scp->flags |= CM_SCACHEFLAG_EACCESS; osi_Log2(afsd_logp, "Merge, Failure scp %x code 0x%x", scp, statusp->errorCode); + + scp->fileType = 0; /* unknown */ + + scp->serverModTime = 0; + scp->clientModTime = 0; + scp->length.LowPart = 0; + scp->length.HighPart = 0; + scp->serverLength.LowPart = 0; + scp->serverLength.HighPart = 0; + scp->linkCount = 0; + scp->owner = 0; + scp->group = 0; + scp->unixModeBits = 0; + scp->anyAccess = 0; + scp->dataVersion = 0; + + scp->parentVnode = dscp->fid.vnode; + scp->parentUnique = dscp->fid.unique; + return; } else { scp->flags &= ~CM_SCACHEFLAG_EACCESS; *************** *** 1366,1371 **** --- 1390,1396 ---- if (!(scp->flags & CM_SCACHEFLAG_RO)) return; } + scp->serverModTime = statusp->ServerModTime; if (!(scp->mask & CM_SCACHEMASK_CLIENTMODTIME)) { *************** *** 1380,1386 **** scp->serverLength.HighPart = statusp->Length_hi; scp->linkCount = statusp->LinkCount; - scp->dataVersion = statusp->DataVersion; scp->owner = statusp->Owner; scp->group = statusp->Group; scp->unixModeBits = statusp->UnixModeBits & 07777; --- 1405,1410 ---- *************** *** 1411,1416 **** --- 1435,1454 ---- if (userp != NULL) { cm_AddACLCache(scp, userp, statusp->CallerAccess); } + + if ((flags & CM_MERGEFLAG_STOREDATA) && + statusp->DataVersion - scp->dataVersion == 1) { + cm_buf_t *bp; + + for (bp = cm_data.buf_fileHashTablepp[BUF_FILEHASH(&scp->fid)]; bp; bp=bp->fileHashp) + { + if (cm_FidCmp(&scp->fid, &bp->fid) == 0 && + bp->dataVersion == scp->dataVersion) + bp->dataVersion = statusp->DataVersion; + } + + } + scp->dataVersion = statusp->DataVersion; } /* note that our stat cache info is incorrect, so force us eventually *************** *** 1546,1566 **** if (lock) lock_ObtainRead(&cm_scacheLock); ! sprintf(output, "%s - dumping scache - cm_data.currentSCaches=%d, cm_data.maxSCaches=%d\n", cookie, cm_data.currentSCaches, cm_data.maxSCaches); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); for (scp = cm_data.scacheLRULastp; scp; scp = (cm_scache_t *) osi_QPrev(&scp->q)) { if (scp->refCount != 0) { ! sprintf(output, "%s fid (cell=%d, volume=%d, vnode=%d, unique=%d) refCount=%u\n", ! cookie, scp->fid.cell, scp->fid.volume, scp->fid.vnode, scp->fid.unique, scp->refCount); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); } } ! sprintf(output, "%s - dumping cm_data.hashTable - cm_data.hashTableSize=%d\n", cookie, cm_data.hashTableSize); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); for (i = 0; i < cm_data.hashTableSize; i++) --- 1584,1604 ---- if (lock) lock_ObtainRead(&cm_scacheLock); ! sprintf(output, "%s - dumping scache - cm_data.currentSCaches=%d, cm_data.maxSCaches=%d\r\n", cookie, cm_data.currentSCaches, cm_data.maxSCaches); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); for (scp = cm_data.scacheLRULastp; scp; scp = (cm_scache_t *) osi_QPrev(&scp->q)) { if (scp->refCount != 0) { ! sprintf(output, "%s scp=0x%p, fid (cell=%d, volume=%d, vnode=%d, unique=%d) refCount=%u\r\n", ! cookie, scp, scp->fid.cell, scp->fid.volume, scp->fid.vnode, scp->fid.unique, scp->refCount); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); } } ! sprintf(output, "%s - dumping cm_data.hashTable - cm_data.hashTableSize=%d\r\n", cookie, cm_data.hashTableSize); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); for (i = 0; i < cm_data.hashTableSize; i++) *************** *** 1569,1575 **** { if (scp->refCount != 0) { ! sprintf(output, "%s scp=0x%p, hash=%d, fid (cell=%d, volume=%d, vnode=%d, unique=%d) refCount=%u\n", cookie, scp, i, scp->fid.cell, scp->fid.volume, scp->fid.vnode, scp->fid.unique, scp->refCount); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); --- 1607,1613 ---- { if (scp->refCount != 0) { ! sprintf(output, "%s scp=0x%p, hash=%d, fid (cell=%d, volume=%d, vnode=%d, unique=%d) refCount=%u\r\n", cookie, scp, i, scp->fid.cell, scp->fid.volume, scp->fid.vnode, scp->fid.unique, scp->refCount); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); *************** *** 1577,1583 **** } } ! sprintf(output, "%s - Done dumping scache.\n", cookie); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); if (lock) --- 1615,1621 ---- } } ! sprintf(output, "%s - Done dumping scache.\r\n", cookie); WriteFile(outputFile, output, (DWORD)strlen(output), &zilch, NULL); if (lock) Index: openafs/src/WINNT/afsd/cm_scache.h diff -c openafs/src/WINNT/afsd/cm_scache.h:1.21.2.9 openafs/src/WINNT/afsd/cm_scache.h:1.21.2.11 *** openafs/src/WINNT/afsd/cm_scache.h:1.21.2.9 Sat Oct 21 16:47:48 2006 --- openafs/src/WINNT/afsd/cm_scache.h Wed Feb 7 12:35:16 2007 *************** *** 292,297 **** --- 292,298 ---- * used to see if we're merging * in old info. */ + #define CM_MERGEFLAG_STOREDATA 2 /* Merge due to storedata op */ /* hash define. Must not include the cell, since the callback revocation code * doesn't necessarily know the cell in the case of a multihomed server *************** *** 327,334 **** extern void cm_SyncOpDone(cm_scache_t *, struct cm_buf *, afs_uint32); ! extern void cm_MergeStatus(cm_scache_t *, struct AFSFetchStatus *, struct AFSVolSync *, ! struct cm_user *, afs_uint32 flags); extern void cm_AFSFidFromFid(struct AFSFid *, cm_fid_t *); --- 328,338 ---- extern void cm_SyncOpDone(cm_scache_t *, struct cm_buf *, afs_uint32); ! extern void cm_MergeStatus(cm_scache_t * dscp, cm_scache_t * scp, ! struct AFSFetchStatus * statusp, ! struct AFSVolSync * volsyncp, ! struct cm_user *userp, ! afs_uint32 flags); extern void cm_AFSFidFromFid(struct AFSFid *, cm_fid_t *); Index: openafs/src/WINNT/afsd/cm_vnodeops.c diff -c openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.21 openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.28 *** openafs/src/WINNT/afsd/cm_vnodeops.c:1.69.2.21 Mon Jan 15 14:52:19 2007 --- openafs/src/WINNT/afsd/cm_vnodeops.c Tue Feb 13 00:47:02 2007 *************** *** 209,215 **** break; if (tc) validExtension = 1; ! } /* Copy name characters */ for (i = 0, name = longname; --- 209,215 ---- break; if (tc) validExtension = 1; ! } /* Copy name characters */ for (i = 0, name = longname; *************** *** 353,360 **** if (desiredAccess & AFS_ACCESS_READ) rights |= (scp->fileType == CM_SCACHETYPE_DIRECTORY ? PRSFS_LOOKUP : PRSFS_READ); ! if ((desiredAccess & AFS_ACCESS_WRITE) ! || createDisp == 4) rights |= PRSFS_WRITE; lock_ObtainMutex(&scp->mx); --- 353,363 ---- if (desiredAccess & AFS_ACCESS_READ) rights |= (scp->fileType == CM_SCACHETYPE_DIRECTORY ? PRSFS_LOOKUP : PRSFS_READ); ! /* We used to require PRSFS_WRITE if createDisp was 4 ! (OPEN_ALWAYS) even if AFS_ACCESS_WRITE was not requested. ! However, we don't need to do that since the existence of the ! scp implies that we don't need to create it. */ ! if (desiredAccess & AFS_ACCESS_WRITE) rights |= PRSFS_WRITE; lock_ObtainMutex(&scp->mx); *************** *** 481,491 **** int BeyondPage = 0, HaveDot = 0, HaveDotDot = 0; /* First check permissions */ ! lock_ObtainMutex(&dscp->mx); ! code = cm_SyncOp(dscp, NULL, userp, reqp, PRSFS_DELETE, CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_NEEDCALLBACK); ! cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS); ! lock_ReleaseMutex(&dscp->mx); if (code) return code; --- 484,494 ---- int BeyondPage = 0, HaveDot = 0, HaveDotDot = 0; /* First check permissions */ ! lock_ObtainMutex(&scp->mx); ! code = cm_SyncOp(scp, NULL, userp, reqp, PRSFS_DELETE, CM_SCACHESYNC_GETSTATUS | CM_SCACHESYNC_NEEDCALLBACK); ! cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS); ! lock_ReleaseMutex(&scp->mx); if (code) return code; *************** *** 937,951 **** lock_ReleaseRead(&scp->bufCreateLock); lock_ObtainMutex(&scp->mx); ! if (code) { return code; ! } while (1) { code = cm_SyncOp(scp, bufp, userp, reqp, 0, CM_SCACHESYNC_READ | CM_SCACHESYNC_NEEDCALLBACK); ! if (code) { goto done; ! } cm_SyncOpDone(scp, bufp, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_READ); --- 940,954 ---- lock_ReleaseRead(&scp->bufCreateLock); lock_ObtainMutex(&scp->mx); ! if (code) return code; ! while (1) { code = cm_SyncOp(scp, bufp, userp, reqp, 0, CM_SCACHESYNC_READ | CM_SCACHESYNC_NEEDCALLBACK); ! if (code) goto done; ! cm_SyncOpDone(scp, bufp, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_READ); *************** *** 954,962 **** /* otherwise load buffer */ code = cm_GetBuffer(scp, bufp, NULL, userp, reqp); ! if (code) { goto done; - } } /* locked, has callback, has valid data in buffer */ if ((tlen = scp->length.LowPart) > 1000) --- 957,964 ---- /* otherwise load buffer */ code = cm_GetBuffer(scp, bufp, NULL, userp, reqp); ! if (code) goto done; } /* locked, has callback, has valid data in buffer */ if ((tlen = scp->length.LowPart) > 1000) *************** *** 1002,1008 **** long code; char *cp; char *mpNamep; ! cm_volume_t *volp; cm_cell_t *cellp; char mtType; cm_fid_t tfid; --- 1004,1010 ---- long code; char *cp; char *mpNamep; ! cm_volume_t *volp = NULL; cm_cell_t *cellp; char mtType; cm_fid_t tfid; *************** *** 1108,1113 **** --- 1110,1117 ---- } done: + if (volp) + cm_PutVolume(volp); free(cellNamep); free(volNamep); return code; *************** *** 1403,1416 **** cm_dnlcRemove(dscp, namep); cm_SyncOpDone(dscp, NULL, sflags); if (code == 0) ! cm_MergeStatus(dscp, &newDirStatus, &volSync, userp, 0); ! else if (code == CM_ERROR_NOSUCHFILE) { ! /* windows would not have allowed the request to delete the file ! * if it did not believe the file existed. therefore, we must ! * have an inconsistent view of the world. ! */ ! dscp->cbServerp = NULL; ! } lock_ReleaseMutex(&dscp->mx); return code; --- 1407,1420 ---- cm_dnlcRemove(dscp, namep); cm_SyncOpDone(dscp, NULL, sflags); if (code == 0) ! cm_MergeStatus(NULL, dscp, &newDirStatus, &volSync, userp, 0); ! else if (code == CM_ERROR_NOSUCHFILE) { ! /* windows would not have allowed the request to delete the file ! * if it did not believe the file existed. therefore, we must ! * have an inconsistent view of the world. ! */ ! dscp->cbServerp = NULL; ! } lock_ReleaseMutex(&dscp->mx); return code; *************** *** 1653,1666 **** * is a symlink, we have more to do. */ *cp++ = 0; /* add null termination */ - if (!strcmp(".",component)) { - code = 0; - if (dirScp) { - cm_ReleaseSCache(dirScp); - dirScp = NULL; - } - break; - } extraFlag = 0; if ((flags & CM_FLAG_DIRSEARCH) && tc == 0) extraFlag = CM_FLAG_NOMOUNTCHASE; --- 1657,1662 ---- *************** *** 2101,2107 **** cm_EndCallbackGrantingCall(scp, &cbReq, &bb.callbacks[j], CM_CALLBACK_MAINTAINCOUNT); ! cm_MergeStatus(scp, &bb.stats[j], &volSync, userp, 0); } lock_ReleaseMutex(&scp->mx); cm_ReleaseSCache(scp); --- 2097,2103 ---- cm_EndCallbackGrantingCall(scp, &cbReq, &bb.callbacks[j], CM_CALLBACK_MAINTAINCOUNT); ! cm_MergeStatus(dscp, scp, &bb.stats[j], &volSync, userp, 0); } lock_ReleaseMutex(&scp->mx); cm_ReleaseSCache(scp); *************** *** 2114,2135 **** } /* while there are still more files to process */ lock_ObtainMutex(&dscp->mx); ! #if 0 ! /* If we did the InlineBulk RPC pull out the return code */ if (inlinebulk) { if ((&bb.stats[0])->errorCode) { ! cm_Analyze(NULL /*connp was released by the previous cm_Analyze */, ! userp, reqp, &dscp->fid, &volSync, NULL, NULL, (&bb.stats[0])->errorCode); ! code = cm_MapRPCError((&bb.stats[0])->errorCode, reqp); } - } else - #endif - { - code = 0; } ! osi_Log1(afsd_logp, "END cm_TryBulkStat code = 0x%x", code); ! return code; } void cm_StatusFromAttr(AFSStoreStatus *statusp, cm_scache_t *scp, cm_attr_t *attrp) --- 2110,2125 ---- } /* while there are still more files to process */ lock_ObtainMutex(&dscp->mx); ! /* If we did the InlineBulk RPC pull out the return code and log it */ if (inlinebulk) { if ((&bb.stats[0])->errorCode) { ! osi_Log1(afsd_logp, "cm_TryBulkStat bulk stat error: %d", ! (&bb.stats[0])->errorCode); } } ! osi_Log0(afsd_logp, "END cm_TryBulkStat"); ! return 0; } void cm_StatusFromAttr(AFSStoreStatus *statusp, cm_scache_t *scp, cm_attr_t *attrp) *************** *** 2317,2329 **** lock_ObtainMutex(&scp->mx); cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_STORESTATUS); if (code == 0) ! cm_MergeStatus(scp, &afsOutStatus, &volSync, userp, ! CM_MERGEFLAG_FORCE); /* if we're changing the mode bits, discard the ACL cache, * since we changed the mode bits. */ ! if (afsInStatus.Mask & AFS_SETMODE) cm_FreeAllACLEnts(scp); lock_ReleaseMutex(&scp->mx); return code; } --- 2307,2320 ---- lock_ObtainMutex(&scp->mx); cm_SyncOpDone(scp, NULL, CM_SCACHESYNC_STORESTATUS); if (code == 0) ! cm_MergeStatus(NULL, scp, &afsOutStatus, &volSync, userp, ! CM_MERGEFLAG_FORCE|CM_MERGEFLAG_STOREDATA); /* if we're changing the mode bits, discard the ACL cache, * since we changed the mode bits. */ ! if (afsInStatus.Mask & AFS_SETMODE) ! cm_FreeAllACLEnts(scp); lock_ReleaseMutex(&scp->mx); return code; } *************** *** 2400,2406 **** lock_ObtainMutex(&dscp->mx); cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { ! cm_MergeStatus(dscp, &updatedDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&dscp->mx); --- 2391,2397 ---- lock_ObtainMutex(&dscp->mx); cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { ! cm_MergeStatus(NULL, dscp, &updatedDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&dscp->mx); *************** *** 2419,2425 **** lock_ObtainMutex(&scp->mx); scp->creator = userp; /* remember who created it */ if (!cm_HaveCallback(scp)) { ! cm_MergeStatus(scp, &newFileStatus, &volSync, userp, 0); cm_EndCallbackGrantingCall(scp, &cbReq, &newFileCallback, 0); --- 2410,2416 ---- lock_ObtainMutex(&scp->mx); scp->creator = userp; /* remember who created it */ if (!cm_HaveCallback(scp)) { ! cm_MergeStatus(dscp, scp, &newFileStatus, &volSync, userp, 0); cm_EndCallbackGrantingCall(scp, &cbReq, &newFileCallback, 0); *************** *** 2534,2540 **** lock_ObtainMutex(&dscp->mx); cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { ! cm_MergeStatus(dscp, &updatedDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&dscp->mx); --- 2525,2531 ---- lock_ObtainMutex(&dscp->mx); cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { ! cm_MergeStatus(NULL, dscp, &updatedDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&dscp->mx); *************** *** 2552,2558 **** if (code == 0) { lock_ObtainMutex(&scp->mx); if (!cm_HaveCallback(scp)) { ! cm_MergeStatus(scp, &newDirStatus, &volSync, userp, 0); cm_EndCallbackGrantingCall(scp, &cbReq, &newDirCallback, 0); --- 2543,2549 ---- if (code == 0) { lock_ObtainMutex(&scp->mx); if (!cm_HaveCallback(scp)) { ! cm_MergeStatus(dscp, scp, &newDirStatus, &volSync, userp, 0); cm_EndCallbackGrantingCall(scp, &cbReq, &newDirCallback, 0); *************** *** 2628,2634 **** lock_ObtainMutex(&dscp->mx); cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { ! cm_MergeStatus(dscp, &updatedDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&dscp->mx); --- 2619,2625 ---- lock_ObtainMutex(&dscp->mx); cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { ! cm_MergeStatus(NULL, dscp, &updatedDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&dscp->mx); *************** *** 2692,2698 **** lock_ObtainMutex(&dscp->mx); cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { ! cm_MergeStatus(dscp, &updatedDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&dscp->mx); --- 2683,2689 ---- lock_ObtainMutex(&dscp->mx); cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { ! cm_MergeStatus(NULL, dscp, &updatedDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&dscp->mx); *************** *** 2710,2716 **** if (code == 0) { lock_ObtainMutex(&scp->mx); if (!cm_HaveCallback(scp)) { ! cm_MergeStatus(scp, &newLinkStatus, &volSync, userp, 0); } lock_ReleaseMutex(&scp->mx); --- 2701,2707 ---- if (code == 0) { lock_ObtainMutex(&scp->mx); if (!cm_HaveCallback(scp)) { ! cm_MergeStatus(dscp, scp, &newLinkStatus, &volSync, userp, 0); } lock_ReleaseMutex(&scp->mx); *************** *** 2774,2780 **** cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { cm_dnlcRemove(dscp, namep); ! cm_MergeStatus(dscp, &updatedDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&dscp->mx); --- 2765,2771 ---- cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { cm_dnlcRemove(dscp, namep); ! cm_MergeStatus(NULL, dscp, &updatedDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&dscp->mx); *************** *** 2931,2937 **** lock_ObtainMutex(&oldDscp->mx); cm_SyncOpDone(oldDscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { ! cm_MergeStatus(oldDscp, &updatedOldDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&oldDscp->mx); --- 2922,2928 ---- lock_ObtainMutex(&oldDscp->mx); cm_SyncOpDone(oldDscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { ! cm_MergeStatus(NULL, oldDscp, &updatedOldDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&oldDscp->mx); *************** *** 2941,2947 **** lock_ObtainMutex(&newDscp->mx); cm_SyncOpDone(newDscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { ! cm_MergeStatus(newDscp, &updatedNewDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&newDscp->mx); --- 2932,2938 ---- lock_ObtainMutex(&newDscp->mx); cm_SyncOpDone(newDscp, NULL, CM_SCACHESYNC_STOREDATA); if (code == 0) { ! cm_MergeStatus(NULL, newDscp, &updatedNewDirStatus, &volSync, userp, 0); } lock_ReleaseMutex(&newDscp->mx); Index: openafs/src/WINNT/afsd/cm_volume.c diff -c openafs/src/WINNT/afsd/cm_volume.c:1.14.4.2 openafs/src/WINNT/afsd/cm_volume.c:1.14.4.6 *** openafs/src/WINNT/afsd/cm_volume.c:1.14.4.2 Fri Aug 25 11:27:39 2006 --- openafs/src/WINNT/afsd/cm_volume.c Sat Feb 3 21:46:25 2007 *************** *** 129,135 **** */ #define MULTIHOMED 1 long cm_UpdateVolume(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *reqp, ! cm_volume_t *volp) { cm_conn_t *connp; int i, j, k; --- 129,135 ---- */ #define MULTIHOMED 1 long cm_UpdateVolume(struct cm_cell *cellp, cm_user_t *userp, cm_req_t *reqp, ! cm_volume_t *volp) { cm_conn_t *connp; int i, j, k; *************** *** 363,512 **** return code; } long cm_GetVolumeByID(cm_cell_t *cellp, long volumeID, cm_user_t *userp, cm_req_t *reqp, cm_volume_t **outVolpp) { ! cm_volume_t *volp; ! char volNameString[