forked from Imagelibrary/rtems
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.
This commit is contained in:
@@ -552,9 +552,10 @@ fat_file_extend(
|
|||||||
|
|
||||||
/* check wether we satisfied request for 'cls2add' clusters */
|
/* check wether we satisfied request for 'cls2add' clusters */
|
||||||
if (cls2add != cls_added)
|
if (cls2add != cls_added)
|
||||||
*a_length = new_length -
|
{
|
||||||
((cls2add - cls_added - 1) << fs_info->vol.bpc_log2) -
|
new_length -= bytes2add & (fs_info->vol.bpc - 1);
|
||||||
(bytes2add & (fs_info->vol.bpc - 1));
|
new_length -= (cls2add - cls_added) << fs_info->vol.bpc_log2;
|
||||||
|
}
|
||||||
|
|
||||||
/* add new chain to the end of existed */
|
/* add new chain to the end of existed */
|
||||||
if ( fat_fd->fat_file_size == 0 )
|
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;
|
fat_fd->fat_file_size = new_length;
|
||||||
|
|
||||||
return RC_OK;
|
return RC_OK;
|
||||||
|
|||||||
Reference in New Issue
Block a user