fix tmpfs 读写错误处理缓冲区偏移

This commit is contained in:
KAAAsS 2022-04-21 01:34:15 +08:00
parent b5d6e2c20b
commit 1890a5d3fa
Signed by: KAAAsS
GPG Key ID: D22F53AF662411FE

View File

@ -334,6 +334,7 @@ ssize_t tfs_file_write(struct inode * inode, off_t offset, const char *data,
u64 page_no, page_off; u64 page_no, page_off;
u64 cur_off = offset; u64 cur_off = offset;
u64 buf_off = 0;
size_t to_write, cur_to_write; size_t to_write, cur_to_write;
void *page; void *page;
@ -359,10 +360,11 @@ ssize_t tfs_file_write(struct inode * inode, off_t offset, const char *data,
radix_add(&inode->data, page_no, page); radix_add(&inode->data, page_no, page);
} }
// 写数据 // 写数据
memcpy(page + page_off, data + cur_off, cur_to_write); memcpy(page + page_off, data + buf_off, cur_to_write);
to_write -= cur_to_write; to_write -= cur_to_write;
cur_off += cur_to_write; cur_off += cur_to_write;
buf_off += cur_to_write;
} }
if (cur_off > inode->size) { if (cur_off > inode->size) {
@ -385,6 +387,7 @@ ssize_t tfs_file_read(struct inode * inode, off_t offset, char *buff,
u64 page_no, page_off; u64 page_no, page_off;
u64 cur_off = offset; u64 cur_off = offset;
u64 buf_off = 0;
size_t to_read, cur_to_read; size_t to_read, cur_to_read;
void *page; void *page;
@ -406,12 +409,13 @@ ssize_t tfs_file_read(struct inode * inode, off_t offset, char *buff,
} }
// 读取数据 // 读取数据
if (page == NULL) { if (page == NULL) {
memset(buff + cur_off, 0, cur_to_read); memset(buff + buf_off, 0, cur_to_read);
} else { } else {
memcpy(buff + cur_off, page + page_off, cur_to_read); memcpy(buff + buf_off, page + page_off, cur_to_read);
} }
to_read -= cur_to_read; to_read -= cur_to_read;
cur_off += cur_to_read; cur_off += cur_to_read;
buf_off += cur_to_read;
} }
return cur_off - offset; return cur_off - offset;