Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7e6eb683 authored by Bryan Schumaker's avatar Bryan Schumaker Committed by Trond Myklebust
Browse files

NFS: Honor the authflavor set in the clone mount data



The authflavor is set in an nfs_clone_mount structure and passed to the
xdev_mount() functions where it was promptly ignored.  Instead, use it
to initialize an rpc_clnt for the cloned server.

Signed-off-by: default avatarBryan Schumaker <bjschuma@netapp.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent f05d147f
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -1729,7 +1729,8 @@ struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *data,
 */
 */
struct nfs_server *nfs_clone_server(struct nfs_server *source,
struct nfs_server *nfs_clone_server(struct nfs_server *source,
				    struct nfs_fh *fh,
				    struct nfs_fh *fh,
				    struct nfs_fattr *fattr)
				    struct nfs_fattr *fattr,
				    rpc_authflavor_t flavor)
{
{
	struct nfs_server *server;
	struct nfs_server *server;
	struct nfs_fattr *fattr_fsinfo;
	struct nfs_fattr *fattr_fsinfo;
@@ -1758,7 +1759,7 @@ struct nfs_server *nfs_clone_server(struct nfs_server *source,


	error = nfs_init_server_rpcclient(server,
	error = nfs_init_server_rpcclient(server,
			source->client->cl_timeout,
			source->client->cl_timeout,
			source->client->cl_auth->au_flavor);
			flavor);
	if (error < 0)
	if (error < 0)
		goto out_free_server;
		goto out_free_server;
	if (!IS_ERR(source->client_acl))
	if (!IS_ERR(source->client_acl))
+2 −1
Original line number Original line Diff line number Diff line
@@ -165,7 +165,8 @@ extern struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *,
extern void nfs_free_server(struct nfs_server *server);
extern void nfs_free_server(struct nfs_server *server);
extern struct nfs_server *nfs_clone_server(struct nfs_server *,
extern struct nfs_server *nfs_clone_server(struct nfs_server *,
					   struct nfs_fh *,
					   struct nfs_fh *,
					   struct nfs_fattr *);
					   struct nfs_fattr *,
					   rpc_authflavor_t);
extern void nfs_mark_client_ready(struct nfs_client *clp, int state);
extern void nfs_mark_client_ready(struct nfs_client *clp, int state);
extern int nfs4_check_client_ready(struct nfs_client *clp);
extern int nfs4_check_client_ready(struct nfs_client *clp);
extern struct nfs_client *nfs4_set_ds_client(struct nfs_client* mds_clp,
extern struct nfs_client *nfs4_set_ds_client(struct nfs_client* mds_clp,
+1 −2
Original line number Original line Diff line number Diff line
@@ -257,7 +257,6 @@ struct vfsmount *nfs_d_automount(struct path *path)
	struct nfs_fh *fh = NULL;
	struct nfs_fh *fh = NULL;
	struct nfs_fattr *fattr = NULL;
	struct nfs_fattr *fattr = NULL;
	struct rpc_clnt *client;
	struct rpc_clnt *client;
	rpc_authflavor_t flavor = RPC_AUTH_UNIX;


	dprintk("--> nfs_d_automount()\n");
	dprintk("--> nfs_d_automount()\n");


@@ -285,7 +284,7 @@ struct vfsmount *nfs_d_automount(struct path *path)
	if (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL)
	if (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL)
		mnt = nfs_do_refmount(client, path->dentry);
		mnt = nfs_do_refmount(client, path->dentry);
	else
	else
		mnt = nfs_do_submount(path->dentry, fh, fattr, flavor);
		mnt = nfs_do_submount(path->dentry, fh, fattr, client->cl_auth->au_flavor);
	rpc_shutdown_client(client);
	rpc_shutdown_client(client);


	if (IS_ERR(mnt))
	if (IS_ERR(mnt))
+2 −2
Original line number Original line Diff line number Diff line
@@ -2428,7 +2428,7 @@ nfs_xdev_mount(struct file_system_type *fs_type, int flags,
	dprintk("--> nfs_xdev_mount()\n");
	dprintk("--> nfs_xdev_mount()\n");


	/* create a new volume representation */
	/* create a new volume representation */
	server = nfs_clone_server(NFS_SB(data->sb), data->fh, data->fattr);
	server = nfs_clone_server(NFS_SB(data->sb), data->fh, data->fattr, data->authflavor);
	if (IS_ERR(server)) {
	if (IS_ERR(server)) {
		error = PTR_ERR(server);
		error = PTR_ERR(server);
		goto out_err_noserver;
		goto out_err_noserver;
@@ -2955,7 +2955,7 @@ nfs4_xdev_mount(struct file_system_type *fs_type, int flags,
	dprintk("--> nfs4_xdev_mount()\n");
	dprintk("--> nfs4_xdev_mount()\n");


	/* create a new volume representation */
	/* create a new volume representation */
	server = nfs_clone_server(NFS_SB(data->sb), data->fh, data->fattr);
	server = nfs_clone_server(NFS_SB(data->sb), data->fh, data->fattr, data->authflavor);
	if (IS_ERR(server)) {
	if (IS_ERR(server)) {
		error = PTR_ERR(server);
		error = PTR_ERR(server);
		goto out_err_noserver;
		goto out_err_noserver;