]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
In msdosfs_settattr(), don't do synchronous updates of the denode
authorbde <bde@FreeBSD.org>
Thu, 18 Oct 2007 07:26:21 +0000 (07:26 +0000)
committerbde <bde@FreeBSD.org>
Thu, 18 Oct 2007 07:26:21 +0000 (07:26 +0000)
commit896bab2157a7e590750c85dff9cd3dc28f4c8ff9
treebec717022813fd33e59536f357d1f2f9d6cefd38
parent46a589e6f8f14c13c350e99c9dc304282dca5896
In msdosfs_settattr(), don't do synchronous updates of the denode
(except indirectly for the size pseudo-attribute).  If anything deserves
a sync update, then it is ids and immutable flags, since these are
related to security, but ffs never synced these and msdosfs doesn't
support them.  (ufs_setattr() only does an update in one case where
it is least needed (for timestamps); it did pessimal sync updates for
timestamps until 1998/03/08 but was changed for unlogged reasons related
to soft updates.)

Now msdosfs calls deupdat() with waitfor == 0, which normally gives a
delayed update to disk but always gives a sync update of timestamps
in core, while for ffs everything is delayed until the syncer daemon
or other activity causes an update (except for timestamps).

This gives a large optimization mainly for things like cp -p, where
attribute adjustment could easily triple the number of physical I/O's
if it is done synchronously (but cp -p to msdosfs is not as bad as
that, since msdosfs doesn't support many attributes so null adjustments
are more common, and msdosfs doesn't support ctimes so even if cp
doesn't weed out null adjustments they don't become non-null after
clobbering the ctime).
sys/fs/msdosfs/msdosfs_vnops.c