diff options
author | Ralf Kirchner <ralf.kirchner@embedded-brains.de> | 2012-12-05 13:43:34 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-12-05 15:26:48 +0100 |
commit | 42a22f0824c4618b864582804ce1440b548a462f (patch) | |
tree | 835abe13c7d2140f3efa8cf8c256928c0b32e1a0 /cpukit/libfs/src/dosfs/fat.h | |
parent | dosfs: Block size optimization (diff) | |
download | rtems-42a22f0824c4618b864582804ce1440b548a462f.tar.bz2 |
dosfs: Cluster write optimization
Separate cluster write from sector write for quick file write.
New test fstests/fsdosfswrite01.
Diffstat (limited to 'cpukit/libfs/src/dosfs/fat.h')
-rw-r--r-- | cpukit/libfs/src/dosfs/fat.h | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/cpukit/libfs/src/dosfs/fat.h b/cpukit/libfs/src/dosfs/fat.h index 48b149199d..5d36fb45c0 100644 --- a/cpukit/libfs/src/dosfs/fat.h +++ b/cpukit/libfs/src/dosfs/fat.h @@ -440,6 +440,20 @@ fat_cluster_num_to_sector512_num( } static inline uint32_t + fat_block_num_to_cluster_num (const fat_fs_info_t *fs_info, + const uint32_t block_number) +{ + return block_number >> (fs_info->vol.bpc_log2 - fs_info->vol.bytes_per_block_log2); +} + +static inline uint32_t + fat_block_num_to_sector_num (const fat_fs_info_t *fs_info, + const uint32_t block_number) +{ + return block_number << (fs_info->vol.bytes_per_block_log2 - fs_info->vol.sec_log2); +} + +static inline uint32_t fat_sector_num_to_block_num (const fat_fs_info_t *fs_info, const uint32_t sector_number) { @@ -481,18 +495,26 @@ _fat_block_read(fat_fs_info_t *fs_info, void *buff); ssize_t -_fat_block_write(fat_fs_info_t *fs_info, +fat_cluster_write(fat_fs_info_t *fs_info, + uint32_t start_cln, + uint32_t offset, + uint32_t count, + const void *buff, + bool overwrite_cluster); + +ssize_t +fat_sector_write(fat_fs_info_t *fs_info, uint32_t start, uint32_t offset, uint32_t count, const void *buff); -int -_fat_block_zero(fat_fs_info_t *fs_info, - uint32_t start, - uint32_t offset, - uint32_t count); - +ssize_t +fat_cluster_set(fat_fs_info_t *fs_info, + uint32_t start, + uint32_t offset, + uint32_t count, + uint8_t pattern); int |