From 89dd2ec437d998aa617bc4a61258a0692e4721ff Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Sun, 3 Jun 2012 13:06:51 +0200 Subject: 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 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cpukit/libfs/src/dosfs/fat_file.c b/cpukit/libfs/src/dosfs/fat_file.c index 0cd5f286db..8452ee8491 100644 --- a/cpukit/libfs/src/dosfs/fat_file.c +++ b/cpukit/libfs/src/dosfs/fat_file.c @@ -532,9 +532,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 ) @@ -583,6 +584,7 @@ fat_file_extend( } } + *a_length = new_length; fat_fd->fat_file_size = new_length; return RC_OK; -- cgit v1.2.3