Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

libc backend: `fs`: `FsWord` does not match `StatFs::f_type` on s390x-musl

Đang mở
#1,694 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 4 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
66/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
docker, linux, rust
Lĩnh vực
operating-systems

Hướng nghiên cứu

Start with src/backend/libc/fs/types.rs and src/fs/fd.rs, comparing the referenced libc and linux_raw definitions for FsWord, StatFs::f_type, and filesystem constants. Run the provided Docker reproducer with the s390x-alpine-linux-musl target first. Done means the s390x-musl cargo check and the shown type comparison compile successfully without breaking the other backends.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

rustix::fs::FsWord in the libc backend mode does not match rustix::fs::StatFs::f_type on s390x-musl, while it matches on other toolchains such as s390x-gnu.

error[E0308]: mismatched types                                                                                                           
 --> src/main.rs:3:27                                                                                                                    
  |                                                                                                                                      
  |     assert_eq!(st.f_type, rustix::fs::PROC_SUPER_MAGIC);                                                                             
  |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `u32`, found `u64`                                                   

Affects:

Relevant code

https://github.com/bytecodealliance/rustix/blob/287214b889865d8e1406a0ee71cc409b6f6191c8/src/fs/fd.rs#L62-L68

libc backend

https://github.com/bytecodealliance/rustix/blob/287214b889865d8e1406a0ee71cc409b6f6191c8/src/backend/libc/fs/types.rs#L1138-L1170
https://github.com/bytecodealliance/rustix/blob/287214b889865d8e1406a0ee71cc409b6f6191c8/src/backend/libc/fs/types.rs#L1081-L1086

linux_raw backend

https://github.com/bytecodealliance/rustix/blob/287214b889865d8e1406a0ee71cc409b6f6191c8/src/backend/linux_raw/fs/types.rs#L837-L851
https://github.com/bytecodealliance/rustix/blob/287214b889865d8e1406a0ee71cc409b6f6191c8/src/backend/linux_raw/fs/types.rs#L763-L801

Reproducer
Dockerfile

# Usage: docker build --platform amd64,arm64,ppc64le,s390x,riscv64,linux/arm/v6,linux/arm/v7 .
#
# On s390x, rustix uses the libc backend by default, which fails to compile.
# Forcing the linux_raw backend compiles fine:
#   docker build --platform s390x \
#     --build-arg RUSTFLAGS="--cfg rustix_use_experimental_asm" \
#     --build-arg RUSTC_BOOTSTRAP=1 .
ARG ALPINE_VERSION=3.24.2
ARG RUSTIX_VERSION=1.1.5

FROM --platform=$BUILDPLATFORM alpine:${ALPINE_VERSION}
RUN apk add --no-cache cargo rust

WORKDIR /repro
ARG RUSTIX_VERSION
RUN cargo init -q --name repro && cargo add -q rustix@=${RUSTIX_VERSION} --features fs
COPY <<RS src/main.rs
fn main() {
    let st = rustix::fs::statfs("/proc").unwrap();
    assert_eq!(st.f_type, rustix::fs::PROC_SUPER_MAGIC);
}
RS

ARG TARGETARCH
ARG TARGETVARIANT
ARG RUSTFLAGS=
ARG RUSTC_BOOTSTRAP=
RUN set -ex; \
    case "$TARGETARCH/$TARGETVARIANT" in \
      amd64/*)     apk_arch=x86_64;  triple=x86_64-alpine-linux-musl           ;; \
      arm64/*)     apk_arch=aarch64; triple=aarch64-alpine-linux-musl          ;; \
      arm/v6)      apk_arch=armhf;   triple=armv6-alpine-linux-musleabihf      ;; \
      arm/v7|arm/) apk_arch=armv7;   triple=armv7-alpine-linux-musleabihf      ;; \
      ppc64le/*)   apk_arch=ppc64le; triple=powerpc64le-alpine-linux-musl      ;; \
      s390x/*)     apk_arch=s390x;   triple=s390x-alpine-linux-musl            ;; \
      riscv64/*)   apk_arch=riscv64; triple=riscv64-alpine-linux-musl          ;; \
      *) echo "unsupported platform $TARGETARCH/$TARGETVARIANT" >&2; exit 1 ;; \
    esac; \
    rustc --print target-list | grep -qx "$triple" \
      || { echo "rustc has no target spec for $triple" >&2; exit 1; }; \
    mkdir -p /sysroot/etc/apk/keys; \
    cp /etc/apk/repositories /sysroot/etc/apk/; \
    echo "$apk_arch" >/sysroot/etc/apk/arch; \
    apk add --no-cache --initdb --root /sysroot --allow-untrusted alpine-keys; \
    apk add --no-cache --root /sysroot rust; \
    ln -s "/sysroot/usr/lib/rustlib/$triple" \
          "$(rustc --print sysroot)/lib/rustlib/$triple"; \
    rc=0; cargo check --target "$triple" || rc=$?; \
    grep -h 'rustc-cfg=\(libc\|linux_raw\)$' target/$triple/debug/build/rustix-*/output; \
    exit $rc

$ docker build --platform s390x .
[...]
8.770  Downloading crates ...
8.846   Downloaded errno v0.3.14
8.858   Downloaded bitflags v2.13.2
8.919   Downloaded rustix v1.1.5
8.943   Downloaded libc v0.2.190
8.988   Downloaded linux-raw-sys v0.12.1
9.030    Compiling libc v0.2.190
9.030    Compiling rustix v1.1.5
9.030     Checking bitflags v2.13.2
9.030     Checking linux-raw-sys v0.12.1
9.583     Checking errno v0.3.14
10.19     Checking repro v0.1.0 (/repro)
10.21 error[E0308]: mismatched types
10.21  --> src/main.rs:3:27
10.21   |
10.21 3 |     assert_eq!(st.f_type, rustix::fs::PROC_SUPER_MAGIC);
10.21   |                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `u32`, found `u64`
10.21   |
10.21 help: you can convert `st.f_type` from `u32` to `u64`, matching the type of `rustix::fs::PROC_SUPER_MAGIC`
10.21   |
10.21 3 |     assert_eq!(u64::from(st.f_type), rustix::fs::PROC_SUPER_MAGIC);
10.21   |                ++++++++++         +
10.21 
10.21 For more information about this error, try `rustc --explain E0308`.
10.21 error: could not compile `repro` (bin "repro") due to 1 previous error
[...]
Ngôn ngữ chính
Rust
Star
2.1k
Fork
301
Merge trung bình
10 ngày 1 giờ
Pull request đã merge (30 ngày)
1

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của bytecodealliance/rustix

Tất cả issue của bytecodealliance/rustix

Issue tương tự

Thêm issue về Rust

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.