All of lore.kernel.org
 help / color / mirror / Atom feed
* UBIFS recovery truncates file to zero size
@ 2009-03-11  9:16 Iram Shahzad
  2009-03-11  9:51 ` Brijesh Singh
  2009-03-11 18:13 ` Reuben Dowle
  0 siblings, 2 replies; 10+ messages in thread
From: Iram Shahzad @ 2009-03-11  9:16 UTC (permalink / raw)
  To: linux-mtd

Hi

I am having the following problem with UBIFS (Linux 2.6.25 + ubifs-v2.6.25).
Please could you tell me if this is a known issue.

Problem
    If the power is switched off abruptly while a file is being written,
    in the next boot the contents of the file is lost. That is, the file
    becomes zero sized. The problem is reproducable.

Thanks in advance.
Iram

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: UBIFS recovery truncates file to zero size
  2009-03-11  9:16 UBIFS recovery truncates file to zero size Iram Shahzad
@ 2009-03-11  9:51 ` Brijesh Singh
  2009-03-11 10:31   ` Adrian Hunter
  2009-03-11 18:13 ` Reuben Dowle
  1 sibling, 1 reply; 10+ messages in thread
From: Brijesh Singh @ 2009-03-11  9:51 UTC (permalink / raw)
  To: Iram Shahzad; +Cc: linux-mtd

Hi,

On Wed, Mar 11, 2009 at 2:46 PM, Iram Shahzad
<iram.shahzad@jp.fujitsu.com> wrote:
> Hi
>
> I am having the following problem with UBIFS (Linux 2.6.25 + ubifs-v2.6.25).
> Please could you tell me if this is a known issue.
>
> Problem
>   If the power is switched off abruptly while a file is being written,
>   in the next boot the contents of the file is lost. That is, the file
>   becomes zero sized. The problem is reproducable.

May be because of write-back support.  Try disabling it.mount with sync option.

For details:
http://www.linux-mtd.infradead.org/doc/ubifs.html#L_writeback

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: UBIFS recovery truncates file to zero size
  2009-03-11  9:51 ` Brijesh Singh
@ 2009-03-11 10:31   ` Adrian Hunter
  0 siblings, 0 replies; 10+ messages in thread
From: Adrian Hunter @ 2009-03-11 10:31 UTC (permalink / raw)
  To: Iram Shahzad; +Cc: linux-mtd, Brijesh Singh

Brijesh Singh wrote:
> On Wed, Mar 11, 2009 at 2:46 PM, Iram Shahzad
> <iram.shahzad@jp.fujitsu.com> wrote:
>> I am having the following problem with UBIFS (Linux 2.6.25 + ubifs-v2.6.25).
>> Please could you tell me if this is a known issue.
>>
>> Problem
>>   If the power is switched off abruptly while a file is being written,
>>   in the next boot the contents of the file is lost. That is, the file
>>   becomes zero sized. The problem is reproducable.
> 
> May be because of write-back support.  Try disabling it.mount with sync option.

There was also a problem with busybox implementation of vi which truncated
the file to zero length.  See revision 21928 here:

	http://sources.busybox.net/index.py/trunk/busybox/editors/vi.c?view=log&pathrev=22471

^ permalink raw reply	[flat|nested] 10+ messages in thread

* RE: UBIFS recovery truncates file to zero size
  2009-03-11  9:16 UBIFS recovery truncates file to zero size Iram Shahzad
  2009-03-11  9:51 ` Brijesh Singh
@ 2009-03-11 18:13 ` Reuben Dowle
  2009-03-12  2:44   ` Iram Shahzad
  1 sibling, 1 reply; 10+ messages in thread
From: Reuben Dowle @ 2009-03-11 18:13 UTC (permalink / raw)
  To: Iram Shahzad, linux-mtd

The file is kept in the kernel write-back cache, until it is synced by
the user (eg. A sync() or fsync() call) or the kernel decides to write
it back (seems to be after 30 seconds by default).

You can disable write back cache, but if you make lots of small writes
to the file this will cause more wear on the flash. It is better to call
fsync() when you want the data to be saved.

See http://www.linux-mtd.infradead.org/doc/ubifs.html#L_writeback

Also be carefull to note the comment about making your updates atomic.
Just adding the odd fsync() is not going to truely guarenteed your data
is not going to get fried.

Reuben

-----Original Message-----
From: linux-mtd-bounces@lists.infradead.org
[mailto:linux-mtd-bounces@lists.infradead.org] On Behalf Of Iram Shahzad
Sent: Wednesday, 11 March 2009 10:16 p.m.
To: linux-mtd@lists.infradead.org
Subject: UBIFS recovery truncates file to zero size

Hi

I am having the following problem with UBIFS (Linux 2.6.25 +
ubifs-v2.6.25).
Please could you tell me if this is a known issue.

Problem
    If the power is switched off abruptly while a file is being written,
    in the next boot the contents of the file is lost. That is, the file
    becomes zero sized. The problem is reproducable.

