All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Amit K. Arora" <aarora@linux.vnet.ibm.com>
To: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-ext4@vger.kernel.org
Cc: David Chinner <dgc@sgi.com>,
	Andreas Dilger <adilger@clusterfs.com>,
	suparna@in.ibm.com, cmm@us.ibm.com, xfs@oss.sgi.com
Subject: [PATCH 5/7][TAKE5] ext4: fallocate support in ext4
Date: Mon, 25 Jun 2007 19:18:11 +0530	[thread overview]
Message-ID: <20070625134811.GF1951@amitarora.in.ibm.com> (raw)
In-Reply-To: <20070625132810.GA1951@amitarora.in.ibm.com>

This patch implements ->fallocate() inode operation in ext4. With this
patch users of ext4 file systems will be able to use fallocate() system
call for persistent preallocation.

Current implementation only supports preallocation for regular files
(directories not supported as of date) with extent maps. This patch
does not support block-mapped files currently.

Only FA_ALLOCATE mode is being supported as of now. Supporting
FA_DEALLOCATE mode is a <ToDo> item.

Changelog:
---------
Changes from Take3 to Take4:
 1) Changed ext4_fllocate() declaration and definition to return a
"long"
    and not an "int", to match with ->fallocate() inode op.
 2) Update ctime if new blocks get allocated.
Changes from Take2 to Take3:
 1) Patch rebased to 2.6.22-rc1 kernel version.
 2) Removed unnecessary "EXPORT_SYMBOL(ext4_fallocate);".
Changes from Take1 to Take2:
 1) Added more description for ext4_fallocate().
 2) Now returning EOPNOTSUPP when files are block-mapped (non-extent).
 3) Moved journal_start & journal_stop inside the while loop.
 4) Replaced BUG_ON with WARN_ON & ext4_error.
 5) Make EXT4_BLOCK_ALIGN use ALIGN macro internally.
 6) Added variable names in the function declaration of ext4_fallocate()
 7) Converted macros that handle uninitialized extents into inline
    functions.


Signed-off-by: Amit Arora <aarora@in.ibm.com>

Index: linux-2.6.22-rc4/fs/ext4/extents.c
===================================================================
--- linux-2.6.22-rc4.orig/fs/ext4/extents.c
+++ linux-2.6.22-rc4/fs/ext4/extents.c
@@ -316,7 +316,7 @@ static void ext4_ext_show_path(struct in
 		} else if (path->p_ext) {
 			ext_debug("  %d:%d:%llu ",
 				  le32_to_cpu(path->p_ext->ee_block),
-				  le16_to_cpu(path->p_ext->ee_len),
+				  ext4_ext_get_actual_len(path->p_ext),
 				  ext_pblock(path->p_ext));
 		} else
 			ext_debug("  []");
@@ -339,7 +339,7 @@ static void ext4_ext_show_leaf(struct in
 
 	for (i = 0; i < le16_to_cpu(eh->eh_entries); i++, ex++) {
 		ext_debug("%d:%d:%llu ", le32_to_cpu(ex->ee_block),
-			  le16_to_cpu(ex->ee_len), ext_pblock(ex));
+			  ext4_ext_get_actual_len(ex), ext_pblock(ex));
 	}
 	ext_debug("\n");
 }
@@ -455,7 +455,7 @@ ext4_ext_binsearch(struct inode *inode, 
 	ext_debug("  -> %d:%llu:%d ",
 			le32_to_cpu(path->p_ext->ee_block),
 			ext_pblock(path->p_ext),
-			le16_to_cpu(path->p_ext->ee_len));
+			ext4_ext_get_actual_len(path->p_ext));
 
 #ifdef CHECK_BINSEARCH
 	{
@@ -713,7 +713,7 @@ static int ext4_ext_split(handle_t *hand
 		ext_debug("move %d:%llu:%d in new leaf %llu\n",
 				le32_to_cpu(path[depth].p_ext->ee_block),
 				ext_pblock(path[depth].p_ext),
-				le16_to_cpu(path[depth].p_ext->ee_len),
+				ext4_ext_get_actual_len(path[depth].p_ext),
 				newblock);
 		/*memmove(ex++, path[depth].p_ext++,
 				sizeof(struct ext4_extent));
@@ -1133,7 +1133,19 @@ static int
 ext4_can_extents_be_merged(struct inode *inode, struct ext4_extent *ex1,
 				struct ext4_extent *ex2)
 {
-	if (le32_to_cpu(ex1->ee_block) + le16_to_cpu(ex1->ee_len) !=
+	unsigned short ext1_ee_len, ext2_ee_len;
+
+	/*
+	 * Make sure that either both extents are uninitialized, or
+	 * both are _not_.
+	 */
+	if (ext4_ext_is_uninitialized(ex1) ^ ext4_ext_is_uninitialized(ex2))
+		return 0;
+
+	ext1_ee_len = ext4_ext_get_actual_len(ex1);
+	ext2_ee_len = ext4_ext_get_actual_len(ex2);
+
+	if (le32_to_cpu(ex1->ee_block) + ext1_ee_len !=
 			le32_to_cpu(ex2->ee_block))
 		return 0;
 
@@ -1142,14 +1154,14 @@ ext4_can_extents_be_merged(struct inode 
 	 * as an RO_COMPAT feature, refuse to merge to extents if
 	 * this can result in the top bit of ee_len being set.
 	 */
-	if (le16_to_cpu(ex1->ee_len) + le16_to_cpu(ex2->ee_len) > EXT_MAX_LEN)
+	if (ext1_ee_len + ext2_ee_len > EXT_MAX_LEN)
 		return 0;
 #ifdef AGGRESSIVE_TEST
 	if (le16_to_cpu(ex1->ee_len) >= 4)
 		return 0;
 #endif
 
-	if (ext_pblock(ex1) + le16_to_cpu(ex1->ee_len) == ext_pblock(ex2))
+	if (ext_pblock(ex1) + ext1_ee_len == ext_pblock(ex2))
 		return 1;
 	return 0;
 }
@@ -1171,7 +1183,7 @@ unsigned int ext4_ext_check_overlap(stru
 	unsigned int ret = 0;
 
 	b1 = le32_to_cpu(newext->ee_block);
-	len1 = le16_to_cpu(newext->ee_len);
+	len1 = ext4_ext_get_actual_len(newext);
 	depth = ext_depth(inode);
 	if (!path[depth].p_ext)
 		goto out;
@@ -1218,8 +1230,9 @@ int ext4_ext_insert_extent(handle_t *han
 	struct ext4_extent *nearex; /* nearest extent */
 	struct ext4_ext_path *npath = NULL;
 	int depth, len, err, next;
+	unsigned uninitialized = 0;
 
-	BUG_ON(newext->ee_len == 0);
+	BUG_ON(ext4_ext_get_actual_len(newext) == 0);
 	depth = ext_depth(inode);
 	ex = path[depth].p_ext;
 	BUG_ON(path[depth].p_hdr == NULL);
@@ -1227,14 +1240,24 @@ int ext4_ext_insert_extent(handle_t *han
 	/* try to insert block into found extent and return */
 	if (ex && ext4_can_extents_be_merged(inode, ex, newext)) {
 		ext_debug("append %d block to %d:%d (from %llu)\n",
-				le16_to_cpu(newext->ee_len),
+				ext4_ext_get_actual_len(newext),
 				le32_to_cpu(ex->ee_block),
-				le16_to_cpu(ex->ee_len), ext_pblock(ex));
+				ext4_ext_get_actual_len(ex), ext_pblock(ex));
 		err = ext4_ext_get_access(handle, inode, path + depth);
 		if (err)
 			return err;
-		ex->ee_len = cpu_to_le16(le16_to_cpu(ex->ee_len)
-					 + le16_to_cpu(newext->ee_len));
+
+		/*
+		 * ext4_can_extents_be_merged should have checked that either
+		 * both extents are uninitialized, or both aren't. Thus we
+		 * need to check only one of them here.
+		 */
+		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(newext));
+		if (uninitialized)
+			ext4_ext_mark_uninitialized(ex);
 		eh = path[depth].p_hdr;
 		nearex = ex;
 		goto merge;
@@ -1290,7 +1313,7 @@ has_space:
 		ext_debug("first extent in the leaf: %d:%llu:%d\n",
 				le32_to_cpu(newext->ee_block),
 				ext_pblock(newext),
-				le16_to_cpu(newext->ee_len));
+				ext4_ext_get_actual_len(newext));
 		path[depth].p_ext = EXT_FIRST_EXTENT(eh);
 	} else if (le32_to_cpu(newext->ee_block)
 			   > le32_to_cpu(nearex->ee_block)) {
@@ -1303,7 +1326,7 @@ has_space:
 					"move %d from 0x%p to 0x%p\n",
 					le32_to_cpu(newext->ee_block),
 					ext_pblock(newext),
-					le16_to_cpu(newext->ee_len),
+					ext4_ext_get_actual_len(newext),
 					nearex, len, nearex + 1, nearex + 2);
 			memmove(nearex + 2, nearex + 1, len);
 		}
@@ -1316,7 +1339,7 @@ has_space:
 				"move %d from 0x%p to 0x%p\n",
 				le32_to_cpu(newext->ee_block),
 				ext_pblock(newext),
-				le16_to_cpu(newext->ee_len),
+				ext4_ext_get_actual_len(newext),
 				nearex, len, nearex + 1, nearex + 2);
 		memmove(nearex + 1, nearex, len);
 		path[depth].p_ext = nearex;
