win-power-mgmt-flush-test-20041003
authorJeffrey Altman <jaltman@mit.edu>
Sun, 3 Oct 2004 14:34:27 +0000 (14:34 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Sun, 3 Oct 2004 14:34:27 +0000 (14:34 +0000)
commit2469663d0d4b2df8100ec8e09954163ddf1aa042
treef32bc4533a1b39d0789448d6d52bfb09446faa67
parent3f2e943d430ea85ece5c1f96f197122a7c47851c
win-power-mgmt-flush-test-20041003

The windows power management code responds to a request to suspend or
hibernate by performing a "fs flushvol" as the logged in user on each
of the SMB/CIFS mounted shares.  This can be very time consuming if
the cell servers cannot be reached.

This patch adds a test to ensure that there is at least one network
adapter in the machine which is not a loopback adapter.

While developing this patch other areas of concern have been raised.
The power management code waits a fixed period of time based upon
the hard dead timeout before allowing the suspend/hibernate to continue.
This allows the machine to shutdown even if there are active flush
operations being performed.  This defeats the benefit of performing
the flush at all.

A better mechanism could be developed if the functions called via
cm_IoctlFlushVolume returned and checked error codes.  Then it might
be possible to abandon the flush operation if a Server Not Reachable
state was obtained.

The power management flush operations will also not work on Terminal
Server.  This would be important in the case where a terminal server
is shutting down due to a switch over to a UPS.  The reason it does
not work on Terminal Server is that there is that it is not possible
for afsd_service.exe to enumerate the SMB/CIFS shares and impersonate
the individual logged in users.

It would be preferred for there to be a new cm_FlushAll() function
implemented which was not dependent on the use of the ioctl mechanism
for the purpose of identifying a volume ID or a user ID.
src/WINNT/afsd/afsd_flushvol.c
src/WINNT/afsd/afsd_service.c
src/WINNT/afsd/lanahelper.cpp
src/WINNT/afsd/lanahelper.h