[rtems commit] dosfs: Fix for no space left on device condition

Sebastian Huber sebh at rtems.org
Mon Jun 4 07:51:40 UTC 2012


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

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Sun Jun  3 13:06:51 2012 +0200

dosfs: Fix for no space left on device condition

The file size was wrong in the no space left on device condition.  This
resulted in turn in a read of an invalid block which lead to an EIO
error status.

---

 cpukit/libfs/src/dosfs/fat_file.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/cpukit/libfs/src/dosfs/fat_file.c b/cpukit/libfs/src/dosfs/fat_file.c
index b6a466e..88f8e5b 100644
--- a/cpukit/libfs/src/dosfs/fat_file.c
+++ b/cpukit/libfs/src/dosfs/fat_file.c
@@ -552,9 +552,10 @@ fat_file_extend(
 
     /*  check wether we satisfied request for 'cls2add' clusters */
     if (cls2add != cls_added)
-        *a_length = new_length -
-                    ((cls2add - cls_added - 1) << fs_info->vol.bpc_log2) -
-                    (bytes2add & (fs_info->vol.bpc - 1));
+    {
+        new_length -= bytes2add & (fs_info->vol.bpc - 1);
+        new_length -= (cls2add - cls_added) << fs_info->vol.bpc_log2;
+    }
 
     /* add new chain to the end of existed */
     if ( fat_fd->fat_file_size == 0 )
@@ -603,6 +604,7 @@ fat_file_extend(
         }
     }
 
+    *a_length = new_length;
     fat_fd->fat_file_size = new_length;
 
     return RC_OK;




More information about the vc mailing list