The compat_sys_mount() system call throws EINVAL for text-based NFSv4
mounts.
The text-based mount interface assumes that any mount option blob that
doesn't set the version field to "1" is a C string (ie not a legacy
mount request). The compat_sys_mount() call treats blobs that don't
set the version field to "1" as an error. We just relax the check in
compat_sys_mount() a bit to allow C strings to be passed down to the NFSv4
client.
Signed-off-by: Chuck Lever <[email protected]>
---
fs/compat.c | 3 ---
1 files changed, 0 insertions(+), 3 deletions(-)
diff --git a/fs/compat.c b/fs/compat.c
index 5216c3f..61388aa 100644
--- a/fs/compat.c
+++ b/fs/compat.c
@@ -702,9 +702,6 @@ static int do_nfs4_super_data_conv(void *raw_data)
real->flags = raw->flags;
real->version = raw->version;
}
- else {
- return -EINVAL;
- }
return 0;
}
On Wed, 2008-02-13 at 14:55 -0500, Chuck Lever wrote:
> The compat_sys_mount() system call throws EINVAL for text-based NFSv4
> mounts.
>
> The text-based mount interface assumes that any mount option blob that
> doesn't set the version field to "1" is a C string (ie not a legacy
> mount request). The compat_sys_mount() call treats blobs that don't
> set the version field to "1" as an error. We just relax the check in
> compat_sys_mount() a bit to allow C strings to be passed down to the NFSv4
> client.
>
> Signed-off-by: Chuck Lever <[email protected]>
> ---
>
> fs/compat.c | 3 ---
> 1 files changed, 0 insertions(+), 3 deletions(-)
>
> diff --git a/fs/compat.c b/fs/compat.c
> index 5216c3f..61388aa 100644
> --- a/fs/compat.c
> +++ b/fs/compat.c
> @@ -702,9 +702,6 @@ static int do_nfs4_super_data_conv(void *raw_data)
> real->flags = raw->flags;
> real->version = raw->version;
> }
> - else {
> - return -EINVAL;
> - }
>
> return 0;
> }
Looks good. Thanks Chuck!
Trond