<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>MQX Software SolutionsのトピックRe: Howto flush MFS? (Use case: mfs onto ramdisk)</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163762#M1435</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sorry, I had an error in my application. The solution above works just fine.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 03 Jul 2012 16:32:15 GMT</pubDate>
    <dc:creator>aimozg</dc:creator>
    <dc:date>2012-07-03T16:32:15Z</dc:date>
    <item>
      <title>Howto flush MFS? (Use case: mfs onto ramdisk)</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163759#M1432</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi all,&lt;BR /&gt;Assume the following use case:&lt;BR /&gt;1. setup MFS on ramdisk&lt;BR /&gt;2. open file, stored on MFS, and update the content&lt;BR /&gt;3. readout ramdisk raw data&lt;BR /&gt;In step 3 the content of ramdisk is unchanged. Why? Is where a double buffer or so for storing the file content?&lt;/P&gt;&lt;P&gt;I need up-to-date raw data to transmit it over USB device periodically.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The stripped (i.e. error handling and remarks are deleted) setup code is as follows:&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;_io_mem_install ( "ramdisk:", NULL, DISK_SIZE );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;ramdisk_handle = fopen ( "ramdisk:", 0 );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;_io_mfs_install ( ramdisk_handle, "ram:", 0 );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;fat_handle = fopen ( "ram:", NULL );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;ioctl ( fat_handle, IO_IOCTL_DEFAULT_FORMAT, NULL );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;cache_mode = MFS_WRITE_THROUGH_CACHE;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;_io_ioctl ( fat_handle, IO_IOCTL_SET_FAT_CACHE_MODE, &amp;amp;cache_mode );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;_io_ioctl ( fat_handle, IO_IOCTL_SET_WRITE_CACHE_MODE, &amp;amp;cache_mode );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;_io_ioctl ( fat_handle, IO_IOCTL_FAT_CACHE_OFF, NULL );&lt;/FONT&gt;&lt;BR /&gt;&lt;BR /&gt;2. Update the file content (stripped code):&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;handle = fopen ( filename, "w+" );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;fseek ( handle, 0, IO_SEEK_SET );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;write ( handle, txt_buf, strlen(txt_buf) );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;fflush ( handle );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;fclose ( handle );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;_io_ioctl ( fat_handle, IO_IOCTL_FLUSH_FAT, NULL );&lt;/FONT&gt;&lt;BR /&gt;&lt;BR /&gt;3. readout the raw data:&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;fseek ( ramdisk_handle, lba_data_ptr-&amp;gt;offset, IO_SEEK_SET );&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="andale mono,times"&gt;read ( ramdisk_handle, lba_data_ptr-&amp;gt;buff_ptr, lba_data_ptr-&amp;gt;size );&lt;/FONT&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 16 May 2012 14:56:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163759#M1432</guid>
      <dc:creator>Fabi</dc:creator>
      <dc:date>2012-05-16T14:56:50Z</dc:date>
    </item>
    <item>
      <title>Re: Howto flush MFS? (Use case: mfs onto ramdisk)</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163760#M1433</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Helli Fabi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I had similar problem - I was writing files to SD card which could be ejected or power could be turned off at any time, so I needed flushing. The same operations you used didn't work, when I create file and write data it appeared as 0 bytes size, and missed chunks were found with CHKDSK.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a workaround by modifying MFS source code.&lt;/P&gt;&lt;P&gt;At the end of mfs_write.c:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;if ( fd_ptr-&amp;gt;LOCATION &amp;gt; file_size )&lt;/FONT&gt;&lt;BR /&gt; &lt;FONT face="courier new,courier"&gt;{&lt;/FONT&gt;&lt;BR /&gt; &lt;FONT face="courier new,courier"&gt;fd_ptr-&amp;gt;SIZE = fd_ptr-&amp;gt;LOCATION;&lt;/FONT&gt;&lt;BR /&gt; &lt;FONT face="courier new,courier"&gt;htodl(handle_ptr-&amp;gt;DIR_ENTRY.FILE_SIZE,fd_ptr-&amp;gt;SIZE);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;handle_ptr-&amp;gt;TOUCHED = 1;&lt;/FONT&gt;&lt;BR /&gt; &lt;FONT face="courier new,courier"&gt;}&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#008000"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;/// add this:&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#008000"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;if (handle_ptr-&amp;gt;TOUCHED)&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#008000"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;{&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#008000"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;drive_ptr-&amp;gt;DIR_SECTOR_DIRTY = TRUE;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT color="#008000"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;}&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#008000"&gt;&lt;STRONG&gt;&lt;FONT face="courier new,courier"&gt;/// ^^^ add this&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="courier new,courier"&gt;error = MFS_unlock(drive_ptr, FALSE);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If directory sector corresponding to file won't ve marked as dirty, its updated contents won't be flushed (they will be saved only on fclose()). So file will be listed as zero size with no first sectors (its data will be in lost chain of sectors that could be found with CHKDSK).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;With this patch the FAT is valid even when I eject SD card in the middle of write; the last data written are saved.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am using MQX 3.8 with TWR-K60F120M.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Jul 2012 17:52:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163760#M1433</guid>
      <dc:creator>aimozg</dc:creator>
      <dc:date>2012-07-02T17:52:46Z</dc:date>
    </item>
    <item>
      <title>Re: Howto flush MFS? (Use case: mfs onto ramdisk)</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163761#M1434</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;... And then it stopped working (I get 0 size files). Investigating.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Jul 2012 13:54:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163761#M1434</guid>
      <dc:creator>aimozg</dc:creator>
      <dc:date>2012-07-03T13:54:33Z</dc:date>
    </item>
    <item>
      <title>Re: Howto flush MFS? (Use case: mfs onto ramdisk)</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163762#M1435</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Sorry, I had an error in my application. The solution above works just fine.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 03 Jul 2012 16:32:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163762#M1435</guid>
      <dc:creator>aimozg</dc:creator>
      <dc:date>2012-07-03T16:32:15Z</dc:date>
    </item>
    <item>
      <title>Re: Howto flush MFS? (Use case: mfs onto ramdisk)</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163763#M1436</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I had the same issue with 0Bytes size if I don't do fclose(file_descriptor). I tried your fix but it still gives the same results. I did try with both MQX3.8 and MQX4.0 ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think it's not a cache issue because I disabled it with:&lt;/P&gt;&lt;P&gt;param = MFS_WRITE_THROUGH_CACHE;&lt;/P&gt;&lt;P&gt;error_code = ioctl(filesystem_handle, IO_IOCTL_SET_FAT_CACHE_MODE, &amp;amp;param);&lt;/P&gt;&lt;P&gt;param = MFS_WRITE_THROUGH_CACHE;&lt;/P&gt;&lt;P&gt;error_code = ioctl(filesystem_handle, IO_IOCTL_SET_WRITE_CACHE_MODE, &amp;amp;param);&lt;/P&gt;&lt;P&gt;error_code = ioctl(filesystem_handle, IO_IOCTL_FAT_CACHE_OFF, NULL);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Without cache, when I step into fflush(fd_ptr), I run MFS_Flush_directory_sector_buffer and I have drive_ptr-&amp;gt;DIR_SECTOR_DIRTY set to FALSE. However if I set caches options to MIXED_MODE (or WRITE_BACK), I have it set to TRUE and I run MFS_Write_device_sector(...). fflush(fd_ptr) returns no error. However if I remove the SD card at this point, I still have a file with 0 bytes... &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The only difference I can see with fclose is that it runs MFS_Update_entry before the flush.&lt;/P&gt;&lt;P&gt;the dosfsck (linux utility) shows this:&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;emilien@Helferi:~$ sudo dosfsck -v /dev/sdd1&lt;/P&gt;&lt;P&gt;dosfsck 3.0.9 (31 Jan 2010)&lt;/P&gt;&lt;P&gt;dosfsck 3.0.9, 31 Jan 2010, FAT32, LFN&lt;/P&gt;&lt;P&gt;Checking we can access the last sector of the filesystem&lt;/P&gt;&lt;P&gt;Boot sector contents:&lt;/P&gt;&lt;P&gt;System ID "MFS30000"&lt;/P&gt;&lt;P&gt;Media byte 0xf8 (hard disk)&lt;/P&gt;&lt;P&gt;512 bytes per logical sector&lt;/P&gt;&lt;P&gt;16384 bytes per cluster&lt;/P&gt;&lt;P&gt;32 reserved sectors&lt;/P&gt;&lt;P&gt;First FAT starts at byte 16384 (sector 32)&lt;/P&gt;&lt;P&gt;2 FATs, 32 bit entries&lt;/P&gt;&lt;P&gt;7814144 bytes per FAT (= 15262 sectors)&lt;/P&gt;&lt;P&gt;Root directory start at cluster 2 (arbitrary size)&lt;/P&gt;&lt;P&gt;Data area starts at byte 15644672 (sector 30556)&lt;/P&gt;&lt;P&gt;1953028 data clusters (31998410752 bytes)&lt;/P&gt;&lt;P&gt;0 sectors/track, 0 heads&lt;/P&gt;&lt;P&gt;0 hidden sectors&lt;/P&gt;&lt;P&gt;62527456 sectors total&lt;/P&gt;&lt;P&gt;Checking for unused clusters.&lt;/P&gt;&lt;P&gt;Reclaimed 2 unused clusters (32768 bytes).&lt;/P&gt;&lt;P&gt;Checking free cluster summary.&lt;/P&gt;&lt;P&gt;Free cluster summary wrong (1953022 vs. really 1953024)&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="mce_paste_marker"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Dec 2012 14:00:33 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163763#M1436</guid>
      <dc:creator>emilien</dc:creator>
      <dc:date>2012-12-21T14:00:33Z</dc:date>
    </item>
    <item>
      <title>Re: Howto flush MFS? (Use case: mfs onto ramdisk)</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163764#M1437</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Fabi,&lt;/P&gt;&lt;P&gt;I was wondering if you managed to get this figured out.&amp;nbsp; I'm attempting much the same thing as you.&amp;nbsp; When looking at the file from the PC side of things, my file is only being updated every 12 seconds.&amp;nbsp;&amp;nbsp;&amp;nbsp; Seems like a strange number for updating.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Travis&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 21 Feb 2013 20:27:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163764#M1437</guid>
      <dc:creator>t_k</dc:creator>
      <dc:date>2013-02-21T20:27:03Z</dc:date>
    </item>
    <item>
      <title>Re: Howto flush MFS? (Use case: mfs onto ramdisk)</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163765#M1438</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;recently there have been numerous requests related to flushing of MFS buffers. There is a fix for this included in the upcoming release (4.0.1), please see the patch below.&lt;/P&gt;&lt;P&gt;However it is really not a very good idea to work with raw image of a filesystem while it is mounted.&lt;/P&gt;&lt;P&gt;If you export a mounted ramdrive over USB as a mass storage device, even if it is read only, data consistency cannot be guaranteed - there may be always buffering on the other side.&lt;/P&gt;&lt;P&gt;This is not an MFS limitation, the root of the problem is in the principle, thus I strongly discourage you doing this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;diff --git a/mfs/source/generic/mfs_init.c b/mfs/source/generic/mfs_init.c
