summaryrefslogtreecommitdiffstats
path: root/cpukit/libfs
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2010-02-22 23:02:41 +0000
committerChris Johns <chrisj@rtems.org>2010-02-22 23:02:41 +0000
commit59762963b2c74d67b5db42ad7589e69b706af067 (patch)
tree57e0c1407d5fd2894f641365d5610a56ec38bd2f /cpukit/libfs
parent2010-02-20 Chris Johns <chrisj@rtems.org> (diff)
downloadrtems-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.c2
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-file-system.h6
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-group.c30
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-group.h12
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-rtems.c19
-rw-r--r--cpukit/libfs/src/rfs/rtems-rfs-shell.c14
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);