From 317819a5f62502c2daad8b2f578f62e1cd7f4017 Mon Sep 17 00:00:00 2001 From: trhodes Date: Tue, 16 Jan 2007 23:43:14 +0000 Subject: Add a 3rd entry in the cache, which keeps the end position from just before extending a file. This has the desired effect of keeping the write speed constant. And yes, that helps a lot copying large files always at full speed now, and I have seen improvements using benchmarks/bonnie. Stolen from: NetBSD Reviewed by: bde --- sys/fs/msdosfs/denode.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'sys/fs/msdosfs/denode.h') diff --git a/sys/fs/msdosfs/denode.h b/sys/fs/msdosfs/denode.h index 4fa51aa..3aac0bc 100644 --- a/sys/fs/msdosfs/denode.h +++ b/sys/fs/msdosfs/denode.h @@ -116,10 +116,12 @@ struct fatcache { * cache is probably pretty worthless if a file is opened by multiple * processes. */ -#define FC_SIZE 2 /* number of entries in the cache */ +#define FC_SIZE 3 /* number of entries in the cache */ #define FC_LASTMAP 0 /* entry the last call to pcbmap() resolved * to */ #define FC_LASTFC 1 /* entry for the last cluster in the file */ +#define FC_NEXTTOLASTFC 2 /* entry for a close to the last cluster in + * the file */ #define FCE_EMPTY 0xffffffff /* doesn't represent an actual cluster # */ @@ -130,6 +132,13 @@ struct fatcache { (dep)->de_fc[(slot)].fc_frcn = (frcn); \ (dep)->de_fc[(slot)].fc_fsrcn = (fsrcn); +#define fc_last_to_nexttolast(dep) do { \ + (dep)->de_fc[FC_NEXTTOLASTFC].fc_frcn = \ + (dep)->de_fc[FC_LASTFC].fc_frcn; \ + (dep)->de_fc[FC_NEXTTOLASTFC].fc_fsrcn = \ + (dep)->de_fc[FC_LASTFC].fc_fsrcn; \ +} while (0) + /* * This is the in memory variant of a dos directory entry. It is usually * contained within a vnode. -- cgit v1.1