Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta
#1,694 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 4 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
66/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
docker, linux, rust

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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
[...]
Lingua principale
Rust
Stelle
2.1k
Fork
305
Merge medio
10g 1h
PR unite (30g)
1

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di bytecodealliance/rustix

Tutte le issue di bytecodealliance/rustix

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.