| To: | Andreas Dilger <adilger@xxxxxxxxx>, Christoph Hellwig <hch@xxxxxxxxxxxxx> |
|---|---|
| Subject: | Re: fallocate mode flag for "unshare blocks"? |
| From: | "Austin S. Hemmelgarn" <ahferroin7@xxxxxxxxx> |
| Date: | Thu, 31 Mar 2016 11:43:09 -0400 |
| Cc: | Liu Bo <bo.li.liu@xxxxxxxxxx>, "Darrick J. Wong" <darrick.wong@xxxxxxxxxx>, xfs@xxxxxxxxxxx, linux-fsdevel <linux-fsdevel@xxxxxxxxxxxxxxx>, linux-btrfs <linux-btrfs@xxxxxxxxxxxxxxx>, linux-api@xxxxxxxxxxxxxxx |
| Delivered-to: | xfs@xxxxxxxxxxx |
| Dkim-signature: | v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=subject:to:references:cc:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=o+EHNzFjuJ5Wsku1dAkAqw2aOAE9HU1AE1eiPbRr/ng=; b=B5C9AQLvbklsXYhuTajsDDV8+Np/N3rM17lwmtpuFIuQW93m/8n2bglJJ0sgO97c/Y P+EFLIlN+Z6QfgmNOvvbPWNOTUgbnxizg2RxDjWKsgF0FPELCewyT+w4PrpZBFmfGuES +RADpv7pXSbXIhRKUpVDh4HXXLtAGWv/1J65vV8pXibsMyCV1BBPPxWfpIjnHYq3Bmwn jwhQ+mUdM3mlli9EHGoGTUrE5aNyLOZmTMRxh2JRDAfB4SGVjbD5ERBmWQTlT76XkArr H153ORsikw44wAwvF6M1hbuIaITstxMq/AORWuQTYbpxq+hahcDTzfhxMLvHG02iswoU PSfg== |
| In-reply-to: | <3E147309-67EA-4B29-B4E0-883BA03B7BFC@xxxxxxxxx> |
| References: | <20160302155007.GB7125@xxxxxxxxxxxxx> <20160330182755.GC2236@xxxxxxxxxxxxxxxx> <20160331003242.GA5813@xxxxxxxxxxxxxxxxxxxxx> <20160331075529.GB4209@xxxxxxxxxxxxx> <3E147309-67EA-4B29-B4E0-883BA03B7BFC@xxxxxxxxx> |
| User-agent: | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0 |
On 2016-03-31 11:31, Andreas Dilger wrote: On Mar 31, 2016, at 1:55 AM, Christoph Hellwig <hch@xxxxxxxxxxxxx> wrote:On Wed, Mar 30, 2016 at 05:32:42PM -0700, Liu Bo wrote:Well, btrfs fallocate doesn't allocate space if it's a shared one because it thinks the space is already allocated. So a later overwrite over this shared extent may hit enospc errors.And this makes it an incorrect implementation of posix_fallocate, which glibcs implements using fallocate if available.It isn't really useful for a COW filesystem to implement fallocate() to reserve blocks. Even if it did allocate all of the blocks on the initial fallocate() call, when it comes time to overwrite these blocks new blocks need to be allocated as the old ones will not be overwritten. Because of snapshots that could hold references to the old blocks, there isn't even the guarantee that the previous fallocated blocks will be released in a reasonable time to free up an equal amount of space. That really depends on how it's done. AFAIK, unwritten extents on BTRFS are block reservations which make sure that you can write there (IOW, the unwritten extent gets converted to a regular extent in-place, not via COW). This means that it is possible to guarantee that the first write to that area will work, which is technically all that POSIX requires. This in turn means that stuff like SystemD and RDBMS software don't exactly see things working as they expect them too, but that's because they make assumptions based on existing technology. |
| Previous by Date: | Re: fallocate mode flag for "unshare blocks"?, Andreas Dilger |
|---|---|
| Next by Date: | Internal error at xfs_trans_cancel, Avi Kivity |
| Previous by Thread: | Re: fallocate mode flag for "unshare blocks"?, Andreas Dilger |
| Next by Thread: | Re: fallocate mode flag for "unshare blocks"?, Henk Slager |
| Indexes: | [Date] [Thread] [Top] [All Lists] |