index 7a1d2e7..71866a5 100644
--- a/mfs/source/generic/mfs_init.c
+++ b/mfs/source/generic/mfs_init.c
@@ -783,9 +783,35 @@ int_32 _io_mfs_ioctl
 #endif
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (result == MQX_OK)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MFS_lock(file_ptr, &amp;amp;drive_ptr);
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MFS_Flush_caches(drive_ptr);
-&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MFS_unlock(drive_ptr,FALSE);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MFS_HANDLE_PTR handle;
+
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* lock the filesystem and obtain file handle */
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = MFS_lock_handle(file_ptr, &amp;amp;drive_ptr, &amp;amp;handle);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (result == MFS_ERROR_INVALID_FILE_HANDLE)
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* file_ptr is not associated with a particular file, at least try to lock the filesystem */
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; handle = NULL;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = MFS_lock(file_ptr, &amp;amp;drive_ptr);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
+
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( result == MFS_NO_ERROR )
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (handle != NULL &amp;amp;&amp;amp; handle-&amp;gt;TOUCHED)
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIME_STRUCT time;
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DATE_STRUCT clk_time;
+
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _time_get(&amp;amp;time);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _time_to_date(&amp;amp;time, &amp;amp;clk_time);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NORMALIZE_DATE(&amp;amp;clk_time);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; htods(handle-&amp;gt;DIR_ENTRY.TIME, PACK_TIME(clk_time));
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; htods(handle-&amp;gt;DIR_ENTRY.DATE, PACK_DATE(clk_time));
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = MFS_Update_entry(drive_ptr, handle);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
+
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MFS_Flush_caches(drive_ptr);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MFS_unlock(drive_ptr,FALSE);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;
 
