2008-01-24 19:40:59

by Miklos Szeredi

[permalink] [raw]
Subject: [patch 21/26] mount options: partially fix nfs

From: Miklos Szeredi <[email protected]>

Add posix, bsize=, namelen= options to /proc/mounts for nfs
filesystems.

Document several other options that are still missing.

Signed-off-by: Miklos Szeredi <[email protected]>
---

Index: linux/fs/nfs/super.c
===================================================================
--- linux.orig/fs/nfs/super.c 2008-01-19 11:56:34.000000000 +0100
+++ linux/fs/nfs/super.c 2008-01-21 20:41:30.000000000 +0100
@@ -449,6 +449,7 @@ static void nfs_show_mount_options(struc
} nfs_info[] = {
{ NFS_MOUNT_SOFT, ",soft", ",hard" },
{ NFS_MOUNT_INTR, ",intr", ",nointr" },
+ { NFS_MOUNT_POSIX, ",posix", "" },
{ NFS_MOUNT_NOCTO, ",nocto", "" },
{ NFS_MOUNT_NOAC, ",noac", "" },
{ NFS_MOUNT_NONLM, ",nolock", "" },
@@ -459,10 +460,17 @@ static void nfs_show_mount_options(struc
};
const struct proc_nfs_info *nfs_infop;
struct nfs_client *clp = nfss->nfs_client;
+ unsigned int default_namelen =
+ clp->rpc_ops->version == 4 ? NFS4_MAXNAMLEN :
+ clp->rpc_ops->version == 3 ? NFS3_MAXNAMLEN : NFS2_MAXNAMLEN;

seq_printf(m, ",vers=%d", clp->rpc_ops->version);
seq_printf(m, ",rsize=%d", nfss->rsize);
seq_printf(m, ",wsize=%d", nfss->wsize);
+ if (nfss->bsize != 0)
+ seq_printf(m, ",bsize=%d", nfss->bsize);
+ if (nfss->namelen != default_namelen)
+ seq_printf(m, ",namelen=%d", nfss->namelen);
if (nfss->acregmin != 3*HZ || showdefaults)
seq_printf(m, ",acregmin=%d", nfss->acregmin/HZ);
if (nfss->acregmax != 60*HZ || showdefaults)
@@ -482,6 +490,18 @@ static void nfs_show_mount_options(struc
seq_printf(m, ",timeo=%lu", 10U * nfss->client->cl_timeout->to_initval / HZ);
seq_printf(m, ",retrans=%u", nfss->client->cl_timeout->to_retries);
seq_printf(m, ",sec=%s", nfs_pseudoflavour_to_name(nfss->client->cl_auth->au_flavor));
+
+ /*
+ * Missing options:
+ * port=
+ * mountport=
+ * mountvers=
+ * mountproto=
+ * addr=
+ * clientaddr=
+ * mounthost=
+ * mountaddr=
+ */
}

/*

--


2008-01-24 20:50:43

by Chuck Lever III

[permalink] [raw]
Subject: Re: [patch 21/26] mount options: partially fix nfs

Hi Miklos-

Miklos Szeredi wrote:
> From: Miklos Szeredi <[email protected]>
>
> Add posix, bsize=, namelen= options to /proc/mounts for nfs
> filesystems.
>
> Document several other options that are still missing.

NFS lists only some options in /proc/mounts on purpose: only the
essential options are mentioned there to keep clutter down. The three
you've added here are for all intents and purposes deprecated, which is
why they are not supported.

NFS lists a more complete set of mount options for a mount point in
/proc/self/mountstats. See nfs_show_stats().

Since your cover letter does not explain why you are changing this code,
can you refer me to a description of why you are doing this?

More below.

> Signed-off-by: Miklos Szeredi <[email protected]>
> ---
>
> Index: linux/fs/nfs/super.c
> ===================================================================
> --- linux.orig/fs/nfs/super.c 2008-01-19 11:56:34.000000000 +0100
> +++ linux/fs/nfs/super.c 2008-01-21 20:41:30.000000000 +0100
> @@ -449,6 +449,7 @@ static void nfs_show_mount_options(struc
> } nfs_info[] = {
> { NFS_MOUNT_SOFT, ",soft", ",hard" },
> { NFS_MOUNT_INTR, ",intr", ",nointr" },
> + { NFS_MOUNT_POSIX, ",posix", "" },
> { NFS_MOUNT_NOCTO, ",nocto", "" },
> { NFS_MOUNT_NOAC, ",noac", "" },
> { NFS_MOUNT_NONLM, ",nolock", "" },
> @@ -459,10 +460,17 @@ static void nfs_show_mount_options(struc
> };
> const struct proc_nfs_info *nfs_infop;
> struct nfs_client *clp = nfss->nfs_client;
> + unsigned int default_namelen =
> + clp->rpc_ops->version == 4 ? NFS4_MAXNAMLEN :
> + clp->rpc_ops->version == 3 ? NFS3_MAXNAMLEN : NFS2_MAXNAMLEN;
>
> seq_printf(m, ",vers=%d", clp->rpc_ops->version);
> seq_printf(m, ",rsize=%d", nfss->rsize);
> seq_printf(m, ",wsize=%d", nfss->wsize);
> + if (nfss->bsize != 0)
> + seq_printf(m, ",bsize=%d", nfss->bsize);
> + if (nfss->namelen != default_namelen)
> + seq_printf(m, ",namelen=%d", nfss->namelen);
> if (nfss->acregmin != 3*HZ || showdefaults)
> seq_printf(m, ",acregmin=%d", nfss->acregmin/HZ);
> if (nfss->acregmax != 60*HZ || showdefaults)
> @@ -482,6 +490,18 @@ static void nfs_show_mount_options(struc
> seq_printf(m, ",timeo=%lu", 10U * nfss->client->cl_timeout->to_initval / HZ);
> seq_printf(m, ",retrans=%u", nfss->client->cl_timeout->to_retries);
> seq_printf(m, ",sec=%s", nfs_pseudoflavour_to_name(nfss->client->cl_auth->au_flavor));
> +
> + /*
> + * Missing options:
> + * port=

Probably should be supported.

> + * addr=

This one is already supported; see nfs_show_options().

> + * clientaddr=

This one isn't, and should be... would be useful for tracking down
certain NFSv4 problems.

> + * mounthost=
> + * mountaddr=
> + * mountport=
> + * mountvers=
> + * mountproto=

And these mount* options are for the kernel's new mount protocol client.
They aren't really useful for understanding steady-state NFS client
behavior, they only effect mount-time behavior.


Attachments:
chuck_lever.vcf (315.00 B)

2008-01-24 20:54:01

by Myklebust, Trond

[permalink] [raw]
Subject: Re: [patch 21/26] mount options: partially fix nfs

On Thu, 2008-01-24 at 20:34 +0100, Miklos Szeredi wrote:
> plain text document attachment (nfs_opts.patch)
> From: Miklos Szeredi <[email protected]>
>
> Add posix, bsize=, namelen= options to /proc/mounts for nfs
> filesystems.
>
> Document several other options that are still missing.
>
> Signed-off-by: Miklos Szeredi <[email protected]>
> ---
>
> Index: linux/fs/nfs/super.c
> ===================================================================
> --- linux.orig/fs/nfs/super.c 2008-01-19 11:56:34.000000000 +0100
> +++ linux/fs/nfs/super.c 2008-01-21 20:41:30.000000000 +0100
> @@ -449,6 +449,7 @@ static void nfs_show_mount_options(struc
> } nfs_info[] = {
> { NFS_MOUNT_SOFT, ",soft", ",hard" },
> { NFS_MOUNT_INTR, ",intr", ",nointr" },
> + { NFS_MOUNT_POSIX, ",posix", "" },
> { NFS_MOUNT_NOCTO, ",nocto", "" },
> { NFS_MOUNT_NOAC, ",noac", "" },
> { NFS_MOUNT_NONLM, ",nolock", "" },
> @@ -459,10 +460,17 @@ static void nfs_show_mount_options(struc
> };
> const struct proc_nfs_info *nfs_infop;
> struct nfs_client *clp = nfss->nfs_client;
> + unsigned int default_namelen =
> + clp->rpc_ops->version == 4 ? NFS4_MAXNAMLEN :
> + clp->rpc_ops->version == 3 ? NFS3_MAXNAMLEN : NFS2_MAXNAMLEN;
> seq_printf(m, ",vers=%d", clp->rpc_ops->version);
> seq_printf(m, ",rsize=%d", nfss->rsize);
> seq_printf(m, ",wsize=%d", nfss->wsize);
> + if (nfss->bsize != 0)
> + seq_printf(m, ",bsize=%d", nfss->bsize);
> + if (nfss->namelen != default_namelen)
> + seq_printf(m, ",namelen=%d", nfss->namelen);

You really just want to look at the value of nfss->namelen. It should
always be set.

> if (nfss->acregmin != 3*HZ || showdefaults)
> seq_printf(m, ",acregmin=%d", nfss->acregmin/HZ);
> if (nfss->acregmax != 60*HZ || showdefaults)
> @@ -482,6 +490,18 @@ static void nfs_show_mount_options(struc
> seq_printf(m, ",timeo=%lu", 10U * nfss->client->cl_timeout->to_initval / HZ);
> seq_printf(m, ",retrans=%u", nfss->client->cl_timeout->to_retries);
> seq_printf(m, ",sec=%s", nfs_pseudoflavour_to_name(nfss->client->cl_auth->au_flavor));
> +
> + /*
> + * Missing options:
> + * port=
> + * mountport=
> + * mountvers=
> + * mountproto=
> + * addr=
> + * clientaddr=
> + * mounthost=
> + * mountaddr=
> + */

The new text mount interface actually does allow us to store these
values if we really do need to. That should be a separate patch,
however.

Trond

2008-01-25 09:39:38

by Miklos Szeredi

[permalink] [raw]
Subject: Re: [patch 21/26] mount options: partially fix nfs

> Miklos Szeredi wrote:
> > From: Miklos Szeredi <[email protected]>
> >
> > Add posix, bsize=, namelen= options to /proc/mounts for nfs
> > filesystems.
> >
> > Document several other options that are still missing.
>
> NFS lists only some options in /proc/mounts on purpose: only the
> essential options are mentioned there to keep clutter down. The three
> you've added here are for all intents and purposes deprecated, which is
> why they are not supported.
>
> NFS lists a more complete set of mount options for a mount point in
> /proc/self/mountstats. See nfs_show_stats().
>
> Since your cover letter does not explain why you are changing this code,
> can you refer me to a description of why you are doing this?

Descritption is in the 01/26 patch.

> More below.
>
> > Signed-off-by: Miklos Szeredi <[email protected]>
> > ---
> >
> > Index: linux/fs/nfs/super.c
> > ===================================================================
> > --- linux.orig/fs/nfs/super.c 2008-01-19 11:56:34.000000000 +0100
> > +++ linux/fs/nfs/super.c 2008-01-21 20:41:30.000000000 +0100
> > @@ -449,6 +449,7 @@ static void nfs_show_mount_options(struc
> > } nfs_info[] = {
> > { NFS_MOUNT_SOFT, ",soft", ",hard" },
> > { NFS_MOUNT_INTR, ",intr", ",nointr" },
> > + { NFS_MOUNT_POSIX, ",posix", "" },
> > { NFS_MOUNT_NOCTO, ",nocto", "" },
> > { NFS_MOUNT_NOAC, ",noac", "" },
> > { NFS_MOUNT_NONLM, ",nolock", "" },
> > @@ -459,10 +460,17 @@ static void nfs_show_mount_options(struc
> > };
> > const struct proc_nfs_info *nfs_infop;
> > struct nfs_client *clp = nfss->nfs_client;
> > + unsigned int default_namelen =
> > + clp->rpc_ops->version == 4 ? NFS4_MAXNAMLEN :
> > + clp->rpc_ops->version == 3 ? NFS3_MAXNAMLEN : NFS2_MAXNAMLEN;
> >
> > seq_printf(m, ",vers=%d", clp->rpc_ops->version);
> > seq_printf(m, ",rsize=%d", nfss->rsize);
> > seq_printf(m, ",wsize=%d", nfss->wsize);
> > + if (nfss->bsize != 0)
> > + seq_printf(m, ",bsize=%d", nfss->bsize);
> > + if (nfss->namelen != default_namelen)
> > + seq_printf(m, ",namelen=%d", nfss->namelen);
> > if (nfss->acregmin != 3*HZ || showdefaults)
> > seq_printf(m, ",acregmin=%d", nfss->acregmin/HZ);
> > if (nfss->acregmax != 60*HZ || showdefaults)
> > @@ -482,6 +490,18 @@ static void nfs_show_mount_options(struc
> > seq_printf(m, ",timeo=%lu", 10U * nfss->client->cl_timeout->to_initval / HZ);
> > seq_printf(m, ",retrans=%u", nfss->client->cl_timeout->to_retries);
> > seq_printf(m, ",sec=%s", nfs_pseudoflavour_to_name(nfss->client->cl_auth->au_flavor));
> > +
> > + /*
> > + * Missing options:
> > + * port=
>
> Probably should be supported.
>
> > + * addr=
>
> This one is already supported; see nfs_show_options().

Right, thanks.

>
> > + * clientaddr=
>
> This one isn't, and should be... would be useful for tracking down
> certain NFSv4 problems.
>
> > + * mounthost=
> > + * mountaddr=
> > + * mountport=
> > + * mountvers=
> > + * mountproto=
>
> And these mount* options are for the kernel's new mount protocol client.
> They aren't really useful for understanding steady-state NFS client
> behavior, they only effect mount-time behavior.

All mount options should be shown, which are needed to reconstruct a
previous mount.

For example, if you copy options out from /proc/mount, umount the
filesystem, and then create a new mount with the copied options, you
should get the same mount.

So not only those options are interesting which are useful for
understanding steady state behavior.

The only options, which should not be shown, are those which have a
permanent effect at mount time, like journal creation, etc. And those
which are meaningless across different mounts, like communication file
descriptors.

Thanks,
Miklos

2008-01-25 09:43:51

by Miklos Szeredi

[permalink] [raw]
Subject: Re: [patch 21/26] mount options: partially fix nfs

> On Thu, 2008-01-24 at 20:34 +0100, Miklos Szeredi wrote:
> > plain text document attachment (nfs_opts.patch)
> > From: Miklos Szeredi <[email protected]>
> >
> > Add posix, bsize=, namelen= options to /proc/mounts for nfs
> > filesystems.
> >
> > Document several other options that are still missing.
> >
> > Signed-off-by: Miklos Szeredi <[email protected]>
> > ---
> >
> > Index: linux/fs/nfs/super.c
> > ===================================================================
> > --- linux.orig/fs/nfs/super.c 2008-01-19 11:56:34.000000000 +0100
> > +++ linux/fs/nfs/super.c 2008-01-21 20:41:30.000000000 +0100
> > @@ -449,6 +449,7 @@ static void nfs_show_mount_options(struc
> > } nfs_info[] = {
> > { NFS_MOUNT_SOFT, ",soft", ",hard" },
> > { NFS_MOUNT_INTR, ",intr", ",nointr" },
> > + { NFS_MOUNT_POSIX, ",posix", "" },
> > { NFS_MOUNT_NOCTO, ",nocto", "" },
> > { NFS_MOUNT_NOAC, ",noac", "" },
> > { NFS_MOUNT_NONLM, ",nolock", "" },
> > @@ -459,10 +460,17 @@ static void nfs_show_mount_options(struc
> > };
> > const struct proc_nfs_info *nfs_infop;
> > struct nfs_client *clp = nfss->nfs_client;
> > + unsigned int default_namelen =
> > + clp->rpc_ops->version == 4 ? NFS4_MAXNAMLEN :
> > + clp->rpc_ops->version == 3 ? NFS3_MAXNAMLEN : NFS2_MAXNAMLEN;
> > seq_printf(m, ",vers=%d", clp->rpc_ops->version);
> > seq_printf(m, ",rsize=%d", nfss->rsize);
> > seq_printf(m, ",wsize=%d", nfss->wsize);
> > + if (nfss->bsize != 0)
> > + seq_printf(m, ",bsize=%d", nfss->bsize);
> > + if (nfss->namelen != default_namelen)
> > + seq_printf(m, ",namelen=%d", nfss->namelen);
>
> You really just want to look at the value of nfss->namelen. It should
> always be set.

OK, I usually add the condition for (value != default_value) to avoid
unnecessary clutter. But sure, there's no problem with showing the
option unconditionally.

>
> > if (nfss->acregmin != 3*HZ || showdefaults)
> > seq_printf(m, ",acregmin=%d", nfss->acregmin/HZ);
> > if (nfss->acregmax != 60*HZ || showdefaults)
> > @@ -482,6 +490,18 @@ static void nfs_show_mount_options(struc
> > seq_printf(m, ",timeo=%lu", 10U * nfss->client->cl_timeout->to_initval / HZ);
> > seq_printf(m, ",retrans=%u", nfss->client->cl_timeout->to_retries);
> > seq_printf(m, ",sec=%s", nfs_pseudoflavour_to_name(nfss->client->cl_auth->au_flavor));
> > +
> > + /*
> > + * Missing options:
> > + * port=
> > + * mountport=
> > + * mountvers=
> > + * mountproto=
> > + * addr=
> > + * clientaddr=
> > + * mounthost=
> > + * mountaddr=
> > + */
>
> The new text mount interface actually does allow us to store these
> values if we really do need to. That should be a separate patch,
> however.

OK.

Thanks,
Miklos

2008-01-25 17:21:17

by Chuck Lever III

[permalink] [raw]
Subject: Re: [patch 21/26] mount options: partially fix nfs

On Jan 25, 2008, at 4:39 AM, Miklos Szeredi wrote:
>> Miklos Szeredi wrote:
>>> From: Miklos Szeredi <[email protected]>
>>>
>>> Add posix, bsize=, namelen= options to /proc/mounts for nfs
>>> filesystems.
>>>
>>> Document several other options that are still missing.
>>
>> NFS lists only some options in /proc/mounts on purpose: only the
>> essential options are mentioned there to keep clutter down. The
>> three
>> you've added here are for all intents and purposes deprecated,
>> which is
>> why they are not supported.
>>
>> NFS lists a more complete set of mount options for a mount point in
>> /proc/self/mountstats. See nfs_show_stats().
>>
>> Since your cover letter does not explain why you are changing this
>> code,
>> can you refer me to a description of why you are doing this?
>
> Descritption is in the 01/26 patch.
>
>> More below.
>>
>>> Signed-off-by: Miklos Szeredi <[email protected]>
>>> ---
>>>
>>> Index: linux/fs/nfs/super.c
>>> ===================================================================
>>> --- linux.orig/fs/nfs/super.c 2008-01-19 11:56:34.000000000 +0100
>>> +++ linux/fs/nfs/super.c 2008-01-21 20:41:30.000000000 +0100
>>> @@ -449,6 +449,7 @@ static void nfs_show_mount_options(struc
>>> } nfs_info[] = {
>>> { NFS_MOUNT_SOFT, ",soft", ",hard" },
>>> { NFS_MOUNT_INTR, ",intr", ",nointr" },
>>> + { NFS_MOUNT_POSIX, ",posix", "" },
>>> { NFS_MOUNT_NOCTO, ",nocto", "" },
>>> { NFS_MOUNT_NOAC, ",noac", "" },
>>> { NFS_MOUNT_NONLM, ",nolock", "" },
>>> @@ -459,10 +460,17 @@ static void nfs_show_mount_options(struc
>>> };
>>> const struct proc_nfs_info *nfs_infop;
>>> struct nfs_client *clp = nfss->nfs_client;
>>> + unsigned int default_namelen =
>>> + clp->rpc_ops->version == 4 ? NFS4_MAXNAMLEN :
>>> + clp->rpc_ops->version == 3 ? NFS3_MAXNAMLEN : NFS2_MAXNAMLEN;
>>>
>>> seq_printf(m, ",vers=%d", clp->rpc_ops->version);
>>> seq_printf(m, ",rsize=%d", nfss->rsize);
>>> seq_printf(m, ",wsize=%d", nfss->wsize);
>>> + if (nfss->bsize != 0)
>>> + seq_printf(m, ",bsize=%d", nfss->bsize);
>>> + if (nfss->namelen != default_namelen)
>>> + seq_printf(m, ",namelen=%d", nfss->namelen);
>>> if (nfss->acregmin != 3*HZ || showdefaults)
>>> seq_printf(m, ",acregmin=%d", nfss->acregmin/HZ);
>>> if (nfss->acregmax != 60*HZ || showdefaults)
>>> @@ -482,6 +490,18 @@ static void nfs_show_mount_options(struc
>>> seq_printf(m, ",timeo=%lu", 10U * nfss->client->cl_timeout-
>>> >to_initval / HZ);
>>> seq_printf(m, ",retrans=%u", nfss->client->cl_timeout-
>>> >to_retries);
>>> seq_printf(m, ",sec=%s", nfs_pseudoflavour_to_name(nfss->client-
>>> >cl_auth->au_flavor));
>>> +
>>> + /*
>>> + * Missing options:
>>> + * port=
>>
>> Probably should be supported.
>>
>>> + * addr=
>>
>> This one is already supported; see nfs_show_options().
>
> Right, thanks.
>
>>
>>> + * clientaddr=
>>
>> This one isn't, and should be... would be useful for tracking down
>> certain NFSv4 problems.
>>
>>> + * mounthost=
>>> + * mountaddr=
>>> + * mountport=
>>> + * mountvers=
>>> + * mountproto=
>>
>> And these mount* options are for the kernel's new mount protocol
>> client.
>> They aren't really useful for understanding steady-state NFS client
>> behavior, they only effect mount-time behavior.
>
> All mount options should be shown, which are needed to reconstruct a
> previous mount.

Ah, OK.

I'm happy to implement logic to display the all missing options. I
should have updated nfs_show_mount_options() when I wrote the NFS
mount option parser.

Let me know your preference.

> For example, if you copy options out from /proc/mount, umount the
> filesystem, and then create a new mount with the copied options, you
> should get the same mount.

For NFS, umount also needs to read some of the options in order to
determine how mountd is to connect to the server for the unmount.
(That's why we have addr= in the first place).

--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com

2008-01-28 11:34:51

by Miklos Szeredi

[permalink] [raw]
Subject: Re: [patch 21/26] mount options: partially fix nfs

> > All mount options should be shown, which are needed to reconstruct a
> > previous mount.
>
> Ah, OK.
>
> I'm happy to implement logic to display the all missing options. I
> should have updated nfs_show_mount_options() when I wrote the NFS
> mount option parser.
>
> Let me know your preference.

You are more familiar with NFS, so I think it would be better if you
updated nfs_show_mount_options().

Could you also queue my patch (updated) or incorporate it into a
combined fix?

Thanks,
Miklos
----

Subject: mount options: partially fix nfs

From: Miklos Szeredi <[email protected]>

Add posix, bsize=, namelen= options to /proc/mounts for nfs
filesystems.

Document several other options that are still missing.

Changes:

- display namelen= unconditionally
- addr= isn't missing after all

Signed-off-by: Miklos Szeredi <[email protected]>
CC: Trond Myklebust <[email protected]>
---

Index: linux/fs/nfs/super.c
===================================================================
--- linux.orig/fs/nfs/super.c 2008-01-25 15:44:56.000000000 +0100
+++ linux/fs/nfs/super.c 2008-01-25 15:57:32.000000000 +0100
@@ -449,6 +449,7 @@ static void nfs_show_mount_options(struc
} nfs_info[] = {
{ NFS_MOUNT_SOFT, ",soft", ",hard" },
{ NFS_MOUNT_INTR, ",intr", ",nointr" },
+ { NFS_MOUNT_POSIX, ",posix", "" },
{ NFS_MOUNT_NOCTO, ",nocto", "" },
{ NFS_MOUNT_NOAC, ",noac", "" },
{ NFS_MOUNT_NONLM, ",nolock", "" },
@@ -463,6 +464,9 @@ static void nfs_show_mount_options(struc
seq_printf(m, ",vers=%d", clp->rpc_ops->version);
seq_printf(m, ",rsize=%d", nfss->rsize);
seq_printf(m, ",wsize=%d", nfss->wsize);
+ seq_printf(m, ",namelen=%d", nfss->namelen);
+ if (nfss->bsize != 0)
+ seq_printf(m, ",bsize=%d", nfss->bsize);
if (nfss->acregmin != 3*HZ || showdefaults)
seq_printf(m, ",acregmin=%d", nfss->acregmin/HZ);
if (nfss->acregmax != 60*HZ || showdefaults)
@@ -482,6 +486,17 @@ static void nfs_show_mount_options(struc
seq_printf(m, ",timeo=%lu", 10U * nfss->client->cl_timeout->to_initval / HZ);
seq_printf(m, ",retrans=%u", nfss->client->cl_timeout->to_retries);
seq_printf(m, ",sec=%s", nfs_pseudoflavour_to_name(nfss->client->cl_auth->au_flavor));
+
+ /*
+ * Missing options:
+ * port=
+ * mountport=
+ * mountvers=
+ * mountproto=
+ * clientaddr=
+ * mounthost=
+ * mountaddr=
+ */
}

/*

2008-01-28 16:24:18

by Chuck Lever III

[permalink] [raw]
Subject: Re: [patch 21/26] mount options: partially fix nfs

On Jan 28, 2008, at 6:34 AM, Miklos Szeredi wrote:
>>> All mount options should be shown, which are needed to reconstruct a
>>> previous mount.
>>
>> Ah, OK.
>>
>> I'm happy to implement logic to display the all missing options. I
>> should have updated nfs_show_mount_options() when I wrote the NFS
>> mount option parser.
>>
>> Let me know your preference.
>
> You are more familiar with NFS, so I think it would be better if you
> updated nfs_show_mount_options().
>
> Could you also queue my patch (updated) or incorporate it into a
> combined fix?

Yes. I'll have time in a day or two to get this finished.

> Thanks,
> Miklos
> ----
>
> Subject: mount options: partially fix nfs
>
> From: Miklos Szeredi <[email protected]>
>
> Add posix, bsize=, namelen= options to /proc/mounts for nfs
> filesystems.
>
> Document several other options that are still missing.
>
> Changes:
>
> - display namelen= unconditionally
> - addr= isn't missing after all
>
> Signed-off-by: Miklos Szeredi <[email protected]>
> CC: Trond Myklebust <[email protected]>
> ---
>
> Index: linux/fs/nfs/super.c
> ===================================================================
> --- linux.orig/fs/nfs/super.c 2008-01-25 15:44:56.000000000 +0100
> +++ linux/fs/nfs/super.c 2008-01-25 15:57:32.000000000 +0100
> @@ -449,6 +449,7 @@ static void nfs_show_mount_options(struc
> } nfs_info[] = {
> { NFS_MOUNT_SOFT, ",soft", ",hard" },
> { NFS_MOUNT_INTR, ",intr", ",nointr" },
> + { NFS_MOUNT_POSIX, ",posix", "" },
> { NFS_MOUNT_NOCTO, ",nocto", "" },
> { NFS_MOUNT_NOAC, ",noac", "" },
> { NFS_MOUNT_NONLM, ",nolock", "" },
> @@ -463,6 +464,9 @@ static void nfs_show_mount_options(struc
> seq_printf(m, ",vers=%d", clp->rpc_ops->version);
> seq_printf(m, ",rsize=%d", nfss->rsize);
> seq_printf(m, ",wsize=%d", nfss->wsize);
> + seq_printf(m, ",namelen=%d", nfss->namelen);
> + if (nfss->bsize != 0)
> + seq_printf(m, ",bsize=%d", nfss->bsize);
> if (nfss->acregmin != 3*HZ || showdefaults)
> seq_printf(m, ",acregmin=%d", nfss->acregmin/HZ);
> if (nfss->acregmax != 60*HZ || showdefaults)
> @@ -482,6 +486,17 @@ static void nfs_show_mount_options(struc
> seq_printf(m, ",timeo=%lu", 10U * nfss->client->cl_timeout-
> >to_initval / HZ);
> seq_printf(m, ",retrans=%u", nfss->client->cl_timeout->to_retries);
> seq_printf(m, ",sec=%s", nfs_pseudoflavour_to_name(nfss->client-
> >cl_auth->au_flavor));
> +
> + /*
> + * Missing options:
> + * port=
> + * mountport=
> + * mountvers=
> + * mountproto=
> + * clientaddr=
> + * mounthost=
> + * mountaddr=
> + */
> }
>
> /*

--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com