[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 2/6] vvfat: Fix usage of `info.file.offset`
From: |
Amjad Alsharafi |
Subject: |
[PATCH v3 2/6] vvfat: Fix usage of `info.file.offset` |
Date: |
Sun, 26 May 2024 17:56:02 +0800 |
The field is marked as "the offset in the file (in clusters)", but it
was being used like this
`cluster_size*(nums)+mapping->info.file.offset`, which is incorrect.
Additionally, removed the `abort` when `first_mapping_index` does not
match, as this matches the case when adding new clusters for files, and
its inevitable that we reach this condition when doing that if the
clusters are not after one another, so there is no reason to `abort`
here, execution continues and the new clusters are written to disk
correctly.
Signed-off-by: Amjad Alsharafi <amjadsharafi10@gmail.com>
---
block/vvfat.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/block/vvfat.c b/block/vvfat.c
index ab342f0743..cb3ab81e29 100644
--- a/block/vvfat.c
+++ b/block/vvfat.c
@@ -1408,7 +1408,7 @@ read_cluster_directory:
assert(s->current_fd);
-
offset=s->cluster_size*(cluster_num-s->current_mapping->begin)+s->current_mapping->info.file.offset;
+ offset=s->cluster_size*((cluster_num - s->current_mapping->begin) +
s->current_mapping->info.file.offset);
if(lseek(s->current_fd, offset, SEEK_SET)!=offset)
return -3;
s->cluster=s->cluster_buffer;
@@ -1929,8 +1929,8 @@ get_cluster_count_for_direntry(BDRVVVFATState* s,
direntry_t* direntry, const ch
(mapping->mode & MODE_DIRECTORY) == 0) {
/* was modified in qcow */
- if (offset != mapping->info.file.offset + s->cluster_size
- * (cluster_num - mapping->begin)) {
+ if (offset != s->cluster_size
+ * ((cluster_num - mapping->begin) +
mapping->info.file.offset)) {
/* offset of this cluster in file chain has changed */
abort();
copy_it = 1;
@@ -1944,7 +1944,6 @@ get_cluster_count_for_direntry(BDRVVVFATState* s,
direntry_t* direntry, const ch
if (mapping->first_mapping_index != first_mapping_index
&& mapping->info.file.offset > 0) {
- abort();
copy_it = 1;
}
@@ -2404,7 +2403,7 @@ static int commit_mappings(BDRVVVFATState* s,
(mapping->end - mapping->begin);
} else
next_mapping->info.file.offset = mapping->info.file.offset +
- mapping->end - mapping->begin;
+ (mapping->end - mapping->begin);
mapping = next_mapping;
}
--
2.45.0
- [PATCH v3 0/6] vvfat: Fix write bugs for large files and add iotests, Amjad Alsharafi, 2024/05/26
- [PATCH v3 1/6] vvfat: Fix bug in writing to middle of file, Amjad Alsharafi, 2024/05/26
- [PATCH v3 2/6] vvfat: Fix usage of `info.file.offset`,
Amjad Alsharafi <=
- [PATCH v3 3/6] vvfat: Fix reading files with non-continuous clusters, Amjad Alsharafi, 2024/05/26
- [PATCH v3 5/6] iotests: Filter out `vvfat` fmt from failing tests, Amjad Alsharafi, 2024/05/26
- [PATCH v3 4/6] iotests: Add `vvfat` tests, Amjad Alsharafi, 2024/05/26
- [PATCH v3 6/6] iotests: Add `create_file` test for `vvfat` driver, Amjad Alsharafi, 2024/05/26
- Re: [PATCH v3 0/6] vvfat: Fix write bugs for large files and add iotests, Kevin Wolf, 2024/05/31