[Ocfs2-tools-devel] [PATCH 4/6] Fix filesize in create_file

Goldwyn Rodrigues rgoldwyn at gmail.com
Mon Aug 22 15:36:20 PDT 2011


While creating a new file, the filesize is left at zero, even though
there is an extent in the file.
This fix is required because further extents added using
ocfs2_extend_allocation compute the offset based on current filesize.

Signed-off-by: Goldwyn Rodrigues <rgoldwyn at suse.de>
---
 fswreck/extent.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/fswreck/extent.c b/fswreck/extent.c
index e36deb9..f6fade0 100644
--- a/fswreck/extent.c
+++ b/fswreck/extent.c
@@ -44,6 +44,12 @@ void create_file(ocfs2_filesys *fs, uint64_t blkno,
uint64_t *retblkno)
 	errcode_t ret;
 	uint64_t tmp_blkno = 0;
 	char random_name[OCFS2_MAX_FILENAME_LEN];
+	char *buf;
+	struct ocfs2_dinode *di;
+
+	ret = ocfs2_malloc_block(fs->fs_io, &buf);
+	if (ret)
+		FSWRK_COM_FATAL(progname, errno);

 	memset(random_name, 0, sizeof(random_name));
 	sprintf(random_name, "testXXXXXX");
@@ -70,8 +76,20 @@ void create_file(ocfs2_filesys *fs, uint64_t blkno,
uint64_t *retblkno)
 	if (ret)
 		FSWRK_COM_FATAL(progname, ret);

+	/* Fix the i_size of the new file to greater than zero */
+	ret = ocfs2_read_inode(fs, tmp_blkno, buf);
+	if (ret)
+		FSWRK_COM_FATAL(progname, ret);
+	di = (struct ocfs2_dinode *)buf;
+
+	di->i_size = ocfs2_clusters_to_bytes(fs, 1) - 25;
+	ret = ocfs2_write_inode(fs, tmp_blkno, buf);
+	if (ret)
+		FSWRK_COM_FATAL(progname, ret);
+
 	*retblkno = tmp_blkno;

+	ocfs2_free(&buf);
 	return;
 }

-- 
1.7.6



More information about the Ocfs2-tools-devel mailing list