[PATCH 5/5] ext4: write support for preallocated blocks/extents

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: <torvalds@...>, <akpm@...>
Cc: <linux-fsdevel@...>, <linux-kernel@...>, <linux-ext4@...>, <xfs@...>, <suparna@...>, <cmm@...>
Date: Thursday, April 26, 2007 - 2:16 pm

This patch adds write support for preallocated (using fallocate system
call) blocks/extents. The preallocated extents in ext4 are marked
"uninitialized", hence they need special handling especially while
writing to them. This patch takes care of that.

Signed-off-by: Amit Arora <aarora@in.ibm.com>
---
 fs/ext4/extents.c               |  228 +++++++++++++++++++++++++++++++++++-----
 include/linux/ext4_fs_extents.h |    1 
 2 files changed, 202 insertions(+), 27 deletions(-)

Index: linux-2.6.21/fs/ext4/extents.c
===================================================================
--- linux-2.6.21.orig/fs/ext4/extents.c
+++ linux-2.6.21/fs/ext4/extents.c
@@ -1141,6 +1141,51 @@ ext4_can_extents_be_merged(struct inode 
 }
 
 /*
+ * ext4_ext_try_to_merge:
+ * tries to merge the "ex" extent to the next extent in the tree.
+ * It always tries to merge towards right. If you want to merge towards
+ * left, pass "ex - 1" as argument instead of "ex".
+ * Returns 0 if the extents (ex and ex+1) were _not_ merged and returns
+ * 1 if they got merged.
+ */
+int ext4_ext_try_to_merge(struct inode *inode,
+				struct ext4_ext_path *path,
+				struct ext4_extent *ex)
+{
+	struct ext4_extent_header *eh;
+	unsigned int depth, len;
+	int merge_done=0, uninitialized = 0;
+
+	depth = ext_depth(inode);
+	BUG_ON(path[depth].p_hdr == NULL);
+	eh = path[depth].p_hdr;
+
+	while (ex < EXT_LAST_EXTENT(eh)) {
+		if (!ext4_can_extents_be_merged(inode, ex, ex + 1))
+			break;
+		/* merge with next extent! */
+		if (ext4_ext_is_uninitialized(ex))
+			uninitialized = 1;
+		ex->ee_len = cpu_to_le16(ext4_ext_get_actual_len(ex)
+					+ ext4_ext_get_actual_len(ex + 1));
+		if (uninitialized)
+			ext4_ext_mark_uninitialized(ex);
+
+		if (ex + 1 < EXT_LAST_EXTENT(eh)) {
+			len = (EXT_LAST_EXTENT(eh) - ex - 1)
+					* sizeof(struct ext4_extent);
+			memmove(ex + 1, ex + 2, len);
+		}
+		eh->eh_entries = cpu_to_le16(le16_to_cpu(eh->eh_entries)-1);
+		merge_done = 1;
+		BUG_ON(eh->eh_entries == 0);
+	}
+
+	return merge_done;
+}
+
+
+/*
  * ext4_ext_check_overlap:
  * check if a portion of the "newext" extent overlaps with an
  * existing extent.
@@ -1316,25 +1361,7 @@ has_space:
 
 merge:
 	/* try to merge extents to the right */
-	while (nearex < EXT_LAST_EXTENT(eh)) {
-		if (!ext4_can_extents_be_merged(inode, nearex, nearex + 1))
-			break;
-		/* merge with next extent! */
-		if (ext4_ext_is_uninitialized(nearex))
-			uninitialized = 1;
-		nearex->ee_len = cpu_to_le16(ext4_ext_get_actual_len(nearex)
-					+ ext4_ext_get_actual_len(nearex + 1));
-		if (uninitialized)
-			ext4_ext_mark_uninitialized(nearex);
-
-		if (nearex + 1 < EXT_LAST_EXTENT(eh)) {
-			len = (EXT_LAST_EXTENT(eh) - nearex - 1)
-					* sizeof(struct ext4_extent);
-			memmove(nearex + 1, nearex + 2, len);
-		}
-		eh->eh_entries = cpu_to_le16(le16_to_cpu(eh->eh_entries)-1);
-		BUG_ON(eh->eh_entries == 0);
-	}
+	ext4_ext_try_to_merge(inode, path, nearex);
 
 	/* try to merge extents to the left */
 
@@ -1999,15 +2026,149 @@ void ext4_ext_release(struct super_block
 #endif
 }
 
