Skip to content

Bug: Show error dialog when Linux path limit is reached in WSL #17251

@RokeJulianLockhart

Description

@RokeJulianLockhart

Description

Firstly, don't confuse this with #17133 (comment). Conceptually, they're similar. However, in a technical sense, they're utterly unrelated. With that disclaimed:

  1. The Problem

    1. If I attempt to enter the directory via the GUI, it fails:

      20250704-2130-36.6605470.mp4
    2. If I manually enter it via the CLI, it succeeds, but I see nothing inside:

      #!/usr/bin/env pwsh
      #Requires -PSEdition Core
      #Requires -Version 7.6
      files-preview '\\wsl.localhost\fedoraremix\mnt\rjlb\fedora\home\RokeJulianLockhart\pathmax_openat_test\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd\ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd'
      Image

      This applies if I (attempt to) enter its subdirectory, too.

    3. Regardless of how I enter it, the context menu doesn't render any entries:

      Image

      This is merely the generic failure state for a wsl mount, though: this is also erroneously displayed when I attempt to access a wsl mount's path despite wsl haveing been --shutdown. This warrants a separate issue, but I can't be bothered to file one.

  2. The Proposed Solution

    I'm not requesting that accessing such paths become possible, because, as bugreports.qt.io/browse/QTBUG-138251 and forum.qt.io/post/828516 well explain, the solutions would probably require some serious co-ordination with WSL. All that I do request is that a banner be implemented which explains to the user that the maximum Linux path limit has been reached, and any files or directories past this limit may be inaccessible, but have not been deleted.

Steps To Reproduce

  1. In a BTRFS filesystem, create a path longer than linux/limits.h's PATH_MAX. Usually, the default is 4096 characters.

    This is easiest when utilising a real Linux OS, but should be possible if you can install Qt 6 on WSL, 1 2 because Qt 6 is what my > PATH_MAX path generator utilises.

    To accomplish this on a real Linux OS, download pathmax.zip 3 (don't worry; it contains source alongside binaries):

    ├── CMakeLists.txt
    ├── fdviewer
    ├── fdviewer.pro
    ├── Makefile
    ├── path_generator_openat
    ├── path_generator_openat.cpp
    ├── path_generator_openat.o
    ├── path_generator_openat.pro
    ├── pathmax_fdviewer.cpp
    ├── pathmax_fdviewer.o
    ├── pathmax_qfilesystemmodel.cpp
    ├── pathmax_qfilesystemmodel.o
    ├── pro.sh
    ├── qfilesystemmodel_test
    └── qfilesystemmodel_test.pro
    
    1 directory, 15 files
    

    Then, invoke:

    #!/usr/bin/env sh
    path_generator_openat "$HOME/path_generator_openat" && \
    fdviewer

    fdviewer spawns a Qt-based GUI to confirm that path generation succeeded. You'll need to introspect approximately 16 directories deep to confirm; until you see deepfile.txt, anyway. It should solely require PT30S or so.

  2. Install the .MSIXBundle from WhitewaterFoundry/Fedora-Remix-for-WSL/releases/tag/42.0.5:

    #!/usr/bin/env pwsh
    #Requires -PSEdition Core
    #Requires -Version 7.6
    If ($IsWindows) { Add-AppxPackage -Path "$LocationToMSIX" } # Usually, `$Env:UserProfile/Downloads`.
  3. On the host, execute the undermentioned:

    #!/usr/bin/env pwsh
    #Requires -PSEdition Core
    If ($IsWindows) { wmic diskdrive list brief }

    4

  4. When the correct filesystem has been identified:

    #!/usr/bin/env pwsh
    #Requires -PSEdition Core
    If ($IsWindows) { sudo wsl --mount \\.\PHYSICALDRIVE1 --bare }
  5. Likewise, on WSL:

    #!/usr/bin/env sh
    sudo lsblk -o NAME,FSTYPE,FSVER,FSAVAIL,MOUNTPOINTS

    This shall return output similar to the undermentioned:

    NAME   FSTYPE FSVER FSAVAIL MOUNTPOINTS
    sda    ext4   1.0
    sdb    ext4   1.0
    sdc    swap   1             [SWAP]
    sdd    ext4   1.0    954.6G /mnt/wslg/distro
                                /
    sde
    ├─sde1 vfat   FAT32
    ├─sde2 ext4   1.0
    ├─sde3 ext4   1.0
    └─sde4 btrfs           1.2T /mnt/rjlb/fedora

    Utilise the output to confirm that the device has been mounted into wsl, then set its path as $dev_id, and define a mount point at $path.

  6. When the correct filesystem has been identified:

    #!/usr/bin/env sh
    sudo mkdir /mnt/$path && \
    sudo mount -t btrfs -o ro /dev/$dev_id /mnt/$path

    5

Files Version

3.9.10.0

Windows Version

10.0.26120.0

User ID

353b71b8-86f9-4fe0-ac0e-e1da114b9349

Log File

debug.log

Footnotes

  1. forum.qt.io/post/761795

  2. forum.qt.io/post/729664

  3. bugreports.qt.io/browse/QTBUG-138251

  4. blog.bryanroessler.com/2020-12-14-btrfs-on-wsl2/

  5. askubuntu.com/revisions/296342/3

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    Status

    🆕 New

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions