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.
This commit is contained in:
Chris Johns
2010-02-22 23:02:41 +00:00
parent 5268642f86
commit 59762963b2
7 changed files with 80 additions and 19 deletions

View File

@@ -1,3 +1,19 @@
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.
2010-02-20 Chris Johns <chrisj@rtems.org>
* libfs/src/dosfs/fat.c, libfs/src/rfs/rtems-rfs-buffer.c: Block

View File

@@ -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;
}

View File

@@ -245,6 +245,12 @@ struct rtems_rfs_file_system_t
void* user;
};
/**
* 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 ?
*

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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;

View File

@@ -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);