diff options
author | Neil Brown <neilb@suse.de> | 2007-03-20 11:13:42 +1100 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2007-03-20 11:13:42 +1100 |
commit | 390e67de5d9fe919d1894359536f0c5527fa2331 (patch) | |
tree | 34f3657f5b807b9c1d6a303fcd814ee6cb9487c9 | |
parent | 3482b1145c2c9a39f1dcaabc32e36eb234b91447 (diff) | |
download | nfs-utils-390e67de5d9fe919d1894359536f0c5527fa2331.tar.gz nfs-utils-390e67de5d9fe919d1894359536f0c5527fa2331.tar.xz nfs-utils-390e67de5d9fe919d1894359536f0c5527fa2331.zip |
Handle -o remount better
On -o remount, we need to update the entry in mtab rather than
add a new one. update_mtab does this so use that.
However it might free some strings that shouldn't be freed, so
stop it from calling free - the program will exit soon anyway
so no exit is needed.
-rw-r--r-- | support/nfs/fstab.c | 13 | ||||
-rw-r--r-- | utils/mount/mount.c | 5 |
2 files changed, 16 insertions, 2 deletions
diff --git a/support/nfs/fstab.c b/support/nfs/fstab.c index ba72a53..aee8e53 100644 --- a/support/nfs/fstab.c +++ b/support/nfs/fstab.c @@ -101,6 +101,7 @@ fstab_head() return &fstab; } +#if 0 static void my_free(const void *s) { if (s) @@ -120,6 +121,7 @@ discard_mntentchn(struct mntentchn *mc0) { free(mc); } } +#endif static void read_mntentchn(mntFILE *mfp, const char *fnam, struct mntentchn *mc0) { @@ -444,7 +446,8 @@ lock_mtab (void) { */ void -update_mtab (const char *dir, struct mntent *instead) { +update_mtab (const char *dir, struct mntent *instead) +{ mntFILE *mfp, *mftmp; const char *fnam = MOUNTED; struct mntentchn mtabhead; /* dummy */ @@ -513,8 +516,14 @@ update_mtab (const char *dir, struct mntent *instead) { } } +#if 0 + /* the chain might have strings copied from 'instead', + * so we cannot safely free it. + * And there is no need anyway because we are going to exit + * shortly. So just don't call discard_mntentchn.... + */ discard_mntentchn(mc0); - +#endif if (fchmod (fileno (mftmp->mntent_fp), S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) < 0) { int errsv = errno; diff --git a/utils/mount/mount.c b/utils/mount/mount.c index 55d60aa..4da9002 100644 --- a/utils/mount/mount.c +++ b/utils/mount/mount.c @@ -179,6 +179,11 @@ int add_mtab(char *fsname, char *mount_point, char *fstype, int flags, char *opt ment.mnt_freq = 0; ment.mnt_passno= 0; + if(flags & MS_REMOUNT) { + update_mtab(ment.mnt_dir, &ment); + return 0; + } + lock_mtab(); if ((mtab = setmntent(MOUNTED, "a+")) == NULL) { |