diff --git a/mfs/source/generic/mfs_write.c b/mfs/source/generic/mfs_write.c
index aa38dd1..d8f0372 100644
--- a/mfs/source/generic/mfs_write.c
+++ b/mfs/source/generic/mfs_write.c
@@ -343,6 +343,10 @@ uint_32&amp;nbsp; MFS_Write
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fd_ptr-&amp;gt;SIZE = location;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; htodl(handle_ptr-&amp;gt;DIR_ENTRY.FILE_SIZE, fd_ptr-&amp;gt;SIZE);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( (drive_ptr-&amp;gt;WRITE_CACHE_POLICY == MFS_WRITE_THROUGH_CACHE) &amp;amp;&amp;amp; (error == MFS_NO_ERROR) )
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error = MFS_Update_entry(drive_ptr, handle_ptr);
+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* LOCATION moves forward only by actual data written, the zero fill does not count */
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2020 09:10:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163765#M1438</guid>
      <dc:creator>pavel_chromy</dc:creator>
      <dc:date>2020-10-29T09:10:10Z</dc:date>
    </item>
    <item>
      <title>Re: Howto flush MFS? (Use case: mfs onto ramdisk)</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163766#M1439</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;we have been having problems with data corruption on sdcards also (other posts on the matter lead me here).&lt;/P&gt;&lt;P&gt;Just to confirm, does the latest release MQX 4.0.1 greatly improve the situation or do you recommend I still need to apply &lt;SPAN style="font-size: 10pt; line-height: 1.5em;"&gt;any of these patches to further minimize corruption issues in the event of power loss or reset?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Jon&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Jul 2013 15:28:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163766#M1439</guid>
      <dc:creator>jonny</dc:creator>
      <dc:date>2013-07-02T15:28:38Z</dc:date>
    </item>
    <item>
      <title>Re: Howto flush MFS? (Use case: mfs onto ramdisk)</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163767#M1440</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Jonathan,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;the flushing work as expected since 4.0.1, so if you do regular flushing then the risk of fs corruption is minimize.&lt;/P&gt;&lt;P&gt;There is certainly a chance for power loss to occur just during write operation or between write and flush but besides this it may be overall considered safe (if flushing occurs regularly).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards, Pavel&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Jul 2013 05:57:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163767#M1440</guid>
      <dc:creator>pavel_chromy</dc:creator>
      <dc:date>2013-07-03T05:57:03Z</dc:date>
    </item>
    <item>
      <title>Re: Howto flush MFS? (Use case: mfs onto ramdisk)</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163768#M1441</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Pawel,&lt;/P&gt;&lt;P&gt;I'm new to MFS. I'll be needing MFS to occasionally store log entries to a file.&lt;/P&gt;&lt;P&gt;If I apply the suggested flushing procedure, what's the worst case that can happen if power fails during a write operation: the entire file can get corrupted or only one or two entries?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards, Chris&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 06 May 2014 09:20:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/Howto-flush-MFS-Use-case-mfs-onto-ramdisk/m-p/163768#M1441</guid>
      <dc:creator>christianleeb</dc:creator>
      <dc:date>2014-05-06T09:20:37Z</dc:date>
    </item>
  </channel>
</rss>

