Fix crashing under squashfuse_ll read-only mounts (#12301)
Fixes #12300
This commit is contained in:
parent
d49f1fc4db
commit
5af46f3d4e
1
AUTHORS
1
AUTHORS
|
@ -441,6 +441,7 @@ Yao Xiao
|
||||||
Yoav Caspi
|
Yoav Caspi
|
||||||
Yuliang Shao
|
Yuliang Shao
|
||||||
Yusuke Kadowaki
|
Yusuke Kadowaki
|
||||||
|
Yutian Li
|
||||||
Yuval Shimon
|
Yuval Shimon
|
||||||
Zac Hatfield-Dodds
|
Zac Hatfield-Dodds
|
||||||
Zachary Kneupper
|
Zachary Kneupper
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fixed handling of 'Function not implemented' error under squashfuse_ll, which is a different way to say that the mountpoint is read-only.
|
|
@ -1171,7 +1171,10 @@ def try_makedirs(cache_dir: Path) -> bool:
|
||||||
return False
|
return False
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
# as of now, EROFS doesn't have an equivalent OSError-subclass
|
# as of now, EROFS doesn't have an equivalent OSError-subclass
|
||||||
if e.errno == errno.EROFS:
|
#
|
||||||
|
# squashfuse_ll returns ENOSYS "OSError: [Errno 38] Function not
|
||||||
|
# implemented" for a read-only error
|
||||||
|
if e.errno in {errno.EROFS, errno.ENOSYS}:
|
||||||
return False
|
return False
|
||||||
raise
|
raise
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -1972,6 +1972,11 @@ def test_try_makedirs(monkeypatch, tmp_path: Path) -> None:
|
||||||
monkeypatch.setattr(os, "makedirs", partial(fake_mkdir, exc=err))
|
monkeypatch.setattr(os, "makedirs", partial(fake_mkdir, exc=err))
|
||||||
assert not try_makedirs(p)
|
assert not try_makedirs(p)
|
||||||
|
|
||||||
|
err = OSError()
|
||||||
|
err.errno = errno.ENOSYS
|
||||||
|
monkeypatch.setattr(os, "makedirs", partial(fake_mkdir, exc=err))
|
||||||
|
assert not try_makedirs(p)
|
||||||
|
|
||||||
# unhandled OSError should raise
|
# unhandled OSError should raise
|
||||||
err = OSError()
|
err = OSError()
|
||||||
err.errno = errno.ECHILD
|
err.errno = errno.ECHILD
|
||||||
|
|
Loading…
Reference in New Issue