+/*
+ * ext4_ext_convert_to_initialized:
+ * this function is called by ext4_ext_get_blocks() if someone tries to write
+ * to an uninitialized extent. It may result in splitting the uninitialized
+ * extent into multiple extents (upto three). Atleast one initialized extent
+ * and atmost two uninitialized extents can result.
+ * There are three possibilities:
+ *   a> No split required: Entire extent should be initialized.
+ *   b> Split into two extents: Only one end of the extent is being written to.
+ *   c> Split into three extents: Somone is writing in middle of the extent.
+ */
+int ext4_ext_convert_to_initialized(handle_t *handle, struct inode *inode,
+					struct ext4_ext_path *path,
+					ext4_fsblk_t iblock,
+					unsigned long max_blocks)
+{
+	struct ext4_extent *ex, *ex1 = NULL, *ex2 = NULL, *ex3 = NULL, newex;
+	struct ext4_extent_header *eh;
+	unsigned int allocated, ee_block, ee_len, depth;
+	ext4_fsblk_t newblock;
+	int err = 0, ret = 0;
+
+	depth = ext_depth(inode);
+	eh = path[depth].p_hdr;
+	ex = path[depth].p_ext;
+	ee_block = le32_to_cpu(ex->ee_block);
+	ee_len = ext4_ext_get_actual_len(ex);
+	allocated = ee_len - (iblock - ee_block);
+	newblock = iblock - ee_block + ext_pblock(ex);
+	ex2 = ex;
+
+	/* ex1: ee_block to iblock - 1 : uninitialized */
+	if (iblock > ee_block) {
+		ex1 = ex;
+		ex1->ee_len = cpu_to_le16(iblock - ee_block);
+		ext4_ext_mark_uninitialized(ex1);
+		ex2 = &newex;
+	}
+	/* for sanity, update the length of the ex2 extent before
+	 * we insert ex3, if ex1 is NULL. This is to avoid temporary
+	 * overlap of blocks.
+	 */
+	if (!ex1 && allocated > max_blocks)
+		ex2->ee_len = cpu_to_le16(max_blocks);
+	/* ex3: to ee_block + ee_len : uninitialised */
+	if (allocated > max_blocks) {
+		unsigned int newdepth;
+		ex3 = &newex;
+		ex3->ee_block = cpu_to_le32(iblock + max_blocks);
+		ext4_ext_store_pblock(ex3, newblock + max_blocks);
+		ex3->ee_len = cpu_to_le16(allocated - max_blocks);
+		ext4_ext_mark_uninitialized(ex3);
+		err = ext4_ext_insert_extent(handle, inode, path, ex3);
+		if (err)
+			goto out;
+		/* The depth, and hence eh & ex might change
+		 * as part of the insert above.
+		 */
+		newdepth = ext_depth(inode);
+		if (newdepth != depth)
+		{
+			depth=newdepth;
+			path = ext4_ext_find_extent(inode, iblock, NULL);
+			if (IS_ERR(path)) {
+				err = PTR_ERR(path);
+				path = NULL;
+				goto out;
+			}
+			eh = path[depth].p_hdr;
+			ex = path[depth].p_ext;
+			if (ex2 != &newex)
+				ex2 = ex;
+		}
+		allocated = max_blocks;
+	}
+	/* If there was a change of depth as part of the
+	 * insertion of ex3 above, we need to update the length
+	 * of the ex1 extent again here
+	 */
+	if (ex1 && ex1 != ex) {
+		ex1 = ex;
+		ex1->ee_len = cpu_to_le16(iblock - ee_block);
+		ext4_ext_mark_uninitialized(ex1);
+		ex2 = &newex;
+	}
+	/* ex2: iblock to iblock + maxblocks-1 : initialised */
+	ex2->ee_block = cpu_to_le32(iblock);
+	ex2->ee_start = cpu_to_le32(newblock);
+	ext4_ext_store_pblock(ex2, newblock);
+	ex2->ee_len = cpu_to_le16(allocated);
+	if (ex2 != ex)
+		goto insert;
+	if ((err = ext4_ext_get_access(handle, inode, path + depth)))
+		goto out;
+	/* New (initialized) extent starts from the first block
+	 * in the current extent. i.e., ex2 == ex
+	 * We have to see if it can be merged with the extent
+	 * on the left.
+	 */
+	if (ex2 > EXT_FIRST_EXTENT(eh)) {
+		/* To merge left, pass "ex2 - 1" to try_to_merge(),
+		 * since it merges towards right _only_.
+		 */
+		ret = ext4_ext_try_to_merge(inode, path, ex2 - 1);
+		if (ret) {
+			err = ext4_ext_correct_indexes(handle, inode, path);
+			if (err)
+				goto out;
+			depth = ext_depth(inode);
+			ex2--;
+		}
+	}
+	/* Try to Merge towards right. This might be required
+	 * only when the whole extent is being written to.
+	 * i.e. ex2==ex and ex3==NULL.
+	 */
+	if (!ex3) {
+		ret = ext4_ext_try_to_merge(inode, path, ex2);
+		if (ret) {
+			err = ext4_ext_correct_indexes(handle, inode, path);
+			if (err)
+				goto out;
+		}
+	}
+	/* Mark modified extent as dirty */
+	err = ext4_ext_dirty(handle, inode, path + depth);
+	goto out;
+insert:
+	err = ext4_ext_insert_extent(handle, inode, path, &newex);
+out:
+	return err ? err : allocated;
+}
+
 int ext4_ext_get_blocks(handle_t *handle, struct inode *inode,
 			ext4_fsblk_t iblock,
 			unsigned long max_blocks, struct buffer_head *bh_result,
 			int create, int extend_disksize)
 {
 	struct ext4_ext_path *path = NULL;
+	struct ext4_extent_header *eh;
 	struct ext4_extent newex, *ex;
 	ext4_fsblk_t goal, newblock;
-	int err = 0, depth;
+	int err = 0, depth, ret;
 	unsigned long allocated = 0;
 
 	__clear_bit(BH_New, &bh_result->b_state);
@@ -2055,6 +2216,7 @@ int ext4_ext_get_blocks(handle_t *handle
 	 * this is why assert can't be put in ext4_ext_find_extent()
 	 */
 	BUG_ON(path[depth].p_ext == NULL && depth != 0);
+	eh = path[depth].p_hdr;
 
 	ex = path[depth].p_ext;
 	if (ex) {
@@ -2063,13 +2225,9 @@ int ext4_ext_get_blocks(handle_t *handle
 		unsigned short ee_len;
 
 		/*
-		 * Allow future support for preallocated extents to be added
-		 * as an RO_COMPAT feature:
 		 * Uninitialized extents are treated as holes, except that
-		 * we avoid (fail) allocating new blocks during a write.
+		 * we split out initialized portions during a write.
 		 */
-		if (le16_to_cpu(ex->ee_len) > EXT_MAX_LEN)
-			goto out2;
 		ee_len = ext4_ext_get_actual_len(ex);
 		/* if found extent covers block, simply return it */
 	        if (iblock >= ee_block && iblock < ee_block + ee_len) {
@@ -2078,12 +2236,27 @@ int ext4_ext_get_blocks(handle_t *handle
 			allocated = ee_len - (iblock - ee_block);
 			ext_debug("%d fit into %lu:%d -> %llu\n", (int) iblock,
 					ee_block, ee_len, newblock);
+
 			/* Do not put uninitialized extent in the cache */
-			if (!ext4_ext_is_uninitialized(ex))
+			if (!ext4_ext_is_uninitialized(ex)) {
 				ext4_ext_put_in_cache(inode, ee_block,
 							ee_len, ee_start,
 							EXT4_EXT_CACHE_EXTENT);
-			goto out;
+				goto out;
+			}
+			if (create == EXT4_CREATE_UNINITIALIZED_EXT)
+				goto out;
+			if (!create)
+				goto out2;
+
+			ret = ext4_ext_convert_to_initialized(handle, inode,
+								path, iblock,
+								max_blocks);
+			if (ret <= 0)
+				goto out2;
+			else
+				allocated = ret;
+			goto outnew;
 		}
 	}
 
@@ -2135,6 +2308,7 @@ int ext4_ext_get_blocks(handle_t *handle
 
 	/* previous routine could use block we allocated */
 	newblock = ext_pblock(&newex);
+outnew:
 	__set_bit(BH_New, &bh_result->b_state);
 
 	/* Cache only when it is _not_ an uninitialized extent */
Index: linux-2.6.21/include/linux/ext4_fs_extents.h
===================================================================
--- linux-2.6.21.orig/include/linux/ext4_fs_extents.h
+++ linux-2.6.21/include/linux/ext4_fs_extents.h
@@ -203,6 +203,7 @@ ext4_ext_invalidate_cache(struct inode *
 
 extern int ext4_extent_tree_init(handle_t *, struct inode *);
 extern int ext4_ext_calc_credits_for_insert(struct inode *, struct ext4_ext_path *);
+extern int ext4_ext_try_to_merge(struct inode *, struct ext4_ext_path *, struct ext4_extent *);
 extern unsigned int ext4_ext_check_overlap(struct inode *, struct ext4_extent *, struct ext4_ext_path *);
 extern int ext4_ext_insert_extent(handle_t *, struct inode *, struct ext4_ext_path *, struct ext4_extent *);
 extern int ext4_ext_walk_space(struct inode *, unsigned long, unsigned long, ext_prepare_callback, void *);
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC] Heads up on sys_fallocate(), Amit K. Arora, (Thu Mar 1, 2:34 pm)
[RFC][PATCH] sys_fallocate() system call, Amit K. Arora, (Fri Mar 16, 10:31 am)
Re: [RFC][PATCH] sys_fallocate() system call, Russell King, (Sat Mar 17, 10:53 am)
Re: [RFC][PATCH] sys_fallocate() system call, Stephen Rothwell, (Sat Mar 17, 1:33 am)
Re: [RFC][PATCH] sys_fallocate() system call, Amit K. Arora, (Mon Mar 19, 5:30 am)
Re: [RFC][PATCH] sys_fallocate() system call, Heiko Carstens, (Fri Mar 16, 12:17 pm)
Re: [RFC][PATCH] sys_fallocate() system call, Matthew Wilcox, (Sat Mar 17, 7:10 am)
Re: [RFC][PATCH] sys_fallocate() system call, Amit K. Arora, (Wed Mar 21, 8:04 am)
Interface for the new fallocate() system call, Amit K. Arora, (Thu Mar 29, 7:51 am)
Re: Interface for the new fallocate() system call, Andrew Morton, (Thu Mar 29, 1:10 pm)
Re: Interface for the new fallocate() system call, Heiko Carstens, (Fri Mar 30, 3:19 am)
Re: Interface for the new fallocate() system call, Paul Mackerras, (Fri Mar 30, 5:15 am)
Re: Interface for the new fallocate() system call, Paul Mackerras, (Mon Apr 9, 9:01 am)
Re: Interface for the new fallocate() system call, Heiko Carstens, (Fri Mar 30, 8:55 am)
Re: Interface for the new fallocate() system call, Jakub Jelinek, (Fri Mar 30, 3:14 am)
Re: Interface for the new fallocate() system call, Amit K. Arora, (Tue Apr 17, 8:55 am)
Re: Interface for the new fallocate() system call, Andreas Dilger, (Wed Apr 18, 9:06 am)
Re: Interface for the new fallocate() system call, Amit K. Arora, (Fri Apr 20, 9:51 am)
Re: Interface for the new fallocate() system call, Jakub Jelinek, (Fri Apr 20, 10:59 am)
Re: Interface for the new fallocate() system call, Amit K. Arora, (Tue Apr 24, 8:16 am)
[PATCH 0/5] fallocate system call, Amit K. Arora, (Thu Apr 26, 1:50 pm)
[PATCH 0/6][TAKE4] fallocate system call, Amit K. Arora, (Thu May 17, 10:11 am)
Re: [PATCH 0/6][TAKE4] fallocate system call, Andrew Morton, (Sat May 19, 2:44 am)
Re: [PATCH 0/6][TAKE4] fallocate system call, Mingming Cao, (Mon May 21, 1:24 am)
[PATCH 0/5][TAKE3] fallocate system call, Amit K. Arora, (Tue May 15, 3:37 pm)
Re: [PATCH 0/5][TAKE3] fallocate system call, Mingming Cao, (Tue May 15, 7:52 pm)
[PATCH 0/5][TAKE2] fallocate system call, Amit K. Arora, (Mon May 14, 9:29 am)
Re: [PATCH 0/5][TAKE2] fallocate system call, Andreas Dilger, (Tue May 15, 2:31 am)
Re: [PATCH 0/5][TAKE2] fallocate system call, Amit K. Arora, (Tue May 15, 8:40 am)
Re: [PATCH 0/5] fallocate system call, David Chinner, (Sun Apr 29, 8:47 pm)
Re: [PATCH 0/5] fallocate system call, Chris Wedgwood, (Mon Apr 30, 1:25 am)
Re: [PATCH 0/5] fallocate system call, Amit K. Arora, (Wed May 2, 8:53 am)
Re: [PATCH 0/5] fallocate system call, Andreas Dilger, (Thu May 3, 6:34 am)
Re: [PATCH 0/5] fallocate system call, Miquel van Smoorenburg, (Thu May 3, 7:22 am)
Re: [PATCH 0/5] fallocate system call, David Chinner, (Mon May 7, 10:26 pm)
Re: [PATCH 0/5] fallocate system call, David Chinner, (Mon Apr 30, 1:56 am)
Re: [PATCH 0/5] fallocate system call, Chris Wedgwood, (Mon Apr 30, 2:01 am)
[PATCH] Add preallocation beyond EOF to fallocate, David Chinner, (Sun Apr 29, 11:14 pm)
[PATCH] XFS -&gt;fallocate() support, David Chinner, (Sun Apr 29, 11:11 pm)
[PATCH] ia64 fallocate syscall, David Chinner, (Sun Apr 29, 11:09 pm)
Re: [PATCH 0/5] fallocate system call, Heiko Carstens, (Fri Apr 27, 8:10 am)
Re: [PATCH 0/5] fallocate system call, Jörn, (Fri Apr 27, 10:43 am)
Re: [PATCH 0/5] fallocate system call, Heiko Carstens, (Fri Apr 27, 1:46 pm)
Re: [PATCH 0/5] fallocate system call, Chris Wedgwood, (Fri Apr 27, 4:42 pm)
[PATCH 5/5] ext4: write support for preallocated blocks/exte..., Amit K. Arora, (Thu Apr 26, 2:16 pm)
[PATCH 4/5] ext4: fallocate support in ext4, Amit K. Arora, (Thu Apr 26, 2:13 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Andrew Morton, (Fri May 4, 12:31 am)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Andreas Dilger, (Mon May 7, 7:37 am)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Andrew Morton, (Mon May 7, 4:58 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Jan Kara, (Mon May 14, 9:34 am)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Mingming Cao, (Mon May 7, 8:00 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Andrew Morton, (Mon May 7, 8:15 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Mingming Cao, (Mon May 7, 8:41 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Theodore Tso, (Mon May 7, 9:43 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Mingming Cao, (Tue May 8, 1:46 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Andreas Dilger, (Tue May 8, 12:52 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Andreas Dilger, (Mon May 7, 6:21 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Jeff Garzik, (Mon May 7, 7:02 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Andreas Dilger, (Mon May 7, 9:07 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Jeff Garzik, (Mon May 7, 9:25 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Theodore Tso, (Mon May 7, 7:36 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Andrew Morton, (Mon May 7, 6:38 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Theodore Tso, (Mon May 7, 7:14 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Andrew Morton, (Mon May 7, 7:31 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Mingming Cao, (Mon May 7, 8:30 pm)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Amit K. Arora, (Mon May 7, 8:07 am)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Dave Kleikamp, (Mon May 7, 11:24 am)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Amit K. Arora, (Tue May 8, 6:52 am)
Re: [PATCH 4/5] ext4: fallocate support in ext4, Dave Kleikamp, (Tue May 8, 10:47 am)
[PATCH 3/5] ext4: Extent overlap bugfix, Amit K. Arora, (Thu Apr 26, 2:11 pm)
Re: [PATCH 3/5] ext4: Extent overlap bugfix, Andrew Morton, (Fri May 4, 12:30 am)
Re: [PATCH 3/5] ext4: Extent overlap bugfix, Amit K. Arora, (Mon May 7, 7:46 am)
[PATCH 2/5] fallocate() on s390, Amit K. Arora, (Thu Apr 26, 2:07 pm)
Re: [PATCH 1/5] fallocate() implementation in i86, x86_64 an..., Suparna Bhattacharya, (Fri May 11, 7:03 am)
Re: [PATCH 1/5] fallocate() implementation in i86, x86_64 an..., Christoph Hellwig, (Sat Jun 30, 6:14 am)
[PATCH 0/6][TAKE5] fallocate system call, Amit K. Arora, (Mon Jun 25, 9:28 am)
Re: [PATCH 0/6][TAKE5] fallocate system call, Andrew Morton, (Thu Jun 28, 5:55 am)
Re: [PATCH 0/6][TAKE5] fallocate system call, Amit K. Arora, (Thu Jun 28, 1:57 pm)
Re: [PATCH 0/6][TAKE5] fallocate system call, Andreas Dilger, (Thu Jun 28, 4:34 pm)
Re: [PATCH 0/6][TAKE5] fallocate system call, Andrew Morton, (Thu Jun 28, 2:33 pm)
Re: [PATCH 0/6][TAKE5] fallocate system call, Theodore Tso, (Fri Jun 29, 9:56 am)
Re: [PATCH 0/6][TAKE5] fallocate system call, Mingming Caoc, (Fri Jun 29, 11:50 am)
Re: [PATCH 0/6][TAKE5] fallocate system call, Andrew Morton, (Fri Jun 29, 4:57 pm)
Ext4 patches for 2.6.22-rc6, Mingming Cao, (Sun Jul 1, 3:35 am)
Re: [PATCH 0/6][TAKE5] fallocate system call, Jeff Garzik, (Fri Jun 29, 10:29 am)
Re: [PATCH 0/6][TAKE5] fallocate system call, Theodore Tso, (Fri Jun 29, 1:42 pm)
Re: [PATCH 0/6][TAKE5] fallocate system call, Christoph Hellwig, (Fri Jun 29, 3:20 am)
Re: [PATCH 0/6][TAKE5] fallocate system call, Jeff Garzik, (Thu Jun 28, 2:57 pm)
Re: [PATCH 0/6][TAKE5] fallocate system call, Dave Kleikamp, (Thu Jun 28, 2:45 pm)
Re: [PATCH 0/6][TAKE5] fallocate system call, Mingming Cao, (Thu Jun 28, 1:36 pm)
Re: [PATCH 0/6][TAKE5] fallocate system call, David Chinner, (Tue Jun 26, 7:15 pm)
[PATCH 7/7][TAKE5] ext4: support new modes, Amit K. Arora, (Mon Jun 25, 9:50 am)
Re: [PATCH 7/7][TAKE5] ext4: support new modes, Andreas Dilger, (Mon Jun 25, 5:56 pm)
Re: [PATCH 7/7][TAKE5] ext4: support new modes, Amit K. Arora, (Tue Jun 26, 8:07 am)
Re: [PATCH 7/7][TAKE5] ext4: support new modes, Andreas Dilger, (Tue Jun 26, 12:14 pm)
Re: [PATCH 7/7][TAKE5] ext4: support new modes, Amit K. Arora, (Tue Jun 26, 3:29 pm)
Re: [PATCH 7/7][TAKE5] ext4: support new modes, David Chinner, (Tue Jun 26, 8:04 pm)
Re: [PATCH 7/7][TAKE5] ext4: support new modes, Amit K. Arora, (Thu Jun 28, 2:07 pm)
[PATCH 5/7][TAKE5] ext4: fallocate support in ext4, Amit K. Arora, (Mon Jun 25, 9:48 am)
[PATCH 4/7][TAKE5] support new modes in fallocate, Amit K. Arora, (Mon Jun 25, 9:45 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Andreas Dilger, (Mon Jun 25, 5:52 pm)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, David Chinner, (Tue Jun 26, 7:26 pm)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Amit K. Arora, (Tue Jun 26, 6:45 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Andreas Dilger, (Tue Jun 26, 11:42 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, David Chinner, (Tue Jun 26, 7:32 pm)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Amit K. Arora, (Tue Jun 26, 3:12 pm)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Amit K. Arora, (Mon Jun 25, 11:03 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Andreas Dilger, (Mon Jun 25, 5:46 pm)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, David Chinner, (Tue Jun 26, 7:14 pm)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Amit K. Arora, (Tue Jun 26, 6:32 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Christoph Hellwig, (Sat Jun 30, 6:21 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, David Chinner, (Sun Jul 1, 6:55 pm)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Christoph Hellwig, (Wed Jul 11, 5:05 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Amit K. Arora, (Mon Jul 2, 7:47 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Andreas Dilger, (Sat Jun 30, 12:52 pm)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Amit K. Arora, (Tue Jul 3, 6:08 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Christoph Hellwig, (Tue Jul 3, 6:31 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Amit K. Arora, (Tue Jul 3, 7:46 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Christoph Hellwig, (Wed Jul 11, 5:03 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Suparna Bhattacharya, (Thu Jul 12, 3:28 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, David Chinner, (Thu Jul 12, 9:13 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Amit K. Arora, (Thu Jul 12, 10:15 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Amit K. Arora, (Thu Jul 12, 4:26 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Andreas Dilger, (Thu Jul 12, 10:40 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Timothy Shimmin, (Wed Jul 4, 1:37 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Christoph Hellwig, (Wed Jul 11, 5:04 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Andreas Dilger, (Tue Jun 26, 11:34 am)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, David Chinner, (Tue Jun 26, 7:18 pm)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Amit K. Arora, (Thu Jun 28, 2:19 pm)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, David Chinner, (Thu Jun 28, 9:03 pm)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Nathan Scott, (Thu Jun 28, 7:39 pm)
Re: [PATCH 4/7][TAKE5] support new modes in fallocate, Amit K. Arora, (Tue Jun 26, 3:09 pm)
[PATCH 3/7][TAKE5] fallocate() on ia64, Amit K. Arora, (Mon Jun 25, 9:43 am)
[PATCH 2/7][TAKE5] fallocate() on s390(x), Amit K. Arora, (Mon Jun 25, 9:42 am)
Re: [PATCH 2/7][TAKE5] fallocate() on s390(x), Heiko Carstens, (Tue Jun 26, 11:15 am)
Re: [PATCH 1/5] fallocate() implementation in i86, x86_64 an..., Suparna Bhattacharya, (Wed May 9, 6:15 am)
Re: [PATCH 1/5] fallocate() implementation in i86, x86_64 an..., Suparna Bhattacharya, (Wed May 9, 7:10 am)
Re: [PATCH 1/5] fallocate() implementation in i86, x86_64 an..., Martin Schwidefsky, (Wed May 9, 8:00 am)
Re: Interface for the new fallocate() system call, Amit K. Arora, (Thu Apr 5, 7:26 am)
Re: Interface for the new fallocate() system call, Andreas Dilger, (Fri Apr 6, 5:58 am)
Re: Interface for the new fallocate() system call, Randy Dunlap, (Thu Apr 5, 11:50 am)
Re: Interface for the new fallocate() system call, Amit K. Arora, (Thu Apr 5, 7:44 am)
Re: Interface for the new fallocate() system call, Paul Mackerras, (Fri Mar 30, 5:15 am)
Re: Interface for the new fallocate() system call, Heiko Carstens, (Fri Mar 30, 4:39 am)
Re: Interface for the new fallocate() system call, Jan Engelhardt, (Thu Mar 29, 1:01 pm)
Re: Interface for the new fallocate() system call, Heiko Carstens, (Fri Mar 30, 3:00 am)
Re: Interface for the new fallocate() system call, linux-os (Dick Johnson), (Thu Mar 29, 1:18 pm)
Re: Interface for the new fallocate() system call, Jan Engelhardt, (Thu Mar 29, 2:05 pm)
Re: Interface for the new fallocate() system call, Linus Torvalds, (Thu Mar 29, 2:37 pm)
Re: Interface for the new fallocate() system call, Chris Wedgwood, (Thu Mar 29, 12:35 pm)
Re: [RFC][PATCH] sys_fallocate() system call, Chris Wedgwood, (Wed Mar 21, 5:35 pm)
Re: [RFC][PATCH] sys_fallocate() system call, Paul Mackerras, (Sat Mar 17, 5:59 am)
Re: [RFC][PATCH] sys_fallocate() system call, Matthew Wilcox, (Sat Mar 17, 7:07 am)
Re: [RFC][PATCH] sys_fallocate() system call, Heiko Carstens, (Sat Mar 17, 10:30 am)
Re: [RFC][PATCH] sys_fallocate() system call, Stephen Rothwell, (Sat Mar 17, 10:38 am)
Re: [RFC][PATCH] sys_fallocate() system call, Stephen Rothwell, (Sat Mar 17, 10:42 am)
Re: [RFC][PATCH] sys_fallocate() system call, Heiko Carstens, (Fri Mar 16, 11:21 am)
Re: [RFC][PATCH] sys_fallocate() system call, Amit K. Arora, (Mon Mar 19, 5:24 am)
Re: [RFC][PATCH] sys_fallocate() system call, Heiko Carstens, (Mon Mar 19, 7:23 am)
Re: [RFC] Heads up on sys_fallocate(), Christoph Hellwig, (Thu Mar 1, 7:36 pm)
Re: [RFC] Heads up on sys_fallocate(), Eric Sandeen, (Thu Mar 1, 7:29 pm)
Re: [RFC] Heads up on sys_fallocate(), Christoph Hellwig, (Thu Mar 1, 7:51 pm)
Re: [RFC] Heads up on sys_fallocate(), Jeremy Fitzhardinge, (Thu Mar 1, 5:14 pm)
Re: [RFC] Heads up on sys_fallocate(), Alan, (Thu Mar 1, 6:58 pm)
Re: [RFC] Heads up on sys_fallocate(), Jeremy Fitzhardinge, (Thu Mar 1, 6:05 pm)
Re: [RFC] Heads up on sys_fallocate(), Alan, (Thu Mar 1, 7:11 pm)
Re: [RFC] Heads up on sys_fallocate(), Jeremy Fitzhardinge, (Thu Mar 1, 6:15 pm)
Re: [RFC] Heads up on sys_fallocate(), Jeff Garzik, (Thu Mar 1, 4:23 pm)
Re: [RFC] Heads up on sys_fallocate(), Jeremy Allison, (Thu Mar 1, 4:31 pm)
Re: [RFC] Heads up on sys_fallocate(), Eric Sandeen, (Thu Mar 1, 3:15 pm)
Re: [RFC] Heads up on sys_fallocate(), Andreas Dilger, (Fri Mar 2, 6:45 am)
Re: [RFC] Heads up on sys_fallocate(), Dave Kleikamp, (Fri Mar 2, 9:17 am)
Re: [RFC] Heads up on sys_fallocate(), Andrew Morton, (Thu Mar 1, 6:25 pm)
Re: [RFC] Heads up on sys_fallocate(), Anton Blanchard, (Thu Mar 1, 6:41 pm)
Re: [RFC] Heads up on sys_fallocate(), Dave Kleikamp, (Thu Mar 1, 6:44 pm)
Re: [RFC] Heads up on sys_fallocate(), Christoph Hellwig, (Thu Mar 1, 7:38 pm)
Re: [RFC] Heads up on sys_fallocate(), Arnd Bergmann, (Sat Mar 3, 6:45 pm)
Re: [RFC] Heads up on sys_fallocate(), Christoph Hellwig, (Mon Mar 5, 9:18 am)
Re: [RFC] Heads up on sys_fallocate(), Anton Altaparmakov, (Sun Mar 4, 4:11 pm)
Re: [RFC] Heads up on sys_fallocate(), Christoph Hellwig, (Mon Mar 5, 12:23 am)
Re: [RFC] Heads up on sys_fallocate(), Ulrich Drepper, (Sun Mar 4, 6:38 pm)
Re: [RFC] Heads up on sys_fallocate(), Jörn, (Sun Mar 4, 8:16 pm)
Re: [RFC] Heads up on sys_fallocate(), Anton Altaparmakov, (Sun Mar 4, 7:22 pm)
Re: [RFC] Heads up on sys_fallocate(), Theodore Tso, (Mon Mar 5, 10:37 am)
Re: [RFC] Heads up on sys_fallocate(), Ulrich Drepper, (Mon Mar 5, 11:15 am)
Re: [RFC] Heads up on sys_fallocate(), Theodore Tso, (Mon Mar 5, 12:01 pm)
Re: [RFC] Heads up on sys_fallocate(), Ulrich Drepper, (Mon Mar 5, 12:07 pm)
Re: [RFC] Heads up on sys_fallocate(), Christoph Hellwig, (Mon Mar 5, 11:35 am)
Re: [RFC] Heads up on sys_fallocate(), Anton Altaparmakov, (Mon Mar 5, 11:07 am)
Re: [RFC] Heads up on sys_fallocate(), Arnd Bergmann, (Sun Mar 4, 4:53 pm)
Re: [RFC] Heads up on sys_fallocate(), Andrew Morton, (Thu Mar 1, 6:59 pm)
Re: [RFC] Heads up on sys_fallocate(), Ulrich Drepper, (Fri Mar 2, 3:09 am)
Re: [RFC] Heads up on sys_fallocate(), Dave Kleikamp, (Thu Mar 1, 7:09 pm)
Re: [RFC] Heads up on sys_fallocate(), Mingming Cao, (Fri Mar 2, 2:09 pm)
Re: [RFC] Heads up on sys_fallocate(), Jan Engelhardt, (Fri Mar 2, 9:41 am)
Re: [RFC] Heads up on sys_fallocate(), Nathan Scott, (Thu Mar 1, 6:40 pm)
Re: [RFC] Heads up on sys_fallocate(), Eric Sandeen, (Thu Mar 1, 6:39 pm)
Re: [RFC] Heads up on sys_fallocate(), Andrew Morton, (Thu Mar 1, 6:52 pm)
Re: [RFC] Heads up on sys_fallocate(), Mingming Cao, (Fri Mar 2, 2:28 pm)
Re: [RFC] Heads up on sys_fallocate(), Jan Kara, (Mon Mar 5, 8:27 am)
Re: [RFC] Heads up on sys_fallocate(), Eric Sandeen, (Mon Mar 5, 5:41 pm)
Re: [RFC] Heads up on sys_fallocate(), Mingming Cao, (Mon Mar 5, 4:02 pm)
Re: [RFC] Heads up on sys_fallocate(), Christoph Hellwig, (Tue Mar 6, 3:28 am)
Re: [RFC] Heads up on sys_fallocate(), Ulrich Drepper, (Tue Mar 6, 10:36 am)
Re: [RFC] Heads up on sys_fallocate(), Eric Sandeen, (Tue Mar 6, 12:46 pm)
Re: [RFC] Heads up on sys_fallocate(), David Chinner, (Tue Mar 13, 7:46 pm)
Re: [RFC] Heads up on sys_fallocate(), Christoph Hellwig, (Tue Mar 6, 10:47 am)
Re: [RFC] Heads up on sys_fallocate(), Jan Kara, (Tue Mar 6, 10:50 am)
Re: [RFC] Heads up on sys_fallocate(), Eric Sandeen, (Tue Mar 6, 2:23 pm)
Re: [RFC] Heads up on sys_fallocate(), Jan Kara, (Wed Mar 7, 4:51 am)
Re: [RFC] Heads up on sys_fallocate(), Jörn, (Wed Mar 7, 7:30 am)