mirror of
https://github.com/torvalds/linux
synced 2024-09-06 09:51:23 +00:00
nfs: keep server info for remounts
With newer kernels that use fs_context for nfs mounts, remounts fail with
-EINVAL.
$ mount -t nfs -o nolock 10.0.0.1:/tmp/test /mnt/test/
$ mount -t nfs -o remount /mnt/test/
mount: mounting 10.0.0.1:/tmp/test on /mnt/test failed: Invalid argument
For remounts, the nfs server address and port are populated by
nfs_init_fs_context and later overwritten with 0x00 bytes by
nfs23_parse_monolithic. The remount then fails as the server address is
invalid.
Fix this by not overwriting nfs server info in nfs23_parse_monolithic if
we're doing a remount.
Fixes: f2aedb713c
("NFS: Add fs_context support.")
Signed-off-by: Martin Kaiser <martin@kaiser.cx>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
37ffe06537
commit
b322bf9e98
|
@ -1114,9 +1114,12 @@ static int nfs23_parse_monolithic(struct fs_context *fc,
|
||||||
ctx->acdirmax = data->acdirmax;
|
ctx->acdirmax = data->acdirmax;
|
||||||
ctx->need_mount = false;
|
ctx->need_mount = false;
|
||||||
|
|
||||||
|
if (!is_remount_fc(fc)) {
|
||||||
memcpy(sap, &data->addr, sizeof(data->addr));
|
memcpy(sap, &data->addr, sizeof(data->addr));
|
||||||
ctx->nfs_server.addrlen = sizeof(data->addr);
|
ctx->nfs_server.addrlen = sizeof(data->addr);
|
||||||
ctx->nfs_server.port = ntohs(data->addr.sin_port);
|
ctx->nfs_server.port = ntohs(data->addr.sin_port);
|
||||||
|
}
|
||||||
|
|
||||||
if (sap->ss_family != AF_INET ||
|
if (sap->ss_family != AF_INET ||
|
||||||
!nfs_verify_server_address(sap))
|
!nfs_verify_server_address(sap))
|
||||||
goto out_no_address;
|
goto out_no_address;
|
||||||
|
|
Loading…
Reference in a new issue