summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs/src/dosfs/msdos_file.c
diff options
context:
space:
mode:
authorRalf Kirchner <ralf.kirchner@embedded-brains.de>2012-11-28 14:43:32 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-12-05 15:26:48 +0100
commita20fbe78ec1a84a557ed9bcf5412b1b7c530aa35 (patch)
tree83bb1d7d288143056a788344a768f3496a969801 /cpukit/libfs/src/dosfs/msdos_file.c
parentfstests/fsdosfsformat01: New test (diff)
downloadrtems-a20fbe78ec1a84a557ed9bcf5412b1b7c530aa35.tar.bz2
dosfs: Block size optimization
Change block size of bdbuf to the cluster size if the data clusters are aligned on a cluster boundary. This enables fast access to data clusters.
Diffstat (limited to 'cpukit/libfs/src/dosfs/msdos_file.c')
-rw-r--r--cpukit/libfs/src/dosfs/msdos_file.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/cpukit/libfs/src/dosfs/msdos_file.c b/cpukit/libfs/src/dosfs/msdos_file.c
index 0406be0f58..a5b9c7abb2 100644
--- a/cpukit/libfs/src/dosfs/msdos_file.c
+++ b/cpukit/libfs/src/dosfs/msdos_file.c
@@ -191,6 +191,7 @@ msdos_file_stat(
rtems_status_code sc = RTEMS_SUCCESSFUL;
msdos_fs_info_t *fs_info = loc->mt_entry->fs_info;
fat_file_fd_t *fat_fd = loc->node_access;
+ uint32_t cl_mask = fs_info->fat.vol.bpc - 1;
sc = rtems_semaphore_obtain(fs_info->vol_sema, RTEMS_WAIT,
MSDOS_VOLUME_SEMAPHORE_TIMEOUT);
@@ -202,8 +203,9 @@ msdos_file_stat(
buf->st_mode = S_IFREG | S_IRWXU | S_IRWXG | S_IRWXO;
buf->st_rdev = 0ll;
buf->st_size = fat_fd->fat_file_size;
- buf->st_blocks = fat_fd->fat_file_size >> FAT_SECTOR512_BITS;
- buf->st_blksize = fs_info->fat.vol.bps;
+ buf->st_blocks = ((fat_fd->fat_file_size + cl_mask) & ~cl_mask)
+ >> FAT_SECTOR512_BITS;
+ buf->st_blksize = fs_info->fat.vol.bpc;
buf->st_mtime = fat_fd->mtime;
rtems_semaphore_release(fs_info->vol_sema);