Thread (29 messages) 29 messages, 4 authors, 2014-03-18

Re: [PATCH 5/6 v2] ext4: Introduce FALLOC_FL_ZERO_RANGE flag for fallocate

From: Lukáš Czerner <hidden>
Date: 2014-02-27 11:56:54
Also in: linux-fsdevel, linux-xfs

On Wed, 26 Feb 2014, jon ernst wrote:
Date: Wed, 26 Feb 2014 23:41:15 -0500
From: jon ernst <redacted>
To: Lukas Czerner <redacted>
Cc: "linux-ext4@vger.kernel.org List" <redacted>,
    Theodore Ts'o [off-list ref], linux-fsdevel@vger.kernel.org,
    xfs@oss.sgi.com
Subject: Re: [PATCH 5/6 v2] ext4: Introduce FALLOC_FL_ZERO_RANGE flag for
    fallocate

On Wed, Feb 26, 2014 at 1:00 AM, jon ernst [off-list ref] wrote:
quoted
On Tue, Feb 25, 2014 at 2:14 PM, Lukas Czerner [off-list ref] wrote:
quoted
Introduce new FALLOC_FL_ZERO_RANGE flag for fallocate. This has the same
functionality as xfs ioctl XFS_IOC_ZERO_RANGE.

It can be used to convert a range of file to zeros preferably without
issuing data IO. Blocks should be preallocated for the regions that span
holes in the file, and the entire range is preferable converted to
unwritten extents

This can be also used to preallocate blocks past EOF in the same way as
with fallocate. Flag FALLOC_FL_KEEP_SIZE which should cause the inode
size to remain the same.

Also add appropriate tracepoints.

Signed-off-by: Lukas Czerner <redacted>
---
 fs/ext4/ext4.h              |   2 +
 fs/ext4/extents.c           | 270 +++++++++++++++++++++++++++++++++++++++++---
 fs/ext4/inode.c             |  17 ++-
 include/trace/events/ext4.h |  64 +++++------
quoted
quoted
 static int
+ext4_ext_convert_initialized_extent(handle_t *handle, struct inode *inode,
+                       struct ext4_map_blocks *map,
+                       struct ext4_ext_path *path, int flags,
+                       unsigned int allocated, ext4_fsblk_t newblock)
+{
+       int ret = 0;
+       int err = 0;
+
+       /*
+        * Make sure that the extent is no bigger than we support with
+        * uninitialized extent
+        */
+       if (map->m_len > EXT_UNINIT_MAX_LEN)
+               map->m_len = EXT_UNINIT_MAX_LEN / 2;
 Pardon my possible dumb question. Why do you use
"EXT_UNINIT_MAX_LEN/ 2;" here instead of "EXT_UNINIT_MAX_LEN"
 I don't see the reason why we can't use EXT_UNINIT_MAX_LEN here.


(resend, Ping on this question, thank you!)
Wow, that's an early ping :) I am sorry to disappoint you, my answer
is not going to be that exciting :)


Yes, we can just use EXT_UNINIT_MAX_LEN here. But
EXT_UNINIT_MAX_LEN/2 would make it much more evenly spread out.

I do not think there is any real world advantage to this and the
behaviour should be the same in both cases.

Thanks!
-Lukas

Thanks!
 Jon
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help