files-community / files-community/Files
Bug: Show an error dialog when Linux's path limit is reached in WSL2.
- 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'
~~~
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:
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
Assessment
This issue has not been assessed yet.