journal: apply seek check before resizing window, and refresh stat data if necessary
This commit is contained in:
@@ -296,6 +296,15 @@ static int journal_file_move_to(JournalFile *f, int wt, uint64_t offset, uint64_
|
||||
assert(wt >= 0);
|
||||
assert(wt < _WINDOW_MAX);
|
||||
|
||||
if (offset + size > (uint64_t) f->last_stat.st_size) {
|
||||
/* Hmm, out of range? Let's refresh the fstat() data
|
||||
* first, before we trust that check. */
|
||||
|
||||
if (fstat(f->fd, &f->last_stat) < 0 ||
|
||||
offset + size > (uint64_t) f->last_stat.st_size)
|
||||
return -EADDRNOTAVAIL;
|
||||
}
|
||||
|
||||
w = f->windows + wt;
|
||||
|
||||
if (_likely_(w->ptr &&
|
||||
@@ -331,9 +340,6 @@ static int journal_file_move_to(JournalFile *f, int wt, uint64_t offset, uint64_
|
||||
} else
|
||||
delta = 0;
|
||||
|
||||
if (offset > (uint64_t) f->last_stat.st_size)
|
||||
return -EADDRNOTAVAIL;
|
||||
|
||||
if (offset + size > (uint64_t) f->last_stat.st_size)
|
||||
size = PAGE_ALIGN((uint64_t) f->last_stat.st_size - offset);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user