2009-11-05 14:03:42

by Harshula

[permalink] [raw]
Subject: [PATCH] nfs-utils: mount options can be lost when using bg option

Hi,

When mounting an NFS export *without* the "bg" option, try_mount() is
called only once. Before calling it, the variables mount_opts and
extra_opts are set up. Then try_mount() calls nfsmount(), the latter
assumes that the aforementioned variables can be modified. Most
significantly, it allows the variable extra_opts to be modified.

When the "bg" mount option is used *and* the first try_mount() attempt
fails, it daemonizes the process and calls try_mount() again,
unfortunately, we've lost the required mount options in the variable
extra_opts.

See https://bugzilla.redhat.com/show_bug.cgi?id=529370 for details.

Signed-off-by: Harshula Jayasuriya <[email protected]>
---
utils/mount/mount.c | 3 +++
utils/mount/nfsmount.c | 7 +++++--
2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/utils/mount/mount.c b/utils/mount/mount.c
index 355df79..6b9e164 100644
--- a/utils/mount/mount.c
+++ b/utils/mount/mount.c
@@ -593,6 +593,9 @@ int main(int argc, char *argv[])
if (mnt_err == EX_BG) {
printf(_("%s: backgrounding \"%s\"\n"),
progname, spec);
+ printf(_("%s: mount options: \"%s\"\n"),
+ progname, extra_opts);
+
fflush(stdout);

/*
diff --git a/utils/mount/nfsmount.c b/utils/mount/nfsmount.c
index 6355681..6b3356c 100644
--- a/utils/mount/nfsmount.c
+++ b/utils/mount/nfsmount.c
@@ -170,7 +170,7 @@ parse_options(char *old_opts, struct nfs_mount_data *data,
struct pmap *mnt_pmap = &mnt_server->pmap;
struct pmap *nfs_pmap = &nfs_server->pmap;
int len;
- char *opt, *opteq, *p, *opt_b;
+ char *opt, *opteq, *p, *opt_b, *tmp_opts;
char *mounthost = NULL;
char cbuf[128];
int open_quote = 0;
@@ -179,7 +179,8 @@ parse_options(char *old_opts, struct nfs_mount_data *data,
*bg = 0;

len = strlen(new_opts);
- for (p=old_opts, opt_b=NULL; p && *p; p++) {
+ tmp_opts = xstrdup(old_opts);
+ for (p=tmp_opts, opt_b=NULL; p && *p; p++) {
if (!opt_b)
opt_b = p; /* begin of the option item */
if (*p == '"')
@@ -457,10 +458,12 @@ parse_options(char *old_opts, struct nfs_mount_data *data,
goto out_bad;
*mnt_server->hostname = mounthost;
}
+ free(tmp_opts);
return 1;
bad_parameter:
nfs_error(_("%s: Bad nfs mount parameter: %s\n"), progname, opt);
out_bad:
+ free(tmp_opts);
return 0;
}

--

cya,
#



2009-11-16 18:43:21

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH] nfs-utils: mount options can be lost when using bg option



On 11/05/2009 09:03 AM, Harshula Jayasuriya wrote:
> Hi,
>
> When mounting an NFS export *without* the "bg" option, try_mount() is
> called only once. Before calling it, the variables mount_opts and
> extra_opts are set up. Then try_mount() calls nfsmount(), the latter
> assumes that the aforementioned variables can be modified. Most
> significantly, it allows the variable extra_opts to be modified.
>
> When the "bg" mount option is used *and* the first try_mount() attempt
> fails, it daemonizes the process and calls try_mount() again,
> unfortunately, we've lost the required mount options in the variable
> extra_opts.
>
> See https://bugzilla.redhat.com/show_bug.cgi?id=529370 for details.
>
> Signed-off-by: Harshula Jayasuriya <[email protected]>
Committed...

steved.