patch for 2.1.72 smbfs

Bill Hawes (whawes@star.net)
Thu, 11 Dec 1997 12:35:26 -0500


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

The attached patch 2.1.72 smbfs should take care of most of the problems
reported. Hopefully future changes should be just minor tweaking and
removal of debugging code.

I've reworked the dentry validation to help improve read cacheing -- it
now checks with the server if the dentry is more than 5 seconds old
rather than automatically discarding it.

I've also added a test to invalidate directories on WfWg servers if it's
more than 2 seconds old, since the timestamp isn't updated when files
are added. This should be a reasonable workaround to the problem. Cached
directories on Win 95 and NT servers aren't affected; they will be
invalidated only if the timestamp indicates a change.

The only remaining problem is that I still don't have a workable way to
set timestamps for directories under Win 95. (Files are OK though.)

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

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
Ihb0Dlr/H9nikXU2xv8AFumLT+u1AAA=
--------------C30BB20B956E12EFFB0AE802--