Under Linux emulation "/" resolves to real root directory, not /compat/linux directory and I am very curious why this is so. I see that in linux_emul_convpath() there is a special check for this case with the following comment: /* * We now compare the vnode of the linux_root to the one * vnode asked. If they resolve to be the same, then we * ignore the match so that the real root gets used. * This avoids the problem of traversing "../.." to find the * root directory and never finding it, because "/" resolves * to the emulation root directory. This is expensive :-( */ Because of such behavior "mkdir -p" (in linux base 7) is broken in cases where more than one path components needs to be created - mkdir first chdir()s to / and then iteratively mkdir()s and chdir()s to subdirectories. My rationale for throwing out that check is that no linux program should ever need to access real root directory, and in case of a user using an interactive linux shell he should be smart enough to break out of /compat/linux (very easy). I have already posted this question to freebsd-emulation list, but got no responses so far. -- Andriy GaponReceived on Fri Oct 22 2004 - 08:06:33 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:19 UTC