From: Andreas Dilger <adilger@sun.com>
To: Frank Mayhar <fmayhar@google.com>
Cc: Eric Sandeen <sandeen@redhat.com>,
Curt Wohlgemuth <curtw@google.com>,
ext4 development <linux-ext4@vger.kernel.org>
Subject: Re: Question on fallocate/ftruncate sequence
Date: Tue, 21 Jul 2009 15:54:21 -0600 [thread overview]
Message-ID: <20090721215421.GM4231@webber.adilger.int> (raw)
In-Reply-To: <1248211771.20743.2.camel@bobble.smo.corp.google.com>
On Jul 21, 2009 14:29 -0700, Frank Mayhar wrote:
> I've spent a little while today digging into this. My guess (only a
> guess at this point until I have a chance to prove it) is that
> i_disksize should be updated by fallocate() even when KEEP_SIZE is
> specified. It's currently not updated in that case.
No, that isn't correct. The intent of KEEP_SIZE is to allow fallocate
to preallocate blocks beyond the EOF, so that it doesn't affect the
file data visible to userspace, but can avoid fragmentation from e.g.
log files or mbox files.
The i_disksize variable is just to handle the lag in updating the on-disk
file size during truncate, because the VFS updates i_size to indicate a
truncate, but in order to handle the truncation of files within finite
transaction sizes the on-disk file size needs to be shrunk incrementally.
> It's my
> understanding that i_disksize should be the real allocation, right?
> While i_size is the size that has actually been used? If so, then
> setting i_disksize is probably what's missing.
The difference is that i_size is in the VFS inode, and represents the
current in-memory state, while i_disksize is in the ext4 private inode
data and represents what is currently in the on-disk inode.
If we were to change i_disksize then on the next reboot the filesize
would become whatever is stored in i_disksize.
That said, we might need to have some kind of flag in the on-disk
inode to indicate that it was preallocated beyond EOF. Otherwise,
e2fsck will try and extend the file size to match the block count,
which isn't correct. We could also use this flag to determine if
truncate needs to be run on the inode even if the new size is the
same.
As a workaround for now, you could truncate to (size+1), then again
truncate to (size) and it should have the desired effect.
Cheers, Andreas
--
Andreas Dilger
Sr. Staff Engineer, Lustre Group
Sun Microsystems of Canada, Inc.
next prev parent reply other threads:[~2009-07-21 21:54 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-20 16:36 Question on fallocate/ftruncate sequence Curt Wohlgemuth
2009-07-20 22:45 ` Eric Sandeen
2009-07-21 21:29 ` Frank Mayhar
2009-07-21 21:54 ` Andreas Dilger [this message]
2009-07-22 16:24 ` Frank Mayhar
2009-07-22 23:10 ` Frank Mayhar
2009-07-23 3:05 ` Eric Sandeen
2009-07-23 16:27 ` Frank Mayhar
2009-07-23 17:00 ` Eric Sandeen
2009-07-23 18:05 ` Frank Mayhar
2009-07-23 21:56 ` Andreas Dilger
2009-07-23 22:46 ` Frank Mayhar
2009-08-28 18:42 ` Jiaying Zhang
2009-08-28 19:40 ` Andreas Dilger
2009-08-28 21:44 ` Jiaying Zhang
2009-08-28 22:14 ` Andreas Dilger
2009-08-29 0:40 ` Jiaying Zhang
2009-08-30 2:52 ` Theodore Tso
2009-08-31 19:40 ` Jiaying Zhang
2009-08-31 21:56 ` Andreas Dilger
2009-08-31 23:33 ` Jiaying Zhang
2009-09-02 8:41 ` Andreas Dilger
2009-09-03 5:20 ` Jiaying Zhang
2009-09-03 5:32 ` Jiaying Zhang
2009-09-24 5:27 ` Jiaying Zhang
2009-09-25 7:35 ` Andreas Dilger
2009-09-25 22:08 ` Jiaying Zhang
2009-09-29 19:15 ` Eric Sandeen
2009-09-29 19:38 ` Jiaying Zhang
2009-09-29 19:55 ` Eric Sandeen
2009-09-30 8:10 ` Andreas Dilger
2009-10-02 22:10 ` Jiaying Zhang
2009-10-02 22:29 ` Eric Sandeen
2009-10-02 23:21 ` Jiaying Zhang
2009-07-23 19:48 ` Question on fallocate/ftruncate sequence (and flags) Frank Mayhar
2009-07-23 20:37 ` Eric Sandeen
2009-07-23 21:01 ` Frank Mayhar
2009-07-29 15:29 ` Jan Kara
2009-07-29 15:59 ` Frank Mayhar
2009-07-23 21:53 ` Andreas Dilger
2009-07-23 23:33 ` Greg Freemyer
2009-07-21 22:03 ` Question on fallocate/ftruncate sequence Eric Sandeen
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=20090721215421.GM4231@webber.adilger.int \
--to=adilger@sun.com \
--cc=curtw@google.com \
--cc=fmayhar@google.com \
--cc=linux-ext4@vger.kernel.org \
--cc=sandeen@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).