Fixed handling of posix_fallocate() returned value

According to the man pages of posix_fallocate, it returns zero on
success or an error number on failure; however,  errno is not set
on failure. If the kernel or a library other than glibc does not
support the function for example, EOPNOTSUPP will be returned and
the error will not be handled properly with original code.
This commit is contained in:
Guillermo Vidal 2012-05-09 13:43:34 -05:00 committed by Lennart Poettering
parent 927735238d
commit fec2aa2f9e

View file

@ -188,6 +188,7 @@ static int journal_file_verify_header(JournalFile *f) {
static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size) {
uint64_t old_size, new_size;
int r;
assert(f);
@ -232,8 +233,9 @@ static int journal_file_allocate(JournalFile *f, uint64_t offset, uint64_t size)
/* Note that the glibc fallocate() fallback is very
inefficient, hence we try to minimize the allocation area
as we can. */
if (posix_fallocate(f->fd, old_size, new_size - old_size) < 0)
return -errno;
r = posix_fallocate(f->fd, old_size, new_size - old_size);
if (r != 0)
return -r;
if (fstat(f->fd, &f->last_stat) < 0)
return -errno;