@@ -1335,8 +1358,13 @@ merge:
 		if (!ext4_can_extents_be_merged(inode, nearex, nearex + 1))
 			break;
 		/* merge with next extent! */
-		nearex->ee_len = cpu_to_le16(le16_to_cpu(nearex->ee_len)
-					     + le16_to_cpu(nearex[1].ee_len));
+		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);
@@ -1406,8 +1434,8 @@ int ext4_ext_walk_space(struct inode *in
 			end = le32_to_cpu(ex->ee_block);
 			if (block + num < end)
 				end = block + num;
-		} else if (block >=
-			     le32_to_cpu(ex->ee_block) + le16_to_cpu(ex->ee_len)) {
+		} else if (block >= le32_to_cpu(ex->ee_block)
+					+ ext4_ext_get_actual_len(ex)) {
 			/* need to allocate space after found extent */
 			start = block;
 			end = block + num;
@@ -1419,7 +1447,8 @@ int ext4_ext_walk_space(struct inode *in
 			 * by found extent
 			 */
 			start = block;
-			end = le32_to_cpu(ex->ee_block) + le16_to_cpu(ex->ee_len);
+			end = le32_to_cpu(ex->ee_block)
+				+ ext4_ext_get_actual_len(ex);
 			if (block + num < end)
 				end = block + num;
 			exists = 1;
@@ -1435,7 +1464,7 @@ int ext4_ext_walk_space(struct inode *in
 			cbex.ec_type = EXT4_EXT_CACHE_GAP;
 		} else {
 			cbex.ec_block = le32_to_cpu(ex->ee_block);
-			cbex.ec_len = le16_to_cpu(ex->ee_len);
+			cbex.ec_len = ext4_ext_get_actual_len(ex);
 			cbex.ec_start = ext_pblock(ex);
 			cbex.ec_type = EXT4_EXT_CACHE_EXTENT;
 		}
@@ -1508,15 +1537,15 @@ ext4_ext_put_gap_in_cache(struct inode *
 		ext_debug("cache gap(before): %lu [%lu:%lu]",
 				(unsigned long) block,
 				(unsigned long) le32_to_cpu(ex->ee_block),
-				(unsigned long) le16_to_cpu(ex->ee_len));
+				(unsigned long) ext4_ext_get_actual_len(ex));
 	} else if (block >= le32_to_cpu(ex->ee_block)
-			    + le16_to_cpu(ex->ee_len)) {
+			+ ext4_ext_get_actual_len(ex)) {
 		lblock = le32_to_cpu(ex->ee_block)
-			 + le16_to_cpu(ex->ee_len);
+			+ ext4_ext_get_actual_len(ex);
 		len = ext4_ext_next_allocated_block(path);
 		ext_debug("cache gap(after): [%lu:%lu] %lu",
 				(unsigned long) le32_to_cpu(ex->ee_block),
-				(unsigned long) le16_to_cpu(ex->ee_len),
+				(unsigned long) ext4_ext_get_actual_len(ex),
 				(unsigned long) block);
 		BUG_ON(len == lblock);
 		len = len - lblock;
@@ -1646,12 +1675,12 @@ static int ext4_remove_blocks(handle_t *
 				unsigned long from, unsigned long to)
 {
 	struct buffer_head *bh;
+	unsigned short ee_len =  ext4_ext_get_actual_len(ex);
 	int i;
 
 #ifdef EXTENTS_STATS
 	{
 		struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
-		unsigned short ee_len =  le16_to_cpu(ex->ee_len);
 		spin_lock(&sbi->s_ext_stats_lock);
 		sbi->s_ext_blocks += ee_len;
 		sbi->s_ext_extents++;
@@ -1665,12 +1694,12 @@ static int ext4_remove_blocks(handle_t *
 	}
 #endif
 	if (from >= le32_to_cpu(ex->ee_block)
-	    && to == le32_to_cpu(ex->ee_block) + le16_to_cpu(ex->ee_len) - 1) {
+	    && to == le32_to_cpu(ex->ee_block) + ee_len - 1) {
 		/* tail removal */
 		unsigned long num;
 		ext4_fsblk_t start;
-		num = le32_to_cpu(ex->ee_block) + le16_to_cpu(ex->ee_len) - from;
-		start = ext_pblock(ex) + le16_to_cpu(ex->ee_len) - num;
+		num = le32_to_cpu(ex->ee_block) + ee_len - from;
+		start = ext_pblock(ex) + ee_len - num;
 		ext_debug("free last %lu blocks starting %llu\n", num, start);
 		for (i = 0; i < num; i++) {
 			bh = sb_find_get_block(inode->i_sb, start + i);
@@ -1678,12 +1707,12 @@ static int ext4_remove_blocks(handle_t *
 		}
 		ext4_free_blocks(handle, inode, start, num);
 	} else if (from == le32_to_cpu(ex->ee_block)
-		   && to <= le32_to_cpu(ex->ee_block) + le16_to_cpu(ex->ee_len) - 1) {
+		   && to <= le32_to_cpu(ex->ee_block) + ee_len - 1) {
 		printk("strange request: removal %lu-%lu from %u:%u\n",
-		       from, to, le32_to_cpu(ex->ee_block), le16_to_cpu(ex->ee_len));
+			from, to, le32_to_cpu(ex->ee_block), ee_len);
 	} else {
 		printk("strange request: removal(2) %lu-%lu from %u:%u\n",
-		       from, to, le32_to_cpu(ex->ee_block), le16_to_cpu(ex->ee_len));
+			from, to, le32_to_cpu(ex->ee_block), ee_len);
 	}
 	return 0;
 }
@@ -1698,6 +1727,7 @@ ext4_ext_rm_leaf(handle_t *handle, struc
 	unsigned a, b, block, num;
 	unsigned long ex_ee_block;
 	unsigned short ex_ee_len;
+	unsigned uninitialized = 0;
 	struct ext4_extent *ex;
 
 	/* the header must be checked already in ext4_ext_remove_space() */
@@ -1711,7 +1741,9 @@ ext4_ext_rm_leaf(handle_t *handle, struc
 	ex = EXT_LAST_EXTENT(eh);
 
 	ex_ee_block = le32_to_cpu(ex->ee_block);
-	ex_ee_len = le16_to_cpu(ex->ee_len);
+	if (ext4_ext_is_uninitialized(ex))
+		uninitialized = 1;
+	ex_ee_len = ext4_ext_get_actual_len(ex);
 
 	while (ex >= EXT_FIRST_EXTENT(eh) &&
 			ex_ee_block + ex_ee_len > start) {
@@ -1779,6 +1811,8 @@ ext4_ext_rm_leaf(handle_t *handle, struc
 
 		ex->ee_block = cpu_to_le32(block);
 		ex->ee_len = cpu_to_le16(num);
+		if (uninitialized)
+			ext4_ext_mark_uninitialized(ex);
 
 		err = ext4_ext_dirty(handle, inode, path + depth);
 		if (err)
@@ -1788,7 +1822,7 @@ ext4_ext_rm_leaf(handle_t *handle, struc
 				ext_pblock(ex));
 		ex--;
 		ex_ee_block = le32_to_cpu(ex->ee_block);
-		ex_ee_len = le16_to_cpu(ex->ee_len);
+		ex_ee_len = ext4_ext_get_actual_len(ex);
 	}
 
 	if (correct_index && eh->eh_entries)
@@ -2062,7 +2096,7 @@ int ext4_ext_get_blocks(handle_t *handle
 	if (ex) {
 		unsigned long ee_block = le32_to_cpu(ex->ee_block);
 		ext4_fsblk_t ee_start = ext_pblock(ex);
-		unsigned short ee_len  = le16_to_cpu(ex->ee_len);
+		unsigned short ee_len;
 
 		/*
 		 * Allow future support for preallocated extents to be added
@@ -2070,8 +2104,9 @@ int ext4_ext_get_blocks(handle_t *handle
 		 * Uninitialized extents are treated as holes, except that
 		 * we avoid (fail) allocating new blocks during a write.
 		 */
-		if (ee_len > EXT_MAX_LEN)
+		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) {
 			newblock = iblock - ee_block + ee_start;
@@ -2079,8 +2114,11 @@ 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);
-			ext4_ext_put_in_cache(inode, ee_block, ee_len,
-						ee_start, EXT4_EXT_CACHE_EXTENT);
+			/* Do not put uninitialized extent in the cache */
+			if (!ext4_ext_is_uninitialized(ex))
+				ext4_ext_put_in_cache(inode, ee_block,
+							ee_len, ee_start,
+							EXT4_EXT_CACHE_EXTENT);
 			goto out;
 		}
 	}
@@ -2122,6 +2160,8 @@ int ext4_ext_get_blocks(handle_t *handle
 	/* try to insert new extent into found leaf and return */
 	ext4_ext_store_pblock(&newex, newblock);
 	newex.ee_len = cpu_to_le16(allocated);
+	if (create == EXT4_CREATE_UNINITIALIZED_EXT)  /* Mark uninitialized */
+		ext4_ext_mark_uninitialized(&newex);
 	err = ext4_ext_insert_extent(handle, inode, path, &newex);
 	if (err) {
 		/* free data blocks we just allocated */
@@ -2137,8 +2177,10 @@ int ext4_ext_get_blocks(handle_t *handle
 	newblock = ext_pblock(&newex);
 	__set_bit(BH_New, &bh_result->b_state);
 
-	ext4_ext_put_in_cache(inode, iblock, allocated, newblock,
-				EXT4_EXT_CACHE_EXTENT);
+	/* Cache only when it is _not_ an uninitialized extent */
+	if (create != EXT4_CREATE_UNINITIALIZED_EXT)
+		ext4_ext_put_in_cache(inode, iblock, allocated, newblock,
+						EXT4_EXT_CACHE_EXTENT);
 out:
 	if (allocated > max_blocks)
 		allocated = max_blocks;
@@ -2241,3 +2283,129 @@ int ext4_ext_writepage_trans_blocks(stru
 
 	return needed;
 }
+
+/*
+ * preallocate space for a file. This implements ext4's fallocate inode
+ * operation, which gets called from sys_fallocate system call.
+ * Currently only FA_ALLOCATE mode is supported on extent based files.
+ * We may have more modes supported in future - like FA_DEALLOCATE, which
+ * tells fallocate to unallocate previously (pre)allocated blocks.
+ * For block-mapped files, posix_fallocate should fall back to the method
+ * of writing zeroes to the required new blocks (the same behavior which is
+ * expected for file systems which do not support fallocate() system call).
+ */
+long ext4_fallocate(struct inode *inode, int mode, loff_t offset, loff_t len)
+{
+	handle_t *handle;
+	ext4_fsblk_t block, max_blocks;
+	ext4_fsblk_t nblocks = 0;
+	int ret = 0;
+	int ret2 = 0;
+	int retries = 0;
+	struct buffer_head map_bh;
+	unsigned int credits, blkbits = inode->i_blkbits;
+
+	/*
+	 * currently supporting (pre)allocate mode for extent-based
+	 * files _only_
+	 */
+	if (mode != FA_ALLOCATE || !(EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL))
+		return -EOPNOTSUPP;
+
+	/* preallocation to directories is currently not supported */
+	if (S_ISDIR(inode->i_mode))
+		return -ENODEV;
+
+	block = offset >> blkbits;
+	max_blocks = (EXT4_BLOCK_ALIGN(len + offset, blkbits) >> blkbits)
+			- block;
+
+	/*
+	 * credits to insert 1 extent into extent tree + buffers to be able to
+	 * modify 1 super block, 1 block bitmap and 1 group descriptor.
+	 */
+	credits = EXT4_DATA_TRANS_BLOCKS(inode->i_sb) + 3;
+retry:
+	while (ret >= 0 && ret < max_blocks) {
+		block = block + ret;
+		max_blocks = max_blocks - ret;
+		handle = ext4_journal_start(inode, credits);
+		if (IS_ERR(handle)) {
+			ret = PTR_ERR(handle);
+			break;
+		}
+
+		ret = ext4_ext_get_blocks(handle, inode, block,
+					  max_blocks, &map_bh,
+					  EXT4_CREATE_UNINITIALIZED_EXT, 0);
+		WARN_ON(!ret);
+		if (!ret) {
+			ext4_error(inode->i_sb, "ext4_fallocate",
+				   "ext4_ext_get_blocks returned 0! inode#%lu"
+				   ", block=%llu, max_blocks=%llu",
+				   inode->i_ino, block, max_blocks);
+			ret = -EIO;
+			ext4_mark_inode_dirty(handle, inode);
+			ret2 = ext4_journal_stop(handle);
+			break;
+		}
+		if (ret > 0) {
+			/* check wrap through sign-bit/zero here */
+			if ((block + ret) < 0 || (block + ret) < block) {
+				ret = -EIO;
+				ext4_mark_inode_dirty(handle, inode);
+				ret2 = ext4_journal_stop(handle);
+				break;
+			}
+			if (buffer_new(&map_bh) && ((block + ret) >
+			    (EXT4_BLOCK_ALIGN(i_size_read(inode), blkbits)
+			    >> blkbits)))
+					nblocks = nblocks + ret;
+		}
+
+		/* Update ctime if new blocks get allocated */
+		if (nblocks) {
+			struct timespec now;
+			now = current_fs_time(inode->i_sb);
+			if (!timespec_equal(&inode->i_ctime, &now))
+				inode->i_ctime = now;
+		}
+
+		ext4_mark_inode_dirty(handle, inode);
+		ret2 = ext4_journal_stop(handle);
+		if (ret2)
+			break;
+	}
+
+	if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
+		goto retry;
+
+	/*
+	 * Time to update the file size.
+	 * Update only when preallocation was requested beyond the file size.
+	 */
+	if ((offset + len) > i_size_read(inode)) {
+		if (ret > 0) {
+			/*
+			 * if no error, we assume preallocation succeeded
+			 * completely
+			 */
+			mutex_lock(&inode->i_mutex);
+			i_size_write(inode, offset + len);
+			EXT4_I(inode)->i_disksize = i_size_read(inode);
+			mutex_unlock(&inode->i_mutex);
+		} else if (ret < 0 && nblocks) {
+			/* Handle partial allocation scenario */
+			loff_t newsize;
+
+			mutex_lock(&inode->i_mutex);
+			newsize  = (nblocks << blkbits) + i_size_read(inode);
+			i_size_write(inode, EXT4_BLOCK_ALIGN(newsize, blkbits));
+			EXT4_I(inode)->i_disksize = i_size_read(inode);
+			mutex_unlock(&inode->i_mutex);
+		}
+	}
+
+	return ret > 0 ? ret2 : ret;
+}
+
Index: linux-2.6.22-rc4/fs/ext4/file.c
===================================================================
--- linux-2.6.22-rc4.orig/fs/ext4/file.c
+++ linux-2.6.22-rc4/fs/ext4/file.c
@@ -135,5 +135,6 @@ const struct inode_operations ext4_file_
 	.removexattr	= generic_removexattr,
 #endif
 	.permission	= ext4_permission,
+	.fallocate	= ext4_fallocate,
 };
 
Index: linux-2.6.22-rc4/include/linux/ext4_fs.h
===================================================================
--- linux-2.6.22-rc4.orig/include/linux/ext4_fs.h
+++ linux-2.6.22-rc4/include/linux/ext4_fs.h
@@ -102,6 +102,7 @@
 				 EXT4_GOOD_OLD_FIRST_INO : \
 				 (s)->s_first_ino)
 #endif
+#define EXT4_BLOCK_ALIGN(size, blkbits)		ALIGN((size), (1 << (blkbits)))
 
 /*
  * Macro-instructions used to manage fragments
@@ -225,6 +226,11 @@ struct ext4_new_group_data {
 	__u32 free_blocks_count;
 };
 
+/*
+ * Following is used by preallocation code to tell get_blocks() that we
+ * want uninitialzed extents.
+ */
+#define EXT4_CREATE_UNINITIALIZED_EXT		2
 
 /*
  * ioctl commands
@@ -984,6 +990,8 @@ extern int ext4_ext_get_blocks(handle_t 
 extern void ext4_ext_truncate(struct inode *, struct page *);
 extern void ext4_ext_init(struct super_block *);
 extern void ext4_ext_release(struct super_block *);
+extern long ext4_fallocate(struct inode *inode, int mode, loff_t offset,
+			  loff_t len);
 static inline int
 ext4_get_blocks_wrap(handle_t *handle, struct inode *inode, sector_t block,
 			unsigned long max_blocks, struct buffer_head *bh,
Index: linux-2.6.22-rc4/include/linux/ext4_fs_extents.h
===================================================================
--- linux-2.6.22-rc4.orig/include/linux/ext4_fs_extents.h
+++ linux-2.6.22-rc4/include/linux/ext4_fs_extents.h
@@ -188,6 +188,21 @@ ext4_ext_invalidate_cache(struct inode *
 	EXT4_I(inode)->i_cached_extent.ec_type = EXT4_EXT_CACHE_NO;
 }
 
+static inline void ext4_ext_mark_uninitialized(struct ext4_extent *ext)
+{
+	ext->ee_len |= cpu_to_le16(0x8000);
+}
+
+static inline int ext4_ext_is_uninitialized(struct ext4_extent *ext)
+{
+	return (int)(le16_to_cpu((ext)->ee_len) & 0x8000);
+}
+
+static inline int ext4_ext_get_actual_len(struct ext4_extent *ext)
+{
+	return (int)(le16_to_cpu((ext)->ee_len) & 0x7FFF);
+}
+
 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 unsigned int ext4_ext_check_overlap(struct inode *, struct ext4_extent *, struct ext4_ext_path *);

  parent reply	other threads:[~2007-06-25 13:48 UTC|newest]

Thread overview: 340+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-17  9:46 [Resubmit][Patch 0/2] Persistent preallocation in ext4 Amit K. Arora
2007-01-17 10:13 ` [Patch 1/2] ioctl and uninitialized extents Amit K. Arora
2007-01-17 10:18 ` [Patch 2/2] support for writing to uninitialized extent Amit K. Arora
2007-01-17 22:20 ` [Resubmit][Patch 0/2] Persistent preallocation in ext4 Mingming Cao
2007-01-17 22:33   ` Eric Sandeen
2007-01-18  6:08   ` Amit K. Arora
2007-01-19  9:11 ` Amit K. Arora
2007-01-19  9:17 ` patch for fsx-linux Amit K. Arora
2007-01-19  9:22 ` small tool for unit testing Amit K. Arora
2007-02-07  7:48 ` Testing ext4 persistent preallocation patches for 64 bit features Amit K. Arora
2007-02-07  8:25   ` Mingming Cao
2007-02-07 10:36     ` Suparna Bhattacharya
2007-02-07 21:11       ` Andreas Dilger
2007-02-08  8:52         ` Amit K. Arora
2007-02-08 10:51     ` Amit K. Arora
2007-02-25 10:23 ` [Resubmit][Patch 0/2] Persistent preallocation in ext4 Andrew Morton
2007-03-01 18:34   ` [RFC] Heads up on sys_fallocate() Amit K. Arora
2007-03-01 19:15     ` Eric Sandeen
2007-03-02 10:45       ` Andreas Dilger
2007-03-02 13:17         ` Dave Kleikamp
2007-03-01 20:23     ` Jeff Garzik
2007-03-01 20:31       ` Jeremy Allison
2007-03-01 21:14     ` Jeremy Fitzhardinge
2007-03-01 22:58       ` Alan
2007-03-01 22:05         ` Jeremy Fitzhardinge
2007-03-01 23:11           ` Alan
2007-03-01 22:15             ` Jeremy Fitzhardinge
2007-03-01 22:25     ` Andrew Morton
2007-03-01 22:40       ` Nathan Scott
2007-03-01 22:39         ` Eric Sandeen
2007-03-01 22:52         ` Andrew Morton
2007-03-02 18:28           ` Mingming Cao
2007-03-05 12:27             ` Jan Kara
2007-03-05 20:02               ` Mingming Cao
2007-03-06  7:28                 ` Christoph Hellwig
2007-03-06 14:36                   ` Ulrich Drepper
2007-03-06 14:47                     ` Christoph Hellwig
2007-03-06 14:50                     ` Jan Kara
2007-03-06 18:23                       ` Eric Sandeen
2007-03-07  8:51                         ` Jan Kara
2007-03-07 11:30                           ` Jörn Engel
2007-03-06 16:46                     ` Eric Sandeen
2007-03-13 23:46                       ` David Chinner
2007-03-05 21:41               ` Eric Sandeen
2007-03-01 22:41       ` Anton Blanchard
2007-03-01 22:44       ` Dave Kleikamp
2007-03-01 22:59         ` Andrew Morton
2007-03-01 23:09           ` Dave Kleikamp
2007-03-02 13:41             ` Jan Engelhardt
2007-03-02 18:09             ` Mingming Cao
2007-03-02  7:09           ` Ulrich Drepper
2007-03-01 23:38         ` Christoph Hellwig
2007-03-03 22:45           ` Arnd Bergmann
2007-03-04 20:11             ` Anton Altaparmakov
2007-03-04 20:53               ` Arnd Bergmann
2007-03-04 20:53                 ` Arnd Bergmann
2007-03-04 22:38               ` Ulrich Drepper
2007-03-04 23:22                 ` Anton Altaparmakov
2007-03-05 14:37                   ` Theodore Tso
2007-03-05 15:07                     ` Anton Altaparmakov
2007-03-05 15:15                     ` Ulrich Drepper
2007-03-05 15:35                       ` Christoph Hellwig
2007-03-05 16:01                       ` Theodore Tso
2007-03-05 16:07                         ` Ulrich Drepper
2007-03-05  0:16                 ` Jörn Engel
2007-03-05  0:16                   ` Jörn Engel
2007-03-05  0:32                   ` Anton Altaparmakov
2007-03-05  0:35                     ` Anton Altaparmakov
2007-03-05  0:44                     ` Arnd Bergmann
2007-03-05 11:49                     ` Jörn Engel
2007-03-05 11:49                       ` Jörn Engel
2007-03-05 15:09                       ` Ulrich Drepper
2007-03-05  0:36                   ` Arnd Bergmann
2007-03-05 11:41                     ` Jörn Engel
2007-03-05 15:08                       ` Ulrich Drepper
2007-03-05 15:33                         ` Jörn Engel
2007-03-05 15:33                           ` Jörn Engel
2007-03-05 15:48                           ` Ulrich Drepper
2007-03-05 22:00                       ` Eric Sandeen
2007-03-05  4:23               ` Christoph Hellwig
2007-03-05 13:18             ` Christoph Hellwig
2007-03-01 23:29     ` Eric Sandeen
2007-03-01 23:51       ` Christoph Hellwig
2007-03-01 23:36     ` Christoph Hellwig
2007-03-02  6:03     ` Badari Pulavarty
2007-03-02  6:16       ` Andrew Morton
2007-03-02 13:23         ` Dave Kleikamp
2007-03-02 15:29           ` Ulrich Drepper
2007-03-02 15:16       ` Eric Sandeen
2007-03-02 16:13         ` Badari Pulavarty
2007-03-02 17:01           ` Andrew Morton
2007-03-02 17:19           ` Eric Sandeen
2007-03-16 14:31     ` [RFC][PATCH] sys_fallocate() system call Amit K. Arora
2007-03-16 15:21       ` Heiko Carstens
2007-03-19  9:24         ` Amit K. Arora
2007-03-19 11:23           ` Heiko Carstens
2007-03-16 16:17       ` Heiko Carstens
2007-03-17  9:59         ` Paul Mackerras
2007-03-17 11:07           ` Matthew Wilcox
2007-03-17 14:30             ` Heiko Carstens
2007-03-17 14:38               ` Stephen Rothwell
2007-03-17 14:42                 ` Stephen Rothwell
2007-03-17 11:10         ` Matthew Wilcox
2007-03-21 12:04           ` Amit K. Arora
2007-03-21 21:35             ` Chris Wedgwood
2007-03-29 11:51             ` Interface for the new fallocate() " Amit K. Arora
2007-03-29 16:35               ` Chris Wedgwood
2007-03-29 17:01               ` Jan Engelhardt
2007-03-29 17:18                 ` linux-os (Dick Johnson)
2007-03-29 17:18                   ` linux-os (Dick Johnson)
2007-03-29 18:05                   ` Jan Engelhardt
2007-03-29 18:37                     ` Linus Torvalds
2007-03-30  7:00                 ` Heiko Carstens
2007-03-29 17:10               ` Andrew Morton
2007-03-30  7:14                 ` Jakub Jelinek
2007-03-30  8:39                   ` Heiko Carstens
2007-03-30  8:39                   ` Heiko Carstens
2007-03-30  9:15                   ` Paul Mackerras
2007-03-30  9:15                   ` Paul Mackerras
2007-04-05 11:26                   ` Amit K. Arora
2007-04-05 11:44                     ` Amit K. Arora
2007-04-05 15:50                     ` Randy Dunlap
2007-04-06  9:58                     ` Andreas Dilger
2007-04-17 12:55                   ` Amit K. Arora
2007-04-18 13:06                     ` Andreas Dilger
2007-04-20 13:51                       ` Amit K. Arora
2007-04-20 14:59                         ` Jakub Jelinek
2007-04-24 12:16                           ` Amit K. Arora
2007-04-26 17:50                             ` [PATCH 0/5] fallocate " Amit K. Arora
2007-04-26 18:03                               ` [PATCH 1/5] fallocate() implementation in i86, x86_64 and powerpc Amit K. Arora
2007-05-04  4:29                                 ` Andrew Morton
2007-05-04  4:41                                   ` Paul Mackerras
2007-05-09 10:15                                     ` Suparna Bhattacharya
2007-05-09 10:50                                       ` Paul Mackerras
2007-05-09 11:10                                         ` Suparna Bhattacharya
2007-05-09 11:37                                           ` Paul Mackerras
2007-05-09 12:00                                             ` Martin Schwidefsky
2007-05-09 12:05                                             ` Amit K. Arora
2007-05-04  4:55                                   ` Andrew Morton
2007-05-04  6:07                                   ` David Chinner
2007-05-04  6:28                                     ` Andrew Morton
2007-05-04  6:56                                       ` Jakub Jelinek
2007-05-07 13:08                                         ` Ulrich Drepper
2007-05-04  7:27                                       ` David Chinner
2007-05-07 11:10                                       ` Amit K. Arora
2007-05-07 11:03                                   ` Amit K. Arora
2007-05-09 16:01                                 ` Amit K. Arora
2007-05-09 16:54                                   ` Andreas Dilger
2007-05-09 17:07                                   ` Mingming Cao
2007-05-10  0:59                                   ` David Chinner
2007-05-10 11:56                                     ` Amit K. Arora
2007-05-10 22:39                                       ` David Chinner
2007-05-11 11:03                                         ` Suparna Bhattacharya
2007-05-12  8:01                                           ` David Chinner
2007-06-12  6:16                                             ` Amit K. Arora
2007-06-12  8:11                                               ` David Chinner
2007-06-13 23:52                                               ` David Chinner
2007-06-14  9:14                                                 ` Andreas Dilger
2007-06-14 12:04                                                   ` David Chinner
2007-06-14 19:33                                                     ` Andreas Dilger
2007-06-25 13:28                                                       ` [PATCH 0/6][TAKE5] fallocate system call Amit K. Arora
2007-06-25 13:28                                                         ` Amit K. Arora
2007-06-25 13:40                                                         ` [PATCH 1/7][TAKE5] fallocate() implementation on i386, x86_64 and powerpc Amit K. Arora
2007-06-26 19:38                                                           ` Heiko Carstens
2007-06-25 13:42                                                         ` [PATCH 2/7][TAKE5] fallocate() on s390(x) Amit K. Arora
2007-06-26 15:15                                                           ` Heiko Carstens
2007-06-25 13:43                                                         ` [PATCH 3/7][TAKE5] fallocate() on ia64 Amit K. Arora
2007-06-25 13:45                                                         ` [PATCH 4/7][TAKE5] support new modes in fallocate Amit K. Arora
2007-06-25 15:03                                                           ` Amit K. Arora
2007-06-25 21:46                                                             ` Andreas Dilger
2007-06-26 10:32                                                               ` Amit K. Arora
2007-06-26 15:34                                                                 ` Andreas Dilger
2007-06-26 19:09                                                                   ` Amit K. Arora
2007-06-26 23:18                                                                   ` David Chinner
2007-06-28 18:19                                                                     ` Amit K. Arora
2007-06-28 23:39                                                                       ` Nathan Scott
2007-06-29  1:03                                                                       ` David Chinner
2007-06-30 10:21                                                                 ` Christoph Hellwig
2007-06-30 16:52                                                                   ` Andreas Dilger
2007-07-03 10:08                                                                     ` Amit K. Arora
2007-07-03 10:31                                                                       ` Christoph Hellwig
2007-07-03 11:46                                                                         ` Amit K. Arora
2007-07-04  5:37                                                                           ` Timothy Shimmin
2007-07-11  9:04                                                                             ` Christoph Hellwig
2007-07-11  9:03                                                                           ` Christoph Hellwig
2007-07-12  7:28                                                                             ` Suparna Bhattacharya
2007-07-12  8:26                                                                               ` Amit K. Arora
2007-07-12 14:40                                                                                 ` Andreas Dilger
2007-07-12 13:13                                                                               ` David Chinner
2007-07-12 14:15                                                                                 ` Amit K. Arora
2007-07-01 22:55                                                                   ` David Chinner
2007-07-02 11:47                                                                     ` Amit K. Arora
2007-07-11  9:05                                                                     ` Christoph Hellwig
2007-06-26 23:14                                                               ` David Chinner
2007-06-27  3:49                                                                 ` Andreas Dilger
2007-06-27 13:36                                                                   ` David Chinner
2007-06-27 23:28                                                                     ` Nathan Scott
2007-06-28  0:39                                                                       ` David Chinner
2007-06-28  0:53                                                                         ` Nathan Scott
2007-06-30 10:26                                                                     ` Christoph Hellwig
2007-06-25 21:52                                                           ` Andreas Dilger
2007-06-26 10:45                                                             ` Amit K. Arora
2007-06-26 15:42                                                               ` Andreas Dilger
2007-06-26 19:12                                                                 ` Amit K. Arora
2007-06-26 23:32                                                                 ` David Chinner
2007-06-26 23:26                                                             ` David Chinner
2007-06-25 13:48                                                         ` Amit K. Arora [this message]
2007-06-25 13:49                                                         ` [PATCH 6/7][TAKE5] ext4: write support for preallocated blocks Amit K. Arora
2007-06-25 13:50                                                         ` [PATCH 7/7][TAKE5] ext4: support new modes Amit K. Arora
2007-06-25 21:56                                                           ` Andreas Dilger
2007-06-26 12:07                                                             ` Amit K. Arora
2007-06-26 16:14                                                               ` Andreas Dilger
2007-06-26 19:29                                                                 ` Amit K. Arora
2007-06-27  0:04                                                                   ` David Chinner
2007-06-28 18:07                                                                     ` Amit K. Arora
2007-06-26 23:15                                                         ` [PATCH 0/6][TAKE5] fallocate system call David Chinner
2007-06-28  9:55                                                         ` Andrew Morton
2007-06-28 17:36                                                           ` Mingming Cao
2007-06-28 17:57                                                           ` Amit K. Arora
2007-06-28 18:33                                                             ` Andrew Morton
2007-06-28 18:45                                                               ` Dave Kleikamp
2007-06-28 18:57                                                               ` Jeff Garzik
2007-06-29  7:20                                                               ` Christoph Hellwig
2007-06-29 13:56                                                               ` Theodore Tso
2007-06-29 14:29                                                                 ` Jeff Garzik
2007-06-29 17:42                                                                   ` Theodore Tso
2007-06-29 15:50                                                                 ` Mingming Caoc
2007-06-29 20:57                                                                   ` Andrew Morton
2007-07-01  7:35                                                                     ` Ext4 patches for 2.6.22-rc6 Mingming Cao
2007-06-28 20:34                                                             ` [PATCH 0/6][TAKE5] fallocate system call Andreas Dilger
2007-06-30 10:14                                                   ` [PATCH 1/5] fallocate() implementation in i86, x86_64 and powerpc Christoph Hellwig
2007-04-26 18:07                               ` [PATCH 2/5] fallocate() on s390 Amit K. Arora
2007-04-26 18:11                               ` [PATCH 3/5] ext4: Extent overlap bugfix Amit K. Arora
2007-05-04  4:30                                 ` Andrew Morton
2007-05-07 11:46                                   ` Amit K. Arora
2007-04-26 18:13                               ` [PATCH 4/5] ext4: fallocate support in ext4 Amit K. Arora
2007-05-04  4:31                                 ` Andrew Morton
2007-05-07 11:37                                   ` Andreas Dilger
2007-05-07 20:58                                     ` Andrew Morton
2007-05-07 22:21                                       ` Andreas Dilger
2007-05-07 22:38                                         ` Andrew Morton
2007-05-07 23:14                                           ` Theodore Tso
2007-05-07 23:31                                             ` Andrew Morton
2007-05-08  0:30                                               ` Mingming Cao
2007-05-07 23:02                                         ` Jeff Garzik
2007-05-07 23:36                                           ` Theodore Tso
2007-05-08  1:07                                           ` Andreas Dilger
2007-05-08  1:25                                             ` Jeff Garzik
2007-05-08  0:00                                       ` Mingming Cao
2007-05-08  0:15                                         ` Andrew Morton
2007-05-08  0:41                                           ` Mingming Cao
2007-05-08  1:43                                             ` Theodore Tso
2007-05-08 16:52                                               ` Andreas Dilger
2007-05-08 17:46                                               ` Mingming Cao
2007-05-14 13:34                                       ` Jan Kara
2007-05-07 12:07                                   ` Amit K. Arora
2007-05-07 15:24                                     ` Dave Kleikamp
2007-05-08 10:52                                       ` Amit K. Arora
2007-05-08 14:47                                         ` Dave Kleikamp
2007-04-26 18:16                               ` [PATCH 5/5] ext4: write support for preallocated blocks/extents Amit K. Arora
2007-05-04  4:32                                 ` Andrew Morton
2007-05-07 12:11                                   ` Amit K. Arora
2007-05-07 12:40                                 ` Pekka Enberg
2007-05-07 13:04                                   ` Amit K. Arora
2007-04-27 12:10                               ` [PATCH 0/5] fallocate system call Heiko Carstens
2007-04-27 14:43                                 ` Jörn Engel
2007-04-27 17:46                                   ` Heiko Carstens
2007-04-27 17:46                                     ` Heiko Carstens
2007-04-27 20:42                                     ` Chris Wedgwood
2007-04-30  0:47                               ` David Chinner
2007-04-30  3:09                                 ` [PATCH] ia64 fallocate syscall David Chinner
2007-04-30  3:11                                 ` [PATCH] XFS ->fallocate() support David Chinner
2007-04-30  3:14                                 ` [PATCH] Add preallocation beyond EOF to fallocate David Chinner
2007-04-30  5:25                                 ` [PATCH 0/5] fallocate system call Chris Wedgwood
2007-04-30  5:56                                   ` David Chinner
2007-04-30  6:01                                     ` Chris Wedgwood
2007-05-02 12:53                                   ` Amit K. Arora
2007-05-03 10:34                                     ` Andreas Dilger
2007-05-03 11:22                                       ` Miquel van Smoorenburg
2007-05-08  2:26                                         ` David Chinner
2007-05-14 13:29                               ` [PATCH 0/5][TAKE2] " Amit K. Arora
2007-05-14 13:29                                 ` Amit K. Arora
     [not found]                                 ` <20070514142820.GA31468@amitarora.in.ibm.com>
2007-05-14 14:45                                   ` [PATCH 1/5][TAKE2] fallocate() implementation on i86, x86_64 and powerpc Amit K. Arora
2007-05-14 23:44                                     ` Stephen Rothwell
2007-05-14 23:44                                       ` Stephen Rothwell
2007-05-15 13:23                                       ` Amit K. Arora
2007-05-18 21:36                                         ` Theodore Tso
2007-05-18 23:10                                           ` Mingming Cao
2007-05-20 12:39                                             ` Dave Kleikamp
2007-05-21  5:38                                               ` Theodore Tso
2007-05-14 14:48                                   ` [PATCH 2/5][TAKE2] fallocate() on s390 Amit K. Arora
2007-05-14 15:33                                     ` [PATCH 2/5][TAKE2] fallocate() on s390 - glibc wrapper Amit K. Arora
2007-05-14 14:50                                   ` [PATCH 3/5][TAKE2] ext4: Extent overlap bugfix Amit K. Arora
2007-05-14 14:52                                   ` [PATCH 4/5][TAKE2] ext4: fallocate support in ext4 Amit K. Arora
2007-05-14 14:54                                   ` [PATCH 5/5][TAKE2] ext4: write support for preallocated blocks Amit K. Arora
2007-05-15  6:31                                 ` [PATCH 0/5][TAKE2] fallocate system call Andreas Dilger
2007-05-15 12:40                                   ` Amit K. Arora
2007-05-15 12:40                                     ` Amit K. Arora
2007-05-15 19:37                               ` [PATCH 0/5][TAKE3] " Amit K. Arora
2007-05-15 19:37                                 ` Amit K. Arora
     [not found]                                 ` <20070515195421.GA2948@amitarora.in.ibm.com>
2007-05-15 20:03                                   ` [PATCH 1/5][TAKE3] fallocate() implementation on i86, x86_64 and powerpc Amit K. Arora
2007-05-16  0:42                                     ` Mingming Cao
2007-05-16 12:31                                       ` Amit K. Arora
2007-05-16  3:16                                     ` David Chinner
2007-05-16 12:21                                       ` Dave Kleikamp
2007-05-16 12:37                                         ` Amit K. Arora
2007-05-16 23:40                                         ` David Chinner
2007-05-17 12:10                                           ` Dave Kleikamp
2007-05-17 12:28                                           ` Amit K. Arora
2007-05-15 20:10                                   ` [PATCH 2/5][TAKE3] fallocate() on s390 Amit K. Arora
2007-05-15 20:13                                   ` [PATCH 3/5][TAKE3] ext4: Extent overlap bugfix Amit K. Arora
2007-05-15 20:16                                   ` [PATCH 4/5][TAKE3] ext4: fallocate support in ext4 Amit K. Arora
2007-05-15 20:18                                   ` [PATCH 5/5][TAKE3] ext4: write support for preallocated blocks Amit K. Arora
2007-05-15 23:52                                 ` [PATCH 0/5][TAKE3] fallocate system call Mingming Cao
2007-05-17 14:11                               ` [PATCH 0/6][TAKE4] " Amit K. Arora
2007-05-17 14:11                                 ` Amit K. Arora
     [not found]                                 ` <20070517141458.GA26641@amitarora.in.ibm.com>
2007-05-17 14:23                                   ` [PATCH 1/6][TAKE4] fallocate() implementation on i86, x86_64 and powerpc Amit K. Arora
2007-05-17 14:25                                   ` [PATCH 2/6][TAKE4] fallocate() on s390 Amit K. Arora
2007-05-17 14:25                                   ` [PATCH 3/6][TAKE4] fallocate() on ia64 Amit K. Arora
2007-05-17 14:26                                   ` [PATCH 4/6][TAKE4] ext4: Extent overlap bugfix Amit K. Arora
2007-05-17 14:29                                   ` [PATCH 5/6][TAKE4] ext4: fallocate support in ext4 Amit K. Arora
2007-05-17 14:30                                   ` [PATCH 6/6][TAKE4] ext4: write support for preallocated blocks Amit K. Arora
2007-05-19  6:44                                 ` [PATCH 0/6][TAKE4] fallocate system call Andrew Morton
2007-05-21  5:24                                   ` Mingming Cao
2007-05-21  5:24                                     ` Mingming Cao
2007-03-30  7:19                 ` Interface for the new fallocate() " Heiko Carstens
2007-03-30  9:15                   ` Paul Mackerras
2007-03-30 10:44                     ` Jörn Engel
2007-03-30 10:44                       ` Jörn Engel
2007-03-30 12:55                       ` Heiko Carstens
2007-03-30 12:55                       ` Heiko Carstens
2007-04-09 13:01                       ` Paul Mackerras
2007-04-09 13:01                         ` Paul Mackerras
2007-04-09 16:34                         ` Jörn Engel
2007-04-09 16:34                           ` Jörn Engel
2007-03-30 10:44                     ` Jörn Engel
2007-03-30  9:15                   ` Paul Mackerras
2007-03-17  5:33       ` [RFC][PATCH] sys_fallocate() " Stephen Rothwell
2007-03-19  9:30         ` Amit K. Arora
2007-03-17 14:53       ` Russell King

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=20070625134811.GF1951@amitarora.in.ibm.com \
    --to=aarora@linux.vnet.ibm.com \
    --cc=adilger@clusterfs.com \
    --cc=cmm@us.ibm.com \
    --cc=dgc@sgi.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=suparna@in.ibm.com \
    --cc=xfs@oss.sgi.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 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.