summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeil Brown <neilb@suse.de>2007-03-20 11:13:42 +1100
committerNeil Brown <neilb@suse.de>2007-03-20 11:13:42 +1100
commit390e67de5d9fe919d1894359536f0c5527fa2331 (patch)
tree34f3657f5b807b9c1d6a303fcd814ee6cb9487c9
parent3482b1145c2c9a39f1dcaabc32e36eb234b91447 (diff)
downloadnfs-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.c13
-rw-r--r--utils/mount/mount.c5
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) {