Stream: git-wasmtime

Topic: wasmtime / issue #2973 posix_fallocate truncates file on ...


view this post on Zulip Wasmtime GitHub notifications bot (Jun 08 2021 at 20:57):

zzjas opened issue #2973:

Test Case

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main() {
  int fd = open("non_empty_file.txt", O_RDWR);
  struct stat fs;

  printf("Before fallocate:\n");
  fstat(fd, &fs);
  printf("size is: %lld\n", (long long) fs.st_size);

  int r = posix_fallocate(fd, 0, 0);
  printf("posix_fallocate returns %d\n", r);
  if(r != 0) {
    printf("error is: %s\n", strerror(r));
  }

  printf("After fallocate:\n");
  fstat(fd, &fs);
  printf("size is: %lld\n", (long long) fs.st_size);
}
non_empty_file.txt
Hello, this is a file with some text in it.

Steps to Reproduce

Compile the C program with the clang from wasi-sdk and run it with wasmtime on macOS.

Expected Results

For posix_fallocate(int fd, off_t offset, off_t len), POSIX manual says "If the size of the file is less than offset+len, then the file is increased to this size; otherwise the file size is left unchanged."

Actual Results

When offset+len < file size, wasmtime will keep the file size unchanged on Linux(Ubuntu), but will truncate the file on macOS(Mojave).

Versions and Environment

Wasmtime version or commit: 0.26.0

Operating system: Mac OS X 10.14.6

Architecture: x86

CC: @deian

view this post on Zulip Wasmtime GitHub notifications bot (Jun 08 2021 at 20:57):

zzjas labeled issue #2973:

Test Case

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

int main() {
  int fd = open("non_empty_file.txt", O_RDWR);
  struct stat fs;

  printf("Before fallocate:\n");
  fstat(fd, &fs);
  printf("size is: %lld\n", (long long) fs.st_size);

  int r = posix_fallocate(fd, 0, 0);
  printf("posix_fallocate returns %d\n", r);
  if(r != 0) {
    printf("error is: %s\n", strerror(r));
  }

  printf("After fallocate:\n");
  fstat(fd, &fs);
  printf("size is: %lld\n", (long long) fs.st_size);
}
non_empty_file.txt
Hello, this is a file with some text in it.

Steps to Reproduce

Compile the C program with the clang from wasi-sdk and run it with wasmtime on macOS.

Expected Results

For posix_fallocate(int fd, off_t offset, off_t len), POSIX manual says "If the size of the file is less than offset+len, then the file is increased to this size; otherwise the file size is left unchanged."

Actual Results

When offset+len < file size, wasmtime will keep the file size unchanged on Linux(Ubuntu), but will truncate the file on macOS(Mojave).

Versions and Environment

Wasmtime version or commit: 0.26.0

Operating system: Mac OS X 10.14.6

Architecture: x86

CC: @deian

view this post on Zulip Wasmtime GitHub notifications bot (Jun 08 2021 at 22:48):

sunfishcode commented on issue #2973:

Thanks for the report! It seems there isn't a non-racy way to implement this aspect of posix_fallocate on macOS. I expect we'll need to remove posix_fallocate from WASI entirely. I've [filed an issue in wasi-filesystem[(https://github.com/WebAssembly/wasi-filesystem/issues/19) to track this.

view this post on Zulip Wasmtime GitHub notifications bot (Aug 30 2022 at 15:31):

sunfishcode edited a comment on issue #2973:

Thanks for the report! It seems there isn't a non-racy way to implement this aspect of posix_fallocate on macOS. I expect we'll need to remove posix_fallocate from WASI entirely. I've filed an issue in wasi-filesystem to track this.


Last updated: Dec 23 2024 at 13:07 UTC