linkOrCopy: Fallback upon cross-device link error (EXDEV)

Fix building derivations in local chroot store on OpenAFS,
where hard linking accross directories causes cross-device link error
(EXDEV).
This commit is contained in:
Yueh-Shun Li 2023-06-30 21:11:59 +08:00
parent a0c617348b
commit eebfe989a5

View file

@ -395,8 +395,9 @@ static void linkOrCopy(const Path & from, const Path & to)
bind-mount in this case? bind-mount in this case?
It can also fail with EPERM in BeegFS v7 and earlier versions It can also fail with EPERM in BeegFS v7 and earlier versions
or fail with EXDEV in OpenAFS
which don't allow hard-links to other directories */ which don't allow hard-links to other directories */
if (errno != EMLINK && errno != EPERM) if (errno != EMLINK && errno != EPERM && errno != EXDEV)
throw SysError("linking '%s' to '%s'", to, from); throw SysError("linking '%s' to '%s'", to, from);
copyPath(from, to); copyPath(from, to);
} }