[rtems commit] For PR 2162 - RFS File System - statvfs reports 1 block free

Chris Johns chrisj at rtems.org
Thu Dec 19 00:28:46 UTC 2013


Module:    rtems
Branch:    master
Commit:    9b48dc67ed57f31c00b2e4351a30fac947472899
Changeset: http://git.rtems.org/rtems/commit/?id=9b48dc67ed57f31c00b2e4351a30fac947472899

Author:    Alan Cudmore <alan.cudmore at gmail.com>
Date:      Wed Dec 18 12:37:47 2013 -0500

For PR 2162 - RFS File System - statvfs reports 1 block free

This is for the RFS file system. The statvfs call reports 1 block free
when the file system is full because it does not account for the superblock
in its calculation of free blocks.
This is a simple fix that adjusts the number of blocks reported to account
for the superblock. We may want to wait for a more complete solution such
as locating the superblock in each group.

---

 cpukit/libfs/src/rfs/rtems-rfs-rtems.c |    2 +-
 cpukit/libfs/src/rfs/rtems-rfs-shell.c |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/cpukit/libfs/src/rfs/rtems-rfs-rtems.c b/cpukit/libfs/src/rfs/rtems-rfs-rtems.c
index e199ffe..d95a0f5 100644
--- a/cpukit/libfs/src/rfs/rtems-rfs-rtems.c
+++ b/cpukit/libfs/src/rfs/rtems-rfs-rtems.c
@@ -753,7 +753,7 @@ rtems_rfs_rtems_statvfs (
   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_bfree   = rtems_rfs_fs_blocks (fs) - blocks - 1; /* do not count the superblock */
   sb->f_bavail  = sb->f_bfree;
   sb->f_files   = rtems_rfs_fs_inodes (fs);
   sb->f_ffree   = rtems_rfs_fs_inodes (fs) - inodes;
diff --git a/cpukit/libfs/src/rfs/rtems-rfs-shell.c b/cpukit/libfs/src/rfs/rtems-rfs-shell.c
index 96c0c17..b92041a 100644
--- a/cpukit/libfs/src/rfs/rtems-rfs-shell.c
+++ b/cpukit/libfs/src/rfs/rtems-rfs-shell.c
@@ -149,7 +149,7 @@ rtems_rfs_shell_data (rtems_rfs_file_system* fs, int argc, char *argv[])
 
   rtems_rfs_shell_unlock_rfs (fs);
 
-  bpcent = (blocks * 1000) / rtems_rfs_fs_blocks (fs);
+  bpcent = (blocks * 1000) / (rtems_rfs_fs_blocks (fs) - 1);
   ipcent = (inodes * 1000) / rtems_rfs_fs_inodes (fs);
 
   printf ("       blocks used: %zd (%d.%d%%)\n",




More information about the vc mailing list