diff options
author | Jens Arnold <amiconn@rockbox.org> | 2004-11-17 02:34:17 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2004-11-17 02:34:17 +0000 |
commit | f78524bf93b1c29ce5ec122f33c34b3a85745890 (patch) | |
tree | 366ffe79e56db172f08f1280d4f4cd0843c485d1 /firmware | |
parent | 0b959cf8be43acc17b74df5054b7818913e89a9e (diff) |
Bug fix: Do only flush the sector buffer after writing head bytes if it really needs to be. The old code did flush always, causing the huge slowdown of fprintf() and other places writing byte-wise
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5413 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/common/file.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/firmware/common/file.c b/firmware/common/file.c index 623e898257..81b5a194c0 100644 --- a/firmware/common/file.c +++ b/firmware/common/file.c @@ -457,18 +457,15 @@ static int readwrite(int fd, void* buf, int count, bool write) nread = headbytes; count -= headbytes; } - - /* if buffer has been modified, write it back to disk */ - if (nread && file->dirty) { - rc = flush_cache(fd); - if (rc < 0) - return rc * 10 - 3; - } + + /* If the buffer has been modified, either it has been flushed already + * (if (offs+headbytes == SECTOR_SIZE)...) or does not need to be (no + * more data to follow in this call). Do NOT flush here. */ /* read/write whole sectors right into/from the supplied buffer */ sectors = count / SECTOR_SIZE; if ( sectors ) { - int rc = fat_readwrite(&(file->fatfile), sectors, + int rc = fat_readwrite(&(file->fatfile), sectors, (unsigned char*)buf+nread, write ); if ( rc < 0 ) { DEBUGF("Failed read/writing %d sectors\n",sectors); |