Thanks in advance.
Iram



______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: UBIFS recovery truncates file to zero size
  2009-03-11 18:13 ` Reuben Dowle
@ 2009-03-12  2:44   ` Iram Shahzad
  2009-03-12  8:26     ` Adrian Hunter
  0 siblings, 1 reply; 10+ messages in thread
From: Iram Shahzad @ 2009-03-12  2:44 UTC (permalink / raw)
  To: linux-mtd

Thanks Brijesh, Adrian, Reuben for your replies.

I understood, but please let me confirm further.

For the write back enabled case, I was expecting the
following behaviour:
    power went down before the file is sync-ed, so
    on the next booting the file will be in its old state,
    that is it will contain the contents which it had before
    this write.

But instead of being in the old state, it becomes empty file.
Is this really expected(correct) behaviour?

Thanks
Iram

----- Original Message ----- 
From: "Reuben Dowle" <Reuben.Dowle@navico.com>
To: "Iram Shahzad" <iram.shahzad@jp.fujitsu.com>; 
<linux-mtd@lists.infradead.org>
Sent: Thursday, March 12, 2009 3:13 AM
Subject: RE: UBIFS recovery truncates file to zero size


> The file is kept in the kernel write-back cache, until it is synced by
> the user (eg. A sync() or fsync() call) or the kernel decides to write
> it back (seems to be after 30 seconds by default).
>
> You can disable write back cache, but if you make lots of small writes
> to the file this will cause more wear on the flash. It is better to call
> fsync() when you want the data to be saved.
>
> See http://www.linux-mtd.infradead.org/doc/ubifs.html#L_writeback
>
> Also be carefull to note the comment about making your updates atomic.
> Just adding the odd fsync() is not going to truely guarenteed your data
> is not going to get fried.
>
> Reuben
>
> -----Original Message-----
> From: linux-mtd-bounces@lists.infradead.org
> [mailto:linux-mtd-bounces@lists.infradead.org] On Behalf Of Iram Shahzad
> Sent: Wednesday, 11 March 2009 10:16 p.m.
> To: linux-mtd@lists.infradead.org
> Subject: UBIFS recovery truncates file to zero size
>
> Hi
>
> I am having the following problem with UBIFS (Linux 2.6.25 +
> ubifs-v2.6.25).
> Please could you tell me if this is a known issue.
>
> Problem
>    If the power is switched off abruptly while a file is being written,
>    in the next boot the contents of the file is lost. That is, the file
>    becomes zero sized. The problem is reproducable.
>
> Thanks in advance.
> Iram
>
>
>
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/
>
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: UBIFS recovery truncates file to zero size
  2009-03-12  2:44   ` Iram Shahzad
@ 2009-03-12  8:26     ` Adrian Hunter
  2009-03-12  8:49       ` Iram Shahzad
  0 siblings, 1 reply; 10+ messages in thread
From: Adrian Hunter @ 2009-03-12  8:26 UTC (permalink / raw)
  To: Iram Shahzad; +Cc: linux-mtd

Iram Shahzad wrote:
> Thanks Brijesh, Adrian, Reuben for your replies.
> 
> I understood, but please let me confirm further.
> 
> For the write back enabled case, I was expecting the
> following behaviour:
>     power went down before the file is sync-ed, so
>     on the next booting the file will be in its old state,
>     that is it will contain the contents which it had before
>     this write.
> 
> But instead of being in the old state, it becomes empty file.
> Is this really expected(correct) behaviour?

No.  How were you updating the file?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: UBIFS recovery truncates file to zero size
  2009-03-12  8:26     ` Adrian Hunter
@ 2009-03-12  8:49       ` Iram Shahzad
  2009-03-12 10:25         ` Adrian Hunter
                           ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Iram Shahzad @ 2009-03-12  8:49 UTC (permalink / raw)
  To: linux-mtd

>> For the write back enabled case, I was expecting the
>> following behaviour:
>>     power went down before the file is sync-ed, so
>>     on the next booting the file will be in its old state,
>>     that is it will contain the contents which it had before
>>     this write.
>> 
>> But instead of being in the old state, it becomes empty file.
>> Is this really expected(correct) behaviour?
> 
> No.  How were you updating the file?

The file is updated by a Java application in the following way.

-----
FileOutputStream str = new FileOutputStream(aFilename);
// some write here
str.flush();
str.close();
-----

I switch off the power after confirming that the str.close() has been
executed.

P.S:
If I add str.getFD().sync(); after the str.flush(), the file looks good in
the next boot. However my question still remains for the case
when I do not call str.getFD().sync:
"why the file becomes empty rather than being in its old state?".

Thanks
Iram

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: UBIFS recovery truncates file to zero size
  2009-03-12  8:49       ` Iram Shahzad
