updated smbfs patch

Bill Hawes (whawes@star.net)
Sun, 23 Nov 1997 18:08:43 -0500


This is a multi-part message in MIME format.
--------------BD0EF0693CE69E7DF5C9191E
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Steven N. Hirsch wrote:
> Perhaps I'm confused. Isn't mtime what the 'ls -al' (aliased to 'dir' on
> my system) shows? If so, WfW _never_ gets this timestamp. It used to
> work that way, but not for some time.
>
> On the server side it always ends up with the time the copy is created.
>
> This is against WfW. See my (lengthy) posting of a few moments ago and
> check out the fun and merriment when run against NT Workstation on my
> Alpha UDB!

Hi Steve,
I've done a substantial reworking of the timestamp-related code and have
things working quite a bit better. There are so many bugs in NT and Win
95 to work around that I'm now maintaining mtime and atime locally and
posting updates to the server when a file is closed.

One nice side effect of these changes is that writes are about 3X faster
on the low end, by virtue of eliminating the getattr call. Bonnie and
iozone now return more reasonable write speeds.

One thing to watch out for -- do not enable the Win 95 bug CONFIG option
unless you intend to talk to a Win 95 server. The CONFIG option avoids a
Win 95 bug, but exposes a bug in NT in that core protocol timestamps
aren't correct. Eventually I'll have a runtime test for this.

Please test out the attached patch and let me know of any remaining
anomalies.

Regards,
Bill
--------------BD0EF0693CE69E7DF5C9191E
Content-Type: application/x-gzip; name="smbfs_65-patch.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="smbfs_65-patch.gz"

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
Jyrh5P8DIEm34newAAA=
--------------BD0EF0693CE69E7DF5C9191E--