From: Tanya Brokhman <tlinder@codeaurora.org>
To: Richard Weinberger <richard@nod.at>,
Artem Bityutskiy <dedekind1@gmail.com>,
"linux-mtd@lists.infradead.org" <linux-mtd@lists.infradead.org>,
Dolev Raviv <draviv@codeaurora.org>
Subject: Re: Synchronization in UBIFS (zero length files)
Date: Thu, 18 Dec 2014 16:53:45 +0200 [thread overview]
Message-ID: <5492EA79.7070107@codeaurora.org> (raw)
In-Reply-To: <5492B6B8.5010705@nod.at>
Hi Richard,
On 12/18/2014 1:12 PM, Richard Weinberger wrote:
> Tanya,
>
> Am 18.12.2014 um 09:34 schrieb Tanya Brokhman:
>> Hi Artem/Richard
>>
>> I've been looking into the "zero length files" issue in UBIFS and came across "Synchronization exceptions for buggy applications" @
>> http://www.linux-mtd.infradead.org/doc/ubifs.html#L_sync_semantics. This section concludes with:
>>
>> "We have plans to implement these features in UBIFS, but this has not been done yet. The problem is that UBI/MTD are fully synchronous and we cannot initiate asynchronous
>> write-out, so we'd have to synchronously write files on close/rename, which is slow. So implementing these features would require implementing asynchronous I/O in UBI, which is a
>> big job. But feel free to do this :-)."
>>
>> So two questions:
>> 1. was anything done in ubifs to handle file truncation and rename similar to ext4? Didn't find anything but afraid I might be missing something
>
> I don't think so.
>
>> 2. Not sure I understand why "implementing these features would require implementing asynchronous I/O in UBI". Could you please elaborate on this?
>
> If we'd do it synchronous it would horrible slow down UBIFS. That's why ext4 is doing it async.
Regarding EXT4. In Theodore Tso article about this
(http://thunk.org/tytso/blog/2009/03/12/delayed-allocation-and-the-zero-length-file-problem/)
he mentioned 3 ext4 patches that are handling this issue but I can't
find them by their git id:
"These three patches (with git id’s bf1b69c0, f32b730a, and 8411e347)
will cause a file to have any delayed allocation blocks to be allocated
immediately when a file is replaced."
Are you familiar with the patches in question?
> Having async IO for UBI is not trivial. Especially because of powercut safety.
Is it even doable? It seems to me that if we add async functionality to
ubi it will become not power-cut tolerant, unless we implement a journal
there (really don't want to do that....)
Another idea: from what I've read on the subject so far (this is new to
me so be patient), zero-length files can result due to several use cases
one of them is renaming files in the following scheme:
1. write to temp file A - written to cache
2. rename A to B - written directly to disk
3. eventually data is flashed to disk
If power cut occurs between #2 and #3 we end up with empty file B. But
what if we call fdatasync on A as part of the rename operation?
More specifically: I'm looking @ fs/ubifs/dir.c-ubifs_rename(). What if
we force sync of old_inode by:
1. err = old_inode->i_sb->s_op->write_inode(old_inode, NULL);
2. err = ubifs_sync_wbufs_by_inode(c, old_inode);
If I understand the code correctly it is basically the same as adding
fsync() in userspace after #2 above.
What do you think?
>
> Thanks,
> //richard
>
Thanks,
Tanya Brokhman
--
Qualcomm Israel, on behalf of Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
Forum, a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2014-12-18 14:54 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-18 8:34 Synchronization in UBIFS (zero length files) Tanya Brokhman
2014-12-18 11:12 ` Richard Weinberger
2014-12-18 14:53 ` Tanya Brokhman [this message]
2014-12-18 15:12 ` Richard Weinberger
2014-12-23 8:26 ` Tanya Brokhman
2014-12-23 9:24 ` Richard Weinberger
2014-12-23 9:48 ` Tanya Brokhman
2015-01-31 12:52 ` Artem Bityutskiy
2015-01-31 12:57 ` Bityutskiy, Artem
2015-02-01 8:39 ` Tanya Brokhman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5492EA79.7070107@codeaurora.org \
--to=tlinder@codeaurora.org \
--cc=dedekind1@gmail.com \
--cc=draviv@codeaurora.org \
--cc=linux-mtd@lists.infradead.org \
--cc=richard@nod.at \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.