Hi Martin, thanks for the review!
Am 06.01.2015 um 08:23 schrieb Martin Pitt: > Michael Biebl [2015-01-06 1:34 +0100]: >> +static bool is_mounted(const char *dev_path) { >> + _cleanup_endmntent_ FILE *mtab = NULL; >> + struct mntent *me = NULL; >> + >> + mtab = setmntent("/etc/mtab", "r"); > > Can we rely on /etc/mtab at this point? Should we rather look at > /proc/mounts here? /proc is an API fs and mounted pretty early during boot by systemd, so /proc/mounts is available when the generators run. /etc/mtab should be a symlink to /proc/mounts nowadays so it *should* be available. But you are right, there might be cases when /etc/fstab is still a file and possibly out-of-date, so using /proc/mounts might be safer. I thought about that as well, but... > Also, I think there is a simpler way to check if a dir is a > mountpoint: s1 = stat(dir), s2 = stat(parent(dir)) > (i. e. dir + "/.."), and check > > is_mount = (st.st_dev != st2.st_dev) || > (st.st_dev == st2.st_dev && st.st_ino == st2.st_ino); .. this seems simpler indeed. So let's just use that. Thanks for the hint! > That's the approach that /bin/mountpoint uses, and it avoids relying > on having /etc/mtab, /proc mounted, and doing the iteration. > > The first check is obvious; I think the second check is only needed > for bind mounts, which we could probably even ignore here (but then > again it doesn't hurt to keep it). Nod. >> @@ -83,6 +103,11 @@ int main(int argc, char *argv[]) { >> !path_equal(me->mnt_dir, "/usr")) >> continue; >> >> + /* Don't remount /usr if it hasn't been mounted by the >> initrd */ >> + if (path_equal(me->mnt_dir, "/usr") && >> + !is_mounted("/usr")) >> + continue; >> + > > That looks like a good approach to me indeed. > Will push an updated patch including your suggestion. Michael -- Why is it that all of the instruments seeking intelligent life in the universe are pointed away from Earth?
signature.asc
Description: OpenPGP digital signature