files-community / files-community/Files

Bug: Show an error dialog when Linux's path limit is reached in WSL2.

Open
#17,251 2 comments 2 reactions 0 assignees View on GitHub
area - file system
Dominant language
C#
Stars
45.4k
Forks
2.9k
Avg merge
19h 1m
Merged PRs (30d)
60

Description

### Description

Firstly, don't confuse this with [`issues/17133`](https://github.com/files-community/Files/issues/17133#issue-3069463559). Conceptually, they're similar. However, in a technical sense, they're utterly unrelated. With that disclaimed:

- #### The Problem

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

https://github.com/user-attachments/assets/a630cbce-c98f-4530-8fb2-df26c1141ddc

1. If I manually enter it via the CLI, it succeeds, but I see nothing inside:

~~~pwsh
#!/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.

1. 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.

- #### The Proposed Solution

I'm not requesting that accessing such paths become possible, because, as [`bugreports.qt.io/browse/QTBUG-138251`](https://bugreports.qt.io/browse/QTBUG-138251?focusedId=896968&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-896968:~:text=This%20is%20less%20about%20interest,depend%20on%20select()%20and%20FD_SETSIZE.) and [`forum.qt.io/post/828516`](https://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, [^qt_wsl_1] [^qt_wsl_2] because Qt 6 is what my > `PATH_MAX` path generator utilises.

[^qt_wsl_1]: [`forum.qt.io/post/761795`][qt_wsl_1]

[qt_wsl_1]: https://forum.qt.io/post/761795

[^qt_wsl_2]: [`forum.qt.io/post/729664`][qt_wsl_2]

[qt_wsl_2]: https://forum.qt.io/post/729664

To accomplish this on a real Linux OS, download [`pathmax.zip`](https://github.com/user-attachments/files/21068775/pathmax.zip) [^zip] (don't worry; it contains source alongside binaries):

[^zip]: [`bugreports.qt.io/browse/QTBUG-138251`][zip]

[zip]: https://bugreports.qt.io/browse/QTBUG-138251#:~:text=discussed%20at%20https://discuss.kde.org/t/what%2Dcomponent%2Ddo%2Dall%2Dkde%2Dapplications%2Dcall%2Dthat%2Dprevents%2Dthem%2Dopening%2Ddirectories%2Dand%2Dfiles%2Dwhose%2Dabsolute%2Dpaths%2Dare%2Dpath%2Dmax%2Ds%2Dvalue/36442/3?u=rokejulianlockhart.-,Attachments,-Options

~~~tree
├── 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:

~~~sh
#!/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.

1. Install the `.MSIXBundle` from [`WhitewaterFoundry/Fedora-Remix-for-WSL/releases/tag/42.0.5`](https://github.com/WhitewaterFoundry/Fedora-Remix-for-WSL/releases/tag/42.0.5):

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

1. On the host, execute the undermentioned:

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

[^wmic]

[^wmic]: [`blog.bryanroessler.com/2020-12-14-btrfs-on-wsl2/`][wmic]

[wmic]: https://blog.bryanroessler.com/2020-12-14-btrfs-on-wsl2/#:~:text=wmic%20diskdrive%20list%20brief

1. When the correct filesystem has been identified:

~~~pwsh
#!/usr/bin/env pwsh
#Requires -PSEdition Core
If ($IsWindows) { sudo wsl --mount \\.\PHYSICALDRIVE1 --bare }
~~~

1. Likewise, on WSL:

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

This shall return output similar to the undermentioned:

~~~RS
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`.

1. When the correct filesystem has been identified:

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

[^ro]

[^ro]: [`askubuntu.com/revisions/296342/3`][ro]

[ro]: https://askubuntu.com/revisions/296342/3#content:~:text=sudo%20mount-,%2Do%20ro,-/dev/sda1%20/media/2tb

### Files Version

3.9.10.0

### Windows Version

10.0.26120.0

### User ID

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

### Log File

> [`debug.log`](https://github.com/user-attachments/files/21068796/debug.log)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.