diff options
author | Chris Johns <chrisj@rtems.org> | 2010-02-22 23:02:41 +0000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2010-02-22 23:02:41 +0000 |
commit | 59762963b2c74d67b5db42ad7589e69b706af067 (patch) | |
tree | 57e0c1407d5fd2894f641365d5610a56ec38bd2f /cpukit/libfs | |
parent | 2010-02-20 Chris Johns <chrisj@rtems.org> (diff) | |
download | rtems-59762963b2c74d67b5db42ad7589e69b706af067.tar.bz2 |
2010-02-23 Chris Johns <chrisj@rtems.org>
* libfs/src/rfs/rtems-rfs-dir.c: Fix printf format warning for a
64bit off_t.
* libfs/src/rfs/rtems-rfs-file-system.h: Add a macro to get the
file system flags.
* libfs/src/rfs/rtems-rfs-group.c,
libfs/src/rfs/rtems-rfs-group.h: Add rtems_rfs_group_usage.
* libfs/src/rfs/rtems-rfs-rtems.c: Fill in all the fields in the
statvfs struct.
* libfs/src/rfs/rtems-rfs-shell.c: Use rtems_rfs_group_usage.
Diffstat (limited to 'cpukit/libfs')
-rw-r--r-- | cpukit/libfs/src/rfs/rtems-rfs-dir.c | 2 | ||||
-rw-r--r-- | cpukit/libfs/src/rfs/rtems-rfs-file-system.h | 6 | ||||
-rw-r--r-- | cpukit/libfs/src/rfs/rtems-rfs-group.c | 30 | ||||
-rw-r--r-- | cpukit/libfs/src/rfs/rtems-rfs-group.h | 12 | ||||
-rw-r--r-- | cpukit/libfs/src/rfs/rtems-rfs-rtems.c | 19 | ||||
-rw-r--r-- | cpukit/libfs/src/rfs/rtems-rfs-shell.c | 14 |
6 files changed, 64 insertions, 19 deletions
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-dir.c b/cpukit/libfs/src/rfs/rtems-rfs-dir.c index 8813fb751e..4bc79a11cc 100644 --- a/cpukit/libfs/src/rfs/rtems-rfs-dir.c +++ b/cpukit/libfs/src/rfs/rtems-rfs-dir.c @@ -609,7 +609,7 @@ rtems_rfs_dir_read (rtems_rfs_file_system* fs, dirent->d_namlen = elength; if (rtems_rfs_trace (RTEMS_RFS_TRACE_DIR_READ)) - printf ("rtems-rfs: dir-read: found off:%ld ino:%ld name=%s\n", + printf ("rtems-rfs: dir-read: found off:%Ld ino:%ld name=%s\n", dirent->d_off, dirent->d_ino, dirent->d_name); break; } diff --git a/cpukit/libfs/src/rfs/rtems-rfs-file-system.h b/cpukit/libfs/src/rfs/rtems-rfs-file-system.h index 7f307a2cd5..8590d108aa 100644 --- a/cpukit/libfs/src/rfs/rtems-rfs-file-system.h +++ b/cpukit/libfs/src/rfs/rtems-rfs-file-system.h @@ -246,6 +246,12 @@ struct rtems_rfs_file_system_t }; /** + * Return the flags. + * + * @param _fs Pointer to the file system. + */ +#define rtems_rfs_fs_flags(_f) ((_f)->flags) +/** * Should bitmap buffers be released when finished ? * * @param _fs Pointer to the file system. diff --git a/cpukit/libfs/src/rfs/rtems-rfs-group.c b/cpukit/libfs/src/rfs/rtems-rfs-group.c index ef60d320c5..9a1e27871e 100644 --- a/cpukit/libfs/src/rfs/rtems-rfs-group.c +++ b/cpukit/libfs/src/rfs/rtems-rfs-group.c @@ -314,3 +314,33 @@ rtems_rfs_group_bitmap_test (rtems_rfs_file_system* fs, return rc; } + +int +rtems_rfs_group_usage (rtems_rfs_file_system* fs, + size_t* blocks, + size_t* inodes) +{ + int g; + + *blocks = 0; + *inodes = 0; + + for (g = 0; g < fs->group_count; g++) + { + rtems_rfs_group* group = &fs->groups[g]; + *blocks += + rtems_rfs_bitmap_map_size(&group->block_bitmap) - + rtems_rfs_bitmap_map_free (&group->block_bitmap); + *inodes += + rtems_rfs_bitmap_map_size (&group->inode_bitmap) - + rtems_rfs_bitmap_map_free (&group->inode_bitmap); + } + + if (*blocks > rtems_rfs_fs_blocks (fs)) + *blocks = rtems_rfs_fs_blocks (fs); + if (*inodes > rtems_rfs_fs_inodes (fs)) + *inodes = rtems_rfs_fs_inodes (fs); + + return 0; +} + diff --git a/cpukit/libfs/src/rfs/rtems-rfs-group.h b/cpukit/libfs/src/rfs/rtems-rfs-group.h index 3adf736e2f..0823612c0d 100644 --- a/cpukit/libfs/src/rfs/rtems-rfs-group.h +++ b/cpukit/libfs/src/rfs/rtems-rfs-group.h @@ -148,4 +148,16 @@ int rtems_rfs_group_bitmap_test (rtems_rfs_file_system* fs, rtems_rfs_bitmap_bit no, bool* state); +/** + * Determine the number of blocks and inodes used. + * + * @param fs The file system data. + * @prarm blocks The number of blocks used. + * @param inodes The number of inodes used. + * @return int The error number (errno). No error if 0. + */ +int rtems_rfs_group_usage (rtems_rfs_file_system* fs, + size_t* blocks, + size_t* inodes); + #endif diff --git a/cpukit/libfs/src/rfs/rtems-rfs-rtems.c b/cpukit/libfs/src/rfs/rtems-rfs-rtems.c index 60f3fdf429..4c0f8d5ff9 100644 --- a/cpukit/libfs/src/rfs/rtems-rfs-rtems.c +++ b/cpukit/libfs/src/rfs/rtems-rfs-rtems.c @@ -1101,12 +1101,21 @@ rtems_rfs_rtems_statvfs (rtems_filesystem_location_info_t* pathloc, struct statvfs* sb) { rtems_rfs_file_system* fs = rtems_rfs_rtems_pathloc_dev (pathloc); + size_t blocks; + size_t inodes; - sb->f_bsize = rtems_rfs_fs_block_size (fs); - sb->f_frsize = rtems_rfs_fs_media_block_size (fs); - sb->f_blocks = rtems_rfs_fs_media_blocks (fs); - - sb->f_fsid = RTEMS_RFS_SB_MAGIC; + rtems_rfs_group_usage (fs, &blocks, &inodes); + + sb->f_bsize = rtems_rfs_fs_block_size (fs); + sb->f_frsize = rtems_rfs_fs_media_block_size (fs); + sb->f_blocks = rtems_rfs_fs_media_blocks (fs); + sb->f_bfree = rtems_rfs_fs_blocks (fs) - blocks; + sb->f_bavail = sb->f_bfree; + sb->f_files = rtems_rfs_fs_inodes (fs) - inodes; + sb->f_ffree = sb->f_files; + sb->f_favail = sb->f_files; + sb->f_fsid = RTEMS_RFS_SB_MAGIC; + sb->f_flag = rtems_rfs_fs_flags (fs); sb->f_namemax = rtems_rfs_fs_max_name (fs); return 0; diff --git a/cpukit/libfs/src/rfs/rtems-rfs-shell.c b/cpukit/libfs/src/rfs/rtems-rfs-shell.c index 1bc979a1ea..afec832af9 100644 --- a/cpukit/libfs/src/rfs/rtems-rfs-shell.c +++ b/cpukit/libfs/src/rfs/rtems-rfs-shell.c @@ -140,20 +140,8 @@ rtems_rfs_shell_data (rtems_rfs_file_system* fs, int argc, char *argv[]) rtems_rfs_shell_lock_rfs (fs); - blocks = 0; - inodes = 0; + rtems_rfs_group_usage (fs, &blocks, &inodes); - for (g = 0; g < fs->group_count; g++) - { - rtems_rfs_group* group = &fs->groups[g]; - blocks += - rtems_rfs_bitmap_map_size(&group->block_bitmap) - - rtems_rfs_bitmap_map_free (&group->block_bitmap); - inodes += - rtems_rfs_bitmap_map_size (&group->inode_bitmap) - - rtems_rfs_bitmap_map_free (&group->inode_bitmap); - } - rtems_rfs_shell_unlock_rfs (fs); bpcent = (blocks * 1000) / rtems_rfs_fs_blocks (fs); |