[Ocfs2-tools-devel] [PATCH 1/2] fsck.ocfs2: Use aligned size when do copy_clone.

Tao Ma tao.ma at oracle.com
Sat Oct 10 02:03:35 PDT 2009


Actually ocfs2_file_read and ocfs2_file_write only accept
aligned size as the parameter. So when the file size isn't
aligned, align it first.

Signed-off-by: Tao Ma <tao.ma at oracle.com>
---
 fsck.ocfs2/pass1b.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/fsck.ocfs2/pass1b.c b/fsck.ocfs2/pass1b.c
index 01b5015..b6ece57 100644
--- a/fsck.ocfs2/pass1b.c
+++ b/fsck.ocfs2/pass1b.c
@@ -1090,7 +1090,7 @@ static errcode_t copy_clone(ocfs2_filesys *fs, ocfs2_cached_inode *orig_ci,
 	uint64_t offset = 0;
 	uint64_t filesize = orig_ci->ci_inode->i_size;
 	unsigned int iosize = 1024 * 1024;  /* Let's read in 1MB hunks */
-	unsigned int got, wrote;
+	unsigned int got, wrote, write_len;
 
 	ret = ocfs2_malloc_blocks(fs->fs_io, iosize / fs->fs_blocksize,
 				  &buf);
@@ -1100,15 +1100,15 @@ static errcode_t copy_clone(ocfs2_filesys *fs, ocfs2_cached_inode *orig_ci,
 	}
 
 	while (offset < filesize) {
-		if ((filesize - offset) < iosize)
-			iosize = filesize - offset;
 		ret = ocfs2_file_read(orig_ci, buf, iosize, offset, &got);
 		if (ret) {
 			com_err(whoami, ret, "while reading inode to clone");
 			break;
 		}
 
-		ret = ocfs2_file_write(clone_ci, buf, iosize, offset, &wrote);
+		write_len = ocfs2_blocks_in_bytes(fs, got) * fs->fs_blocksize;
+		ret = ocfs2_file_write(clone_ci, buf, write_len,
+				       offset, &wrote);
 		if (ret) {
 			com_err(whoami, ret, "while writing clone data");
 			break;
-- 
1.5.5




More information about the Ocfs2-tools-devel mailing list