@ 2009-03-12 10:25         ` Adrian Hunter
  2009-03-12 11:08         ` Artem Bityutskiy
  2009-03-12 11:11         ` Jamie Lokier
  2 siblings, 0 replies; 10+ messages in thread
From: Adrian Hunter @ 2009-03-12 10:25 UTC (permalink / raw)
  To: Iram Shahzad; +Cc: linux-mtd

Iram Shahzad wrote:
>>> For the write back enabled case, I was expecting the
>>> following behaviour:
>>>     power went down before the file is sync-ed, so
>>>     on the next booting the file will be in its old state,
>>>     that is it will contain the contents which it had before
>>>     this write.
>>>
>>> But instead of being in the old state, it becomes empty file.
>>> Is this really expected(correct) behaviour?
>> No.  How were you updating the file?
> 
> The file is updated by a Java application in the following way.
> 
> -----
> FileOutputStream str = new FileOutputStream(aFilename);
> // some write here
> str.flush();
> str.close();
> -----
> 
> I switch off the power after confirming that the str.close() has been
> executed.
> 
> P.S:
> If I add str.getFD().sync(); after the str.flush(), the file looks good in
> the next boot. However my question still remains for the case
> when I do not call str.getFD().sync:
> "why the file becomes empty rather than being in its old state?".
> 
> Thanks
> Iram
> 
> 
> 
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/
> 

What makes you think that:

FileOutputStream str = new FileOutputStream(aFilename);

does not truncate the file to zero length?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: UBIFS recovery truncates file to zero size
  2009-03-12  8:49       ` Iram Shahzad
  2009-03-12 10:25         ` Adrian Hunter
@ 2009-03-12 11:08         ` Artem Bityutskiy
  2009-03-12 11:11         ` Jamie Lokier
  2 siblings, 0 replies; 10+ messages in thread
From: Artem Bityutskiy @ 2009-03-12 11:08 UTC (permalink / raw)
  To: Iram Shahzad; +Cc: linux-mtd

On Thu, 2009-03-12 at 17:49 +0900, Iram Shahzad wrote:
> >> For the write back enabled case, I was expecting the
> >> following behaviour:
> >>     power went down before the file is sync-ed, so
> >>     on the next booting the file will be in its old state,
> >>     that is it will contain the contents which it had before
> >>     this write.
> >> 
> >> But instead of being in the old state, it becomes empty file.
> >> Is this really expected(correct) behaviour?
> > 
> > No.  How were you updating the file?
> 
> The file is updated by a Java application in the following way.
> 
> -----
> FileOutputStream str = new FileOutputStream(aFilename);
> // some write here
> str.flush();
> str.close();
> -----

Please, check whether str.flush()/str.close() cause fsync()/sync().

-- 
Best regards,
Artem Bityutskiy (Битюцкий Артём)

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: UBIFS recovery truncates file to zero size
  2009-03-12  8:49       ` Iram Shahzad
  2009-03-12 10:25         ` Adrian Hunter
  2009-03-12 11:08         ` Artem Bityutskiy
@ 2009-03-12 11:11         ` Jamie Lokier
  2 siblings, 0 replies; 10+ messages in thread
From: Jamie Lokier @ 2009-03-12 11:11 UTC (permalink / raw)
  To: Iram Shahzad; +Cc: linux-mtd

Iram Shahzad wrote:
> >>For the write back enabled case, I was expecting the
> >>following behaviour:
> >>    power went down before the file is sync-ed, so
> >>    on the next booting the file will be in its old state,
> >>    that is it will contain the contents which it had before
> >>    this write.
> >>
> >>But instead of being in the old state, it becomes empty file.
> >>Is this really expected(correct) behaviour?
> >
> >No.  How were you updating the file?
> 
> The file is updated by a Java application in the following way.
> 
> -----
> FileOutputStream str = new FileOutputStream(aFilename);

"new FileOutputStream" truncates the file.

> I switch off the power after confirming that the str.close() has been
> executed.
> 
> P.S:
> If I add str.getFD().sync(); after the str.flush(), the file looks good in
> the next boot. However my question still remains for the case
> when I do not call str.getFD().sync:
> "why the file becomes empty rather than being in its old state?".

str.getFD().sync() won't be reliable if you lose power _between_ "new
FileOutputStream" and sync().  If that happens, the file may still be
truncated.

If you are just appending data, use "new FileOutputStream(aFileName,
true)", write, flush, sync, close.

If you are changing the file contents, instead write to a temporary
file in the same directory, then sync the temporary file (after
flush), then do an atomic rename over the original file, then open the
directory and sync that somehow.

-- Jamie

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2009-03-12 11:12 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-03-11  9:16 UBIFS recovery truncates file to zero size Iram Shahzad
2009-03-11  9:51 ` Brijesh Singh
2009-03-11 10:31   ` Adrian Hunter
2009-03-11 18:13 ` Reuben Dowle
2009-03-12  2:44   ` Iram Shahzad
2009-03-12  8:26     ` Adrian Hunter
2009-03-12  8:49       ` Iram Shahzad
2009-03-12 10:25         ` Adrian Hunter
2009-03-12 11:08         ` Artem Bityutskiy
2009-03-12 11:11         ` Jamie Lokier

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.