[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