> Fab Tillier wrote: > >> Fab & community, > >> Are you good with this patch to allow simultaneous IBAT device > >> access from user mode? > > > > Looks very reasonable to me, I'm surprised we've never run into this > > issue before... > > OK, thanks; will commit. > Case addressed is some (>2) MPI ranks @ a single node all attempting to > access the IBAT device. > We were seeing E_PENDING being returned.
The current code should not have returned E_PENDING. If you look at the code, if the CreateFile failed, it would return HRESULT_FROM_WIN32( GetLastError() ) - GetLastError() would not have returned ERROR_IO_PENDING in this case, but some other error related to sharing. Note however that E_PENDING can be returned if the ARP entry is in the process of being resolved. Issuing a new request would abort the currently in-process one, so returning E_PENDING lets the caller implement the right retry logic (sleep and retry, punt to a higher level, etc.) The ND provider handles E_PENDING internally and reports that as a timeout to be retried (asynchronously). Point being, you'll need to handle E_PENDING in DAPL for the genuine in-progress case (NlnsIncomplete case for GetIpNetEntry2.) -Fab > > > > > -Fab > > > >> > >> Thanks, > >> > >> Stan. > >> > >> > >> --- C:/Documents and Settings/scsmith/Local Settings/Temp/ibat.cpp- > >> revBASE.svn000.tmp.cpp Mon Aug 17 14:33:47 2009 > >> +++ C:/Documents and Settings/scsmith/My Documents/openIB- > >> windows/SVN/gen1/branches/WOF2-1/core/ibat/user/ibat.cpp Mon > >> Aug 17 14:01:18 2009 @@ -98,7 +98,7 @@ > >> return E_INVALIDARG; > >> > >> H hIbatDev = CreateFileW( IBAT_WIN32_NAME, > >> - MAXIMUM_ALLOWED, 0, NULL, > >> + MAXIMUM_ALLOWED,(FILE_SHARE_READ|FILE_SHARE_WRITE), NULL, > >> OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); > >> if( hIbatDev == INVALID_HANDLE_VALUE ) > >> return HRESULT_FROM_WIN32( GetLastError() ); @@ -306,7 > >> +306,7 @@ return E_NOTIMPL; > >> > >> H hIbatDev = CreateFileW( IBAT_WIN32_NAME, > >> - MAXIMUM_ALLOWED, 0, NULL, > >> + MAXIMUM_ALLOWED,(FILE_SHARE_READ|FILE_SHARE_WRITE), NULL, > >> OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); > >> if( hIbatDev == INVALID_HANDLE_VALUE ) > >> return HRESULT_FROM_WIN32( GetLastError() ); _______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
