| From e2b79c06c8213e28db7f2caf028d82bf85ef8c4a Mon Sep 17 00:00:00 2001 |
| From: Chris Perl <cperl@janestreet.com> |
| Date: Mon, 17 Dec 2018 10:56:38 -0500 |
| Subject: NFS: nfs_compare_mount_options always compare auth flavors. |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| [ Upstream commit 594d1644cd59447f4fceb592448d5cd09eb09b5e ] |
| |
| This patch removes the check from nfs_compare_mount_options to see if a |
| `sec' option was passed for the current mount before comparing auth |
| flavors and instead just always compares auth flavors. |
| |
| Consider the following scenario: |
| |
| You have a server with the address 192.168.1.1 and two exports /export/a |
| and /export/b. The first export supports `sys' and `krb5' security, the |
| second just `sys'. |
| |
| Assume you start with no mounts from the server. |
| |
| The following results in EIOs being returned as the kernel nfs client |
| incorrectly thinks it can share the underlying `struct nfs_server's: |
| |
| $ mkdir /tmp/{a,b} |
| $ sudo mount -t nfs -o vers=3,sec=krb5 192.168.1.1:/export/a /tmp/a |
| $ sudo mount -t nfs -o vers=3 192.168.1.1:/export/b /tmp/b |
| $ df >/dev/null |
| df: ‘/tmp/b’: Input/output error |
| |
| Signed-off-by: Chris Perl <cperl@janestreet.com> |
| Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/nfs/super.c | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| diff --git a/fs/nfs/super.c b/fs/nfs/super.c |
| index 38de09b08e96..3c4aeb83e1c4 100644 |
| --- a/fs/nfs/super.c |
| +++ b/fs/nfs/super.c |
| @@ -2401,8 +2401,7 @@ static int nfs_compare_mount_options(const struct super_block *s, const struct n |
| goto Ebusy; |
| if (a->acdirmax != b->acdirmax) |
| goto Ebusy; |
| - if (b->auth_info.flavor_len > 0 && |
| - clnt_a->cl_auth->au_flavor != clnt_b->cl_auth->au_flavor) |
| + if (clnt_a->cl_auth->au_flavor != clnt_b->cl_auth->au_flavor) |
| goto Ebusy; |
| return 1; |
| Ebusy: |
| -- |
| 2.19.1 |
| |