(Fwd) Re: DOSFS bug fixes, IDE drivers and sample released
Angelo Fraietta
angelo_f at bigpond.com
Fri May 23 00:06:31 UTC 2003
Victor V. Vengerov wrote:
> Angelo,
>
> I beleive, you need to use fflush(fp) before fsync.
> libc has own buffers associated with stream. These
> buffers need to be flushed to the disk buffers before
> disk buffers actually written to the disk.
This worked
>
> Alternatively, you may use setvbuf() to disable libc
> buffering.
>
> Regards,
> Victor
>
> Angelo Fraietta wrote:
>
>> fsync does not seem to be working as I think it should.
>>
>> I have a large file that already exists on the drive.
>>
>> I do the following:
>> File* fp = fopen (filename, "w+b");
>>
>> if (fp)
>> {
>> char c = 'a';
>> fwrite (&a, 1, 1, fp);
>> fsync(fileno(fp));
>> fclose (fp);
>> restartRtems();
>> }
>>
>> The file on disk remains unchanged
>>
>> Eugeny S. Mints wrote:
>>
>>> On Wed, 16 Apr 2003, Joel Sherrill wrote:
>>>
>>>
>>>
>>>> "Eugeny S. Mints" wrote:
>>>>
>>>>
>>>>> On Wed, 16 Apr 2003, Joel Sherrill wrote:
>>>>>
>>>>>
>>>>>
>>>>>> Chris Caudle wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>> I have found that listing the directory after closing the file
>>>>>>>> seems to do the trick. It must purge the buffers to the disk.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> I haven't looked at the DOSFS code yet, does it have a sync() or
>>>>>>> fsync() function?
>>>>>>> If the file system keeps the allocation table cached in memory,
>>>>>>> you may need to flush the allocation table to the storage
>>>>>>> device, especially if you are shutting down power on the RTEMS
>>>>>>> system and moving the storage device to a different machine (or
>>>>>>> just re-booting into Windows, Linux, MacOS etc. on the same
>>>>>>> machine).
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> Or at least a flush() on the file itself?
>>>>>>
>>>>>
>>>>> Sorry, that I was silent for a long time but I was away from
>>>>> my mail box.
>>>>>
>>>>> As to sync/fsync/flush - sync call is implemented in DOSFS.
>>>>> I suppose that Angelo needs UNmount the volume to achieve
>>>>> his goals. During 'unmount' a volume is automatically
>>>>> syncronized.
>>>>>
>>>>
>>>> I understand that it has to sync when unmounting but shouldn't
>>>> sync work even with it staying mounted? I think the issue here
>>>> was simply that he was surprised it wasn't written until he closed.
>>>> [NOTE: This is standard behavior for many systems so is not
>>>> unexpected.]
>>>>
>>>> So the question is.. if I have an open file and want to ensure its
>>>> contents are written to disk, is it sufficient to sync() or should
>>>> it flush() and sync() and what? I think unmounting is a bit too
>>>> heavy handed because it potentially impacts other tasks.
>>>>
>>>
>>>
>>> If you have an open file and want to ensure its
>>> contents are written to disk you shoul sync() it - and this
>>> sync call is implemented in DOSFS.
>>>
>>>
>>>
>>>>>> Not to get me started on a tangent but my disertation included some
>>>>>> thought on the idea
>>>>>> that different embedded systems needed different disk caching and
>>>>>> scheduling algorithms.
>>>>>> Ideally those should be selectable on a per-file basis but at a
>>>>>> partition level would be
>>>>>> acceptable. For example, a write-only log file should have data
>>>>>> kept
>>>>>> only long enough to
>>>>>> get it to disk but a sequentially read file could use read-ahead and
>>>>>> discard as soon as
>>>>>> the application read the data. With some (intelligent) hints
>>>>>> from the
>>>>>> application,
>>>>>> the algorithms could be better selected.
>>>>>>
>>>>>>
>>>>>>
>>>>>>> -- Chris Caudle
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> Eugeny S. Mints
>>>>> OKTET Ltd.
>>>>> 1 Ulianovskaya st., Petergof, St.Petersburg, 198904 Russia
>>>>> Phone: +7(812)428-4384 Fax: +7(812)327-2246
>>>>> mailto:Eugeny.Mints at oktet.ru
>>>>>
>>>>
>>>
>>>
>>>
>>
>> --
>> Angelo Fraietta
>>
>> PO Box 859
>> Hamilton NSW 2303
>>
>> Home Page
>>
>>
>> http://www.users.bigpond.com/angelo_f/
>>
>> There are those who seek knowledge for the sake of knowledge - that
>> is CURIOSITY
>> There are those who seek knowledge to be known by others - that is
>> VANITY
>> There are those who seek knowledge in order to serve - that is LOVE
>> Bernard of Clairvaux (1090 - 1153)
>>
>>
>
>
--
Angelo Fraietta
PO Box 859
Hamilton NSW 2303
Home Page
http://www.users.bigpond.com/angelo_f/
There are those who seek knowledge for the sake of knowledge - that is CURIOSITY
There are those who seek knowledge to be known by others - that is VANITY
There are those who seek knowledge in order to serve - that is LOVE
Bernard of Clairvaux (1090 - 1153)
More information about the